Logo

Developer learning path

Rust

Бенчмаркинг и профилирование в Rust

Бенчмаркинг и профилирование

79

#description

Бенчмаркинг и профилирование - важная тема программирования в любом языке, в том числе и в 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

Если вам не совсем понятен какой-то абзац текста из лекции, просто нажмите на него и сможете задать уточняющие вопросы по нему.

Если же непонятен весь вопрос, то нажмите на кнопки внизу, чтобы получить новый вариант объяснения, практические примеры или критически оценить сам вопрос.