当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Japan PSE certification
- From a friend recently Ali, Tencent, meituan and other P7 Python development post interview questions
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- PCIe 枚举过程
- 不多不少,大学里必做的五件事(从我的大一说起)
- Where is the new target market? What is the anchored product? |Ten questions 2021 Chinese enterprise service
- Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
- Deeplight Technology Bluetooth protocol SRRC certification services
- 比Python快20%,就问你兴不兴奋?
- [data structure Python description] use hash table to manually implement a dictionary class based on Python interpreter
猜你喜欢
Harbor项目高手问答及赠书活动
Flink's sink: a preliminary study
函数周期表丨筛选丨值丨SELECTEDVALUE - 知乎
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
Rust: command line parameter and environment variable operation
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
PX4添加新的应用
笔试面试题目:求丢失的猪
Mozi college SQL injection solution
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
随机推荐
2 days, using 4 hours after work to develop a test tool
Written interview topic: looking for the lost pig
Major changes in Huawei's cloud: Cloud & AI rises to Huawei's fourth largest BG with full fire
不多不少,大学里必做的五件事(从我的大一说起)
11 server monitoring tools commonly used by operation and maintenance personnel
解决Safari浏览器下载文件文件名称乱码的问题
Istio流量管理--Ingress Gateway
YGC问题排查,又让我涨姿势了!
笔试面试题目:求缺失的最小正整数
The young generation of winner's programming life, the starting point of changing the world is hidden around
It's worth seeing! EMR elastic low cost offline big data analysis best practice (with network disk link)
C language I blog assignment 03
墨者学院SQL注入解题
Automatically generate RSS feeds for docsify
阿里出品!视觉计算开发者系列手册(附网盘链接)
Analysis of istio access control
Installing MacOS 11 Big Sur in virtual machine
游戏优化性能杂谈(十一) - 知乎
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
入门级!教你小程序开发不求人(附网盘链接)