当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Istio流量管理--Ingress Gateway
- Rust:命令行参数与环境变量操作
- Xamarin deploys IOS from scratch Walterlv.CloudKeyboard application
- 解析Istio访问控制
- TCP协议如何确保可靠传输
- 仅用六种字符来完成Hello World,你能做到吗?
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- 211 postgraduate entrance examination failed, stay up for two months, get the byte offer! [face to face sharing]
- Written interview topic: looking for the lost pig
- Don't look! Full interpretation of Alibaba cloud's original data lake system! (Internet disk link attached)
猜你喜欢

Personal current technology stack

笔试面试题目:求丢失的猪

Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom

Analysis of istio access control

How to deploy pytorch lightning model to production

渤海银行百万级罚单不断:李伏安却称治理完善,增速呈下滑趋势

维图PDMS切图软件

2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...

Where is the new target market? What is the anchored product? |Ten questions 2021 Chinese enterprise service

还不快看!对于阿里云云原生数据湖体系全解读!(附网盘链接)
随机推荐
值得一看!EMR弹性低成本离线大数据分析最佳实践(附网盘链接)
Japan PSE certification
当Kubernetes遇到机密计算,看阿里巴巴如何保护容器内数据的安全!(附网盘链接)
AMD Zen3首发评测:频率超5GHz,IPC提升不止19%,这次真的Yes了 - 知乎
Istio流量管理--Ingress Gateway
WLAN 直连(对等连接或 P2P)调研及iOS跨平台调研
Bccoin tells you: what is the most reliable investment project at the end of the year!
2 days, using 4 hours after work to develop a test tool
Written interview questions: find the smallest positive integer missing
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Is software testing training class easy to find a job
python小工具:编码转换
It's worth seeing! EMR elastic low cost offline big data analysis best practice (with network disk link)
浅谈单调栈
供货紧张!苹果被曝 iPhone 12 电源芯片产能不足
Px4 adds new applications
PCIe enumeration process
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
Flink的sink实战之一:初探
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom