Бенчмаркинг и профилирование в Rust
Бенчмаркинг и профилирование
79
Бенчмаркинг и профилирование - важная тема программирования в любом языке, в том числе и в Rust.
Бенчмаркинг - это процесс измерения производительности программы или ее частей. В Rust для бенчмаркинга используется крейт rustc-bencher
или встроенная в стандартную библиотеку бенчмарк-инфраструктура test::Bencher
. Для написания бенчмарков нужно использовать атрибут #[bench]
перед функцией, которую нужно измерять.
Пример использования:
#[bench] fn bench_add_two_numbers(b: &mut test::Bencher) { b.iter(|| { let x = 1 + 2; }); }
Профилирование - это сбор статистических данных о выполнении программы для выяснения, какие участки кода потребляют больше времени процессора или памяти. В Rust для профилирования используется крейт profiler
.
Для использования крейта необходимо включить его в Cargo.toml:
[dependencies] profiler = "0.1.7"
Для профилирования кода нужно добавить в начало файла модуль:
#[cfg(feature = "cpu_profiler")] #[global_allocator] static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; #[cfg(feature = "cpu_profiler")] use profiler::Profile;
А затем перед нужной функцией нужно добавить атрибут #[profile]
:
#[profile] fn do_something() { // some code for profiling }
В конце выполнения программы можно сохранить полученные данные в файл и построить профилировочный отчет.
Пример сохранения данных и построения отчета:
#[cfg(feature = "cpu_profiler")] Profile::dump(Flamegraph).unwrap();
Это лишь небольшое введение в тему бенчмаркинга и профилирования в Rust. Дальнейшая информация может быть найдена в официальной документации языка Rust и в соответствующих крейтах.
March 27, 2023