mirror of https://github.com/astral-sh/ruff
[ty] Add multithreaded benchmark (#18822)
This commit is contained in:
parent
ea812d0813
commit
a6ad8fb342
|
|
@ -204,8 +204,8 @@ static SYMPY: std::sync::LazyLock<Benchmark<'static>> = std::sync::LazyLock::new
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
#[bench(args=[&*ALTAIR, &*FREQTRADE, &*PYDANTIC], sample_size=2, sample_count=3)]
|
#[track_caller]
|
||||||
fn small(bencher: Bencher, benchmark: &Benchmark) {
|
fn run_single_threaded(bencher: Bencher, benchmark: &Benchmark) {
|
||||||
bencher
|
bencher
|
||||||
.with_inputs(|| benchmark.setup_iteration())
|
.with_inputs(|| benchmark.setup_iteration())
|
||||||
.bench_local_refs(|db| {
|
.bench_local_refs(|db| {
|
||||||
|
|
@ -213,41 +213,46 @@ fn small(bencher: Bencher, benchmark: &Benchmark) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[bench(args=[&*ALTAIR, &*FREQTRADE, &*PYDANTIC], sample_size=2, sample_count=3)]
|
||||||
|
fn small(bencher: Bencher, benchmark: &Benchmark) {
|
||||||
|
run_single_threaded(bencher, benchmark);
|
||||||
|
}
|
||||||
|
|
||||||
#[bench(args=[&*COLOUR_SCIENCE, &*PANDAS], sample_size=1, sample_count=3)]
|
#[bench(args=[&*COLOUR_SCIENCE, &*PANDAS], sample_size=1, sample_count=3)]
|
||||||
fn medium(bencher: Bencher, benchmark: &Benchmark) {
|
fn medium(bencher: Bencher, benchmark: &Benchmark) {
|
||||||
bencher
|
run_single_threaded(bencher, benchmark);
|
||||||
.with_inputs(|| benchmark.setup_iteration())
|
|
||||||
.bench_local_refs(|db| {
|
|
||||||
check_project(db, benchmark.max_diagnostics);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench(args=[&*SYMPY], sample_size=1, sample_count=2)]
|
#[bench(args=[&*SYMPY], sample_size=1, sample_count=2)]
|
||||||
fn large(bencher: Bencher, benchmark: &Benchmark) {
|
fn large(bencher: Bencher, benchmark: &Benchmark) {
|
||||||
|
run_single_threaded(bencher, benchmark);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench(args=[&*PYDANTIC], sample_size=3, sample_count=3)]
|
||||||
|
fn multithreaded(bencher: Bencher, benchmark: &Benchmark) {
|
||||||
|
let thread_pool = ThreadPoolBuilder::new().build().unwrap();
|
||||||
|
|
||||||
bencher
|
bencher
|
||||||
.with_inputs(|| benchmark.setup_iteration())
|
.with_inputs(|| benchmark.setup_iteration())
|
||||||
.bench_local_refs(|db| {
|
.bench_local_values(|db| {
|
||||||
check_project(db, benchmark.max_diagnostics);
|
thread_pool.install(|| {
|
||||||
|
check_project(&db, benchmark.max_diagnostics);
|
||||||
|
db
|
||||||
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let filter =
|
|
||||||
std::env::var("TY_LOG").unwrap_or("ty_walltime=info,ruff_benchmark=info".to_string());
|
|
||||||
|
|
||||||
let _logging = setup_logging_with_filter(&filter).expect("Filter to be valid");
|
|
||||||
|
|
||||||
// Disable multithreading for now due to
|
|
||||||
// https://github.com/salsa-rs/salsa/issues/918.
|
|
||||||
//
|
|
||||||
// Salsa has a fast-path for the first db when looking up ingredients.
|
|
||||||
// It seems that this fast-path becomes extremely slow for all db's other
|
|
||||||
// than the first one, especially when using multithreading (10x slower than the first run).
|
|
||||||
ThreadPoolBuilder::new()
|
ThreadPoolBuilder::new()
|
||||||
.num_threads(1)
|
.num_threads(1)
|
||||||
.use_current_thread()
|
.use_current_thread()
|
||||||
.build_global()
|
.build_global()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let filter =
|
||||||
|
std::env::var("TY_LOG").unwrap_or("ty_walltime=info,ruff_benchmark=info".to_string());
|
||||||
|
|
||||||
|
let _logging = setup_logging_with_filter(&filter).expect("Filter to be valid");
|
||||||
|
|
||||||
divan::main();
|
divan::main();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue