当前位置:网站首页>Rust: performance test criteria Library
Rust: performance test criteria Library
2020-11-08 11:21:00 【osc_ju8o7gji】
In the field of quantification , High performance requirements , Especially high frequency trading , That's nanosecond . stay RUST in , Test a function , Or a time-consuming operation, that is, performance analysis , How to do it ?
One 、 timer
Whether it can be used std::time::systime To calculate the time spent ? Let's have a try :
use std::time::SystemTime;
pub struct Stock{
pub price:f64,
pub volume:i32,
pub code:String,
pub amount:f64,
}
impl Stock{
fn default()->Self{
let p =10000.0_f64;
let v =1_i32;
Stock{
price:p,
volume:v,
code:String::from("SH600036"),
amount: p*v as f64,
}
}
}
fn main() {
let now = SystemTime::now();
let stock = Stock::default();
let elapsed = now.elapsed().unwrap().as_nanos();
println!("cost time :{:?} ",elapsed);
}
You'll find that :
Why does it take to create a structure 3500 nanosecond , It's amazing . Actually , The real situation is not like this , It's because of the test error of the timer .
therefore , If you want to do a professional performance test , Or with the help of professional tripartite performance test library .
Two 、 Professional tripartite Library
RUST in , There are still many professional tripartite libraries , To push the library criterion.rs.
https://github.com/bheisler/criterion.rs
You can take a look at .
3、 ... and 、 example
1、 Create a test directory
In the engineering , Create a special test directory : I'm here in
my_bench Under the table of contents , Specifically created benches Catalog
2、toml file
about my_bench Under the project toml file
toml In file , increase :
[dev-dependencies]
criterion = "0.3"
[[bench]]
name = "my_benchmark"
harness = false
among ,name ="my_benchmark" It means something , It's not random . Here means , I am here my_bench Under the project , There is one my_benchmark.rs file , It has the performance test code I wrote . Don't go anywhere else .
3、 Prepare performance test code
because toml In file , Yes name =“my_benchmark” , that , The performance test code is my_benchmark.rs. Create this file .
Write the corresponding performance test code :
use criterion::{
black_box, criterion_group, criterion_main, Criterion};
pub struct Stock{
pub price:f64,
pub volume:i32,
pub code:String,
pub amount:f64,
}
impl Stock{
fn default()->Self{
let p =10000.0_f64;
let v =1_i32;
Stock{
price:p,
volume:v,
code:String::from("SH600036"),
amount: p*v as f64,
}
}
}
pub fn set_heap()->Stock{
Stock::default()
}
pub fn box_stock() ->Box<Stock>{
Box::new(Stock::default())
}
fn criterion_benchmark_heap(c: &mut Criterion) {
c.bench_function("stock ", |b| b.iter(|| set_heap()));
}
fn criterion_benchmark_box(c: &mut Criterion) {
c.bench_function("box<stock> ", |b| b.iter(|| box_stock()));
}
criterion_group!(benches, criterion_benchmark_heap,criterion_benchmark_box);
criterion_main!(benches);
4、 function
In all the engineering my_bench Next , function cargo bench, That is, you can run the performance test code .
Finished bench [optimized] target(s) in 2.80s
Running target\release\deps\my_bench-95230ab505784caf.exe
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target\release\deps\my_benchmark-a468db13a6ba0ea3.exe
Gnuplot not found, using plotters backend
stock time: [75.387 ns 83.206 ns 91.985 ns]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
box<stock> time: [168.68 ns 189.43 ns 212.00 ns]
Found 3 outliers among 100 measurements (3.00%)
From above , We can get detailed test information , Including the time distribution of the operation .
Professional performance testing tools show that , Create a Stock object , It takes about the average 73ns, Not the timer 3500ns;
however , Create a Stock Of Box The object takes twice as long .
版权声明
本文为[osc_ju8o7gji]所创,转载请带上原文链接,感谢
边栏推荐
- How to deploy pytorch lightning model to production
- Rust: command line parameter and environment variable operation
- Understanding design patterns
- The young generation of winner's programming life, the starting point of changing the world is hidden around
- C language I blog assignment 03
- python基本语法 变量
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- ArrayList源码分析
- Get PMP certificate at 51CTO College
- Bccoin tells you: what is the most reliable investment project at the end of the year!
猜你喜欢
Major changes in Huawei's cloud: Cloud & AI rises to Huawei's fourth largest BG with full fire
Deeplight Technology Bluetooth protocol SRRC certification services
2020-11-05
11 server monitoring tools commonly used by operation and maintenance personnel
学习小结(关于深度学习、视觉和学习体会)
Don't look! Full interpretation of Alibaba cloud's original data lake system! (Internet disk link attached)
Bohai bank million level fines continue: Li Volta said that the governance is perfect, the growth rate is declining
Solve Safari browser download file name garbled problem
Mozi college SQL injection solution
Installing MacOS 11 Big Sur in virtual machine
随机推荐
Ali! Visual computing developer's series of manuals (with internet disk link)
个人目前技术栈
11 server monitoring tools commonly used by operation and maintenance personnel
为 Docsify 自动生成 RSS 订阅
print( 'Hello,NumPy!' )
2020-11-05
PCIe 枚举过程
仅用六种字符来完成Hello World,你能做到吗?
渤海银行百万级罚单不断:李伏安却称治理完善,增速呈下滑趋势
Rust : 性能测试criterion库
Analysis of ArrayList source code
解析Istio访问控制
The young generation of winner's programming life, the starting point of changing the world is hidden around
Written interview questions: find the smallest positive integer missing
2 days, using 4 hours after work to develop a test tool
Japan PSE certification
笔试面试题目:求丢失的猪
蘑菇街电商交易平台服务架构及改造优化历程(含PPT)
next.js实现服务端缓存
入门级!教你小程序开发不求人(附网盘链接)