当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- The young generation of winner's programming life, the starting point of changing the world is hidden around
- 比Python快20%,就问你兴不兴奋?
- BCCOIN告诉您:年底最靠谱的投资项目是什么!
- It's worth seeing! EMR elastic low cost offline big data analysis best practice (with network disk link)
- 为 Docsify 自动生成 RSS 订阅
- How to deploy pytorch lightning model to production
- [data structure Python description] use hash table to manually implement a dictionary class based on Python interpreter
- Entry level! Teach you how to develop small programs without asking for help (with internet disk link)
- 运维人员常用到的 11 款服务器监控工具
- Flink的sink实战之一:初探
猜你喜欢
随机推荐
软件测试就是这么回事?!
Harbor项目高手问答及赠书活动
运维人员常用到的 11 款服务器监控工具
PX4添加新的应用
Adobe media encoder /Me 2021软件安装包(附安装教程)
笔试面试题目:判断单链表是否有环
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
“1024”征文活动结果新鲜出炉!快来看看是否榜上有名?~~
Don't look! Full interpretation of Alibaba cloud's original data lake system! (Internet disk link attached)
蘑菇街电商交易平台服务架构及改造优化历程(含PPT)
TiDB 性能竞赛 11.02-11.06
Japan PSE certification
How to deploy pytorch lightning model to production
Rust : 性能测试criterion库
Rust: command line parameter and environment variable operation
Rust:命令行参数与环境变量操作
如何将 PyTorch Lightning 模型部署到生产中
来自朋友最近阿里、腾讯、美团等P7级Python开发岗位面试题
糟糕,系统又被攻击了
漫画|讲解一下如何写简历&项目