当前位置:网站首页>Rust : 性能测试criterion库
Rust : 性能测试criterion库
2020-11-08 11:21:00 【osc_ju8o7gji】
在量化领域,对性能要求比较高,特别是高频交易,那是纳秒必争。在RUST中,测试一个函数,或一个操作耗时即性能分析,应是如何做呢?
一、计时器
是否可以用std::time::systime 来计算花时情况?我们来试一试:
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);
}
你会发现:
为什么创建一个结构体要花3500纳秒,这也太不可思议了吧。其实,真实的情况并不是这样的,是因为计时器的测试误差导致。
所以,如果要进行专业的性能测试,还是要借助于专业三方性能测试库。
二、专业三方库
RUST中,专业三方库还是有不少,推库用criterion.rs.
https://github.com/bheisler/criterion.rs
具体大家可以看看。
三、实例
1、创建测试目录
在工程中,建一个专门的测试用的目录:我这儿是在
my_bench目录下,专门创建了benches目录
2、toml文件
对于my_bench工程下toml文件
toml文件中,增加:
[dev-dependencies]
criterion = "0.3"
[[bench]]
name = "my_benchmark"
harness = false
其中,name ="my_benchmark"是有所指的,不是随便写的。这里是指,我在my_bench工程下,有一个my_benchmark.rs文件,里面有我写的性能测试代码。别的地方就不要去找了。
3、准备性能测试代码
因为toml文件中,有name =“my_benchmark” ,那么,性能测试代码就是my_benchmark.rs. 创建这个文件。
写入相应的性能测试代码:
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、运行
在所有的工程my_bench下,运行cargo bench,即可以进行性能测试代码的运行了。
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%)
从上面,我们可以得到详细的测试信息,包括运行的时间分布情况。
专业性能测试工具表明,创建一个Stock对象,大约平均需要73ns,而不是计时器显示的3500ns;
但是,创建一个Stock 的Box对象需要的时间是双倍。
版权声明
本文为[osc_ju8o7gji]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4288530/blog/4708045
边栏推荐
- Adobe Lightroom /Lr 2021软件安装包(附安装教程)
- 2天,利用下班后的4小时开发一个测试工具
- Introduction to mongodb foundation of distributed document storage database
- Mozi college SQL injection solution
- If you don't understand the gap with others, you will never become an architect! What's the difference between a monthly salary of 15K and a monthly salary of 65K?
- IQKeyboardManager 源代码看看
- 渤海银行百万级罚单不断:李伏安却称治理完善,增速呈下滑趋势
- When kubernetes encounters confidential computing, see how Alibaba protects the data in the container! (Internet disk link attached)
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- Close to the double 11, he made up for two months and successfully took the offer from a large factory and transferred to Alibaba
猜你喜欢
Is software testing training class easy to find a job
print( 'Hello,NumPy!' )
Is there a big difference between i5 1135g7 and i51035g1? Which is better?
一个方案提升Flutter内存利用率
Close to the double 11, he made up for two months and successfully took the offer from a large factory and transferred to Alibaba
211 postgraduate entrance examination failed, stay up for two months, get the byte offer! [face to face sharing]
Recommend an economic science video, very valuable!
211考研失败后,熬夜了两个月拿下字节offer!【面经分享】
2天,利用下班后的4小时开发一个测试工具
The most complete! Alibaba economy cloud original practice! (Internet disk link attached)
随机推荐
Installing MacOS 11 Big Sur in virtual machine
Mozi college SQL injection solution
How did Julia become popular?
i5 1135g7和i5 1035g1参数对比区别大吗? 哪个好
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
[computer network] learning notes, Part 3: data link layer (Xie Xiren version)
Win10 terminal + WSL 2 installation and configuration guide, exquisite development experience
Written interview questions: find the smallest positive integer missing
2020-11-05
ArrayList源码分析
laravel8更新之速率限制改进
C语言I博客作业03
架构师(2020年11月)
Ali teaches you how to use the Internet of things platform! (Internet disk link attached)
还不快看!对于阿里云云原生数据湖体系全解读!(附网盘链接)
Japan PSE certification
蓝牙2.4G产品日本MIC认证的测试要求
狗狗也能操作无人机!你没看错,不过这其实是架自动驾驶无人机 - 知乎
Review the cloud computing application scenarios you didn't expect (Part 1)
值得一看!EMR弹性低成本离线大数据分析最佳实践(附网盘链接)