当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- PX4添加新的应用
- Q & A and book giving activities of harbor project experts
- Powershell 使用.Net对象发送邮件
- Can you do it with only six characters?
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- The most complete! Alibaba economy cloud original practice! (Internet disk link attached)
- Close to the double 11, he made up for two months and successfully took the offer from a large factory and transferred to Alibaba
- 解决Safari浏览器下载文件文件名称乱码的问题
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- Istio traffic management -- progress gateway
猜你喜欢
学习小结(关于深度学习、视觉和学习体会)
Second assignment
TiDB 性能竞赛 11.02-11.06
软件测试就是这么回事?!
笔试面试题目:盛水最多的容器
[data structure Python description] use hash table to manually implement a dictionary class based on Python interpreter
Win10 terminal + WSL 2 installation and configuration guide, exquisite development experience
Istio流量管理--Ingress Gateway
C language I blog assignment 03
当Kubernetes遇到机密计算,看阿里巴巴如何保护容器内数据的安全!(附网盘链接)
随机推荐
一个方案提升Flutter内存利用率
A scheme to improve the memory utilization of flutter
YGC troubleshooting, let me rise again!
临近双11,恶补了两个月成功拿下大厂offer,跳槽到阿里巴巴
华为云重大变革:Cloud&AI 升至华为第四大 BG ,火力全开
软件测试培训班出来好找工作么
On monotonous stack
Istio流量管理--Ingress Gateway
Recommend an economic science video, very valuable!
Personal current technology stack
用科技赋能教育创新与重构 华为将教育信息化落到实处
How TCP protocol ensures reliable transmission
Learning summary (about deep learning, vision and learning experience)
[computer network] learning notes, Part 3: data link layer (Xie Xiren version)
We interviewed the product manager of SQL server of Alibaba cloud database, and he said that it is enough to understand these four problems
Iqkeyboardmanager source code to see
Harbor项目高手问答及赠书活动
渤海银行百万级罚单不断:李伏安却称治理完善,增速呈下滑趋势
Get PMP certificate at 51CTO College
浅谈单调栈