Skip to content

Commit

Permalink
refactor: use bytesize for foyer-bench (#698)
Browse files Browse the repository at this point in the history
* refactor: use bytesize for foyer-bench

Signed-off-by: MrCroxx <[email protected]>

* chore: fix ci

Signed-off-by: MrCroxx <[email protected]>

* chore: switch bytesize repo to foyer-bytesize

Signed-off-by: MrCroxx <[email protected]>

* fix: fix writer and reader units

Signed-off-by: MrCroxx <[email protected]>

---------

Signed-off-by: MrCroxx <[email protected]>
  • Loading branch information
MrCroxx authored Sep 10, 2024
1 parent 22043fc commit ea88f87
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 58 deletions.
8 changes: 4 additions & 4 deletions .github/template/template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ jobs:
CI: true
run: |
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov
cargo llvm-cov --no-report run --package foyer-bench --bin foyer-bench --features "strict_assertions,sanity" -- --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
cargo llvm-cov --no-report run --package foyer-bench --bin foyer-bench --features "strict_assertions,sanity" -- --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Generate codecov report
run: |
cargo llvm-cov report --lcov --output-path lcov.info
Expand Down Expand Up @@ -231,7 +231,7 @@ jobs:
run: |-
cargo build --all --features deadlock
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-storage/deadlock
timeout 2m ./target/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/deadlock --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/deadlock --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
asan:
name: run with address saniziter
runs-on: ubuntu-latest
Expand Down Expand Up @@ -269,7 +269,7 @@ jobs:
run: |-
cargo +${{ env.RUST_TOOLCHAIN_NIGHTLY }} build --all --target x86_64-unknown-linux-gnu
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Prepare Artifacts on Failure
if: ${{ failure() }}
run: |-
Expand Down Expand Up @@ -317,7 +317,7 @@ jobs:
run: |-
cargo +${{ env.RUST_TOOLCHAIN_NIGHTLY }} build --all --target x86_64-unknown-linux-gnu
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Prepare Artifacts on Failure
if: ${{ failure() }}
run: |-
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ jobs:
CI: true
run: |
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov
cargo llvm-cov --no-report run --package foyer-bench --bin foyer-bench --features "strict_assertions,sanity" -- --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
cargo llvm-cov --no-report run --package foyer-bench --bin foyer-bench --features "strict_assertions,sanity" -- --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Generate codecov report
run: |
cargo llvm-cov report --lcov --output-path lcov.info
Expand Down Expand Up @@ -237,7 +237,7 @@ jobs:
run: |-
cargo build --all --features deadlock
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-storage/deadlock
timeout 2m ./target/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/deadlock --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/deadlock --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
asan:
name: run with address saniziter
runs-on: ubuntu-latest
Expand Down Expand Up @@ -275,7 +275,7 @@ jobs:
run: |-
cargo +${{ env.RUST_TOOLCHAIN_NIGHTLY }} build --all --target x86_64-unknown-linux-gnu
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Prepare Artifacts on Failure
if: ${{ failure() }}
run: |-
Expand Down Expand Up @@ -323,7 +323,7 @@ jobs:
run: |-
cargo +${{ env.RUST_TOOLCHAIN_NIGHTLY }} build --all --target x86_64-unknown-linux-gnu
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Prepare Artifacts on Failure
if: ${{ failure() }}
run: |-
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ jobs:
CI: true
run: |
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov
cargo llvm-cov --no-report run --package foyer-bench --bin foyer-bench --features "strict_assertions,sanity" -- --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
cargo llvm-cov --no-report run --package foyer-bench --bin foyer-bench --features "strict_assertions,sanity" -- --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/codecov --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Generate codecov report
run: |
cargo llvm-cov report --lcov --output-path lcov.info
Expand Down Expand Up @@ -236,7 +236,7 @@ jobs:
run: |-
cargo build --all --features deadlock
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-storage/deadlock
timeout 2m ./target/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/deadlock --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/deadlock --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
asan:
name: run with address saniziter
runs-on: ubuntu-latest
Expand Down Expand Up @@ -274,7 +274,7 @@ jobs:
run: |-
cargo +${{ env.RUST_TOOLCHAIN_NIGHTLY }} build --all --target x86_64-unknown-linux-gnu
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/asan --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Prepare Artifacts on Failure
if: ${{ failure() }}
run: |-
Expand Down Expand Up @@ -322,7 +322,7 @@ jobs:
run: |-
cargo +${{ env.RUST_TOOLCHAIN_NIGHTLY }} build --all --target x86_64-unknown-linux-gnu
mkdir -p $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan --mem 16 --disk 256 --region-size 16 --get-range 1000 --w-rate 1 --r-rate 1 --admission-rate-limit 10 --time 60
timeout 2m ./target/x86_64-unknown-linux-gnu/debug/foyer-bench --dir $GITHUB_WORKSPACE/foyer-data/foyer-bench/lsan --mem 16MiB --disk 256MiB --region-size 16MiB --get-range 1000 --w-rate 1MiB --r-rate 1MiB --admission-rate-limit 10MiB --time 60
- name: Prepare Artifacts on Failure
if: ${{ failure() }}
run: |-
Expand Down
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ fastrace = "0.7"
fastrace-jaeger = "0.7"
fastrace-opentelemetry = "0.7"
clap = { version = "4", features = ["derive"] }
bytesize = { package = "foyer-bytesize", version = "2" }

[profile.release]
debug = true
2 changes: 1 addition & 1 deletion foyer-bench/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ readme = "../README.md"

[dependencies]
anyhow = "1"
bytesize = "1"
bytesize = { workspace = true }
clap = { workspace = true }
console-subscriber = { version = "0.4", optional = true }
fastrace = { workspace = true, optional = true }
Expand Down
88 changes: 44 additions & 44 deletions foyer-bench/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ use std::{
};

use analyze::{analyze, monitor, Metrics};
use bytesize::MIB;
use bytesize::ByteSize;
use clap::{builder::PossibleValuesParser, ArgGroup, Parser};
use foyer::{
Compression, DirectFileDeviceOptionsBuilder, DirectFsDeviceOptionsBuilder, FifoConfig, FifoPicker, HybridCache,
Expand Down Expand Up @@ -73,13 +73,13 @@ pub struct Args {
#[arg(short, long)]
dir: Option<String>,

/// In-memory cache capacity. (MiB)
#[arg(long, default_value_t = 1024)]
mem: usize,
/// In-memory cache capacity.
#[arg(long, default_value_t = ByteSize::gib(1))]
mem: ByteSize,

/// Disk cache capacity. (MiB)
#[arg(long, default_value_t = 1024)]
disk: usize,
/// Disk cache capacity.
#[arg(long, default_value_t = ByteSize::gib(1))]
disk: ByteSize,

/// (s)
#[arg(short, long, default_value_t = 60)]
Expand All @@ -89,29 +89,29 @@ pub struct Args {
#[arg(long, default_value_t = 2)]
report_interval: u64,

/// Write rate limit per writer. (MiB)
#[arg(long, default_value_t = 0.0)]
w_rate: f64,
/// Write rate limit per writer.
#[arg(long, default_value_t = ByteSize::b(0))]
w_rate: ByteSize,

/// Read rate limit per reader. (MiB)
#[arg(long, default_value_t = 0.0)]
r_rate: f64,
/// Read rate limit per reader.
#[arg(long, default_value_t = ByteSize::b(0))]
r_rate: ByteSize,

/// Min entry size (B).
#[arg(long, default_value_t = 64 * 1024)]
entry_size_min: usize,
/// Min entry size.
#[arg(long, default_value_t = ByteSize::kib(64))]
entry_size_min: ByteSize,

/// Max entry size (B).
#[arg(long, default_value_t = 64 * 1024)]
entry_size_max: usize,
/// Max entry size.
#[arg(long, default_value_t = ByteSize::kib(64))]
entry_size_max: ByteSize,

/// Reader lookup key range.
#[arg(long, default_value_t = 10000)]
get_range: u64,

/// Disk cache region size. (MiB)
#[arg(long, default_value_t = 64)]
region_size: usize,
/// Disk cache region size.
#[arg(long, default_value_t = ByteSize::mib(64))]
region_size: ByteSize,

/// Flusher count.
#[arg(long, default_value_t = 4)]
Expand All @@ -136,13 +136,13 @@ pub struct Args {
#[arg(long, default_value_t = 16)]
recover_concurrency: usize,

/// Enable rated ticket admission picker if `admission_rate_limit > 0`. (MiB/s)
#[arg(long, default_value_t = 0)]
admission_rate_limit: usize,
/// Enable rated ticket admission picker if `admission_rate_limit > 0`.
#[arg(long, default_value_t = ByteSize::b(0))]
admission_rate_limit: ByteSize,

/// Enable rated ticket reinsertion picker if `reinsertion_rate_limit > 0`. (MiB/s)
#[arg(long, default_value_t = 0)]
reinsertion_rate_limit: usize,
/// Enable rated ticket reinsertion picker if `reinsertion_rate_limit > 0`.
#[arg(long, default_value_t = ByteSize::b(0))]
reinsertion_rate_limit: ByteSize,

/// `0` means use default.
#[arg(long, default_value_t = 0)]
Expand Down Expand Up @@ -264,14 +264,14 @@ impl TimeSeriesDistribution {
"uniform" => {
// interval = 1 / freq = 1 / (rate / size) = size / rate
let interval =
((args.entry_size_min + args.entry_size_max) >> 1) as f64 / (args.w_rate * 1024.0 * 1024.0);
((args.entry_size_min + args.entry_size_max).as_u64() >> 1) as f64 / (args.w_rate.as_u64() as f64);
let interval = Duration::from_secs_f64(interval);
TimeSeriesDistribution::Uniform { interval }
}
"zipf" => {
// interval = 1 / freq = 1 / (rate / size) = size / rate
let interval =
((args.entry_size_min + args.entry_size_max) >> 1) as f64 / (args.w_rate * 1024.0 * 1024.0);
((args.entry_size_min + args.entry_size_max).as_u64() >> 1) as f64 / (args.w_rate.as_u64() as f64);
let interval = Duration::from_secs_f64(interval);
display_zipf_sample(args.distribution_zipf_n, args.distribution_zipf_s);
TimeSeriesDistribution::Zipf {
Expand Down Expand Up @@ -431,7 +431,7 @@ async fn benchmark(args: Args) {

let builder = HybridCacheBuilder::new()
.with_tracing_config(tracing_config)
.memory(args.mem * MIB as usize)
.memory(args.mem.as_u64() as _)
.with_shards(args.shards);

let builder = match args.eviction.as_str() {
Expand All @@ -453,14 +453,14 @@ async fn benchmark(args: Args) {
builder = match (args.file.as_ref(), args.dir.as_ref()) {
(Some(file), None) => builder.with_device_config(
DirectFileDeviceOptionsBuilder::new(file)
.with_capacity(args.disk * MIB as usize)
.with_region_size(args.region_size * MIB as usize)
.with_capacity(args.disk.as_u64() as _)
.with_region_size(args.region_size.as_u64() as _)
.build(),
),
(None, Some(dir)) => builder.with_device_config(
DirectFsDeviceOptionsBuilder::new(dir)
.with_capacity(args.disk * MIB as usize)
.with_file_size(args.region_size * MIB as usize)
.with_capacity(args.disk.as_u64() as _)
.with_file_size(args.region_size.as_u64() as _)
.build(),
),
_ => unreachable!(),
Expand Down Expand Up @@ -497,13 +497,13 @@ async fn benchmark(args: Args) {
_ => unreachable!(),
});

if args.admission_rate_limit > 0 {
if args.admission_rate_limit.as_u64() > 0 {
builder =
builder.with_admission_picker(Arc::new(RateLimitPicker::new(args.admission_rate_limit * MIB as usize)));
builder.with_admission_picker(Arc::new(RateLimitPicker::new(args.admission_rate_limit.as_u64() as _)));
}
if args.reinsertion_rate_limit > 0 {
if args.reinsertion_rate_limit.as_u64() > 0 {
builder =
builder.with_reinsertion_picker(Arc::new(RateLimitPicker::new(args.admission_rate_limit * MIB as usize)));
builder.with_reinsertion_picker(Arc::new(RateLimitPicker::new(args.admission_rate_limit.as_u64() as _)));
}

if args.clean_region_threshold > 0 {
Expand Down Expand Up @@ -570,15 +570,15 @@ async fn benchmark(args: Args) {
}

async fn bench(args: Args, hybrid: HybridCache<u64, Value>, metrics: Metrics, stop_tx: broadcast::Sender<()>) {
let w_rate = if args.w_rate == 0.0 {
let w_rate = if args.w_rate.as_u64() == 0 {
None
} else {
Some(args.w_rate * 1024.0 * 1024.0)
Some(args.w_rate.as_u64() as _)
};
let r_rate = if args.r_rate == 0.0 {
let r_rate = if args.r_rate.as_u64() == 0 {
None
} else {
Some(args.r_rate * 1024.0 * 1024.0)
Some(args.r_rate.as_u64() as _)
};

let counts = (0..args.writers).map(|_| AtomicU64::default()).collect_vec();
Expand All @@ -590,7 +590,7 @@ async fn bench(args: Args, hybrid: HybridCache<u64, Value>, metrics: Metrics, st
r_rate,
get_range: args.get_range,
counts,
entry_size_range: args.entry_size_min..args.entry_size_max + 1,
entry_size_range: args.entry_size_min.as_u64() as usize..args.entry_size_max.as_u64() as usize + 1,
time: Duration::from_secs(args.time),
warm_up: Duration::from_secs(args.warm_up),
distribution,
Expand Down
2 changes: 1 addition & 1 deletion foyer-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ readme = "../README.md"

[dependencies]
anyhow = "1"
bytesize = "1"
bytesize = { workspace = true }
clap = { workspace = true }
thiserror = "1"

Expand Down

0 comments on commit ea88f87

Please sign in to comment.