Rust 效能測試criterion庫

2021-10-10 07:54:42 字數 3562 閱讀 7846

在量化領域,對效能要求比較高,特別是高頻交易,那是納秒必爭。在rust中,測試乙個函式,或乙個操作耗時即效能分析,應是如何做呢?

一、計時器:systime

是否可以用std::time::systime 來計算花時情況?我們來試一試:

use std::time::systemtime;

pub struct stock

impl stock}}

fn main(

) ",elapsed)

;}

你會發現:

二、計時器: instant

use std::time::instant;

fn main()

", start.elapsed().as_secs());// 不需要

println!("cost miliseconds[毫秒] : {}", start.elapsed().as_millis()); //不需要

println!("cost microseconds[微秒] : {}", start.elapsed().as_micros());//根據需要選擇

println!("cost nanseconds[納秒] : {}", start.elapsed().as_nanos());

}

output:

finished release [optimized] target(s) in 0.57s

running `target/release/my_bench`

cost seconds[秒] : 0

cost miliseconds[毫秒] : 0

cost microseconds[微秒] : 32

cost nanseconds[納秒] : 39500

注意,以上只用乙個就可以。否則會把列印時間包括在內,這裡只是說明使用的時間精確維度。

如,

finished release [optimized] target(s) in 0.59s

running `target/release/my_bench`

cost nanseconds[納秒] : 1400

三、專業三方庫

如果要進行專業的效能測試,可以借助於專業三方效能測試庫。

rust中,專業三方庫還是有不少如bencher ,criterion等。強烈推薦用criterion.rs.

具體大家可以到github上看看。

四、例項

1、建立測試目錄

在工程中,建乙個專門的測試用的目錄:我這兒是在

my_bench目錄下,專門建立了benches目錄

對於my_bench工程下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::

;pub struct stock

impl stock}}

pub fn set_heap(

)->stock

pub fn box_stock(

) ->box

fn criterion_benchmark_heap(c: &mut criterion)

fn criterion_benchmark_box(c: &mut criterion)

criterion_group!

(benches, criterion_benchmark_heap,criterion_benchmark_box)

;criterion_main!

(benches)

;

4、執行cargo bench

在工程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 time: [168.68 ns 189.43 ns 212.00 ns]

found 3 outliers among 100 measurements (3.00%)

從上面,我們可以得到詳細的測試資訊,包括執行的時間分布情況。

專業效能測試工具表明,建立乙個stock物件,大約平均需要73ns,而不是計時器顯示的3500ns;

但是,建立乙個stock 的box物件需要的時間是雙倍。

五、傳入引數的情況

當有引數需要傳入時,可以這樣:

use criterion::

;use criterion::benchmarkid;

fn get_buf2(s:&string)-> *const [c_char;10]

fn criterion_benchmark_buf2(c: &mut criterion));

}criterion_group!

(benches, criterion_benchmark_buf2)

;criterion_main!

(benches)

;

效能測試 效能測試步驟

針對此次庫內作業效能測試,梳理一下期間的工作流程 梳理已有的介面指令碼,確認需要做效能測試的幾個介面,即使用率高,對效能有要求的幾個主要介面。結合頁面的操作,和確認的介面,梳理具體的業務邏輯 同時,請開發人員部署了測試環境。測試環境的伺服器指標,盡量和生產環境一致。部署的時候,負載均衡等情況也盡量和...

效能測試之前端效能測試

本次總結總共分為以下部分 1.如何衡量乙個系統是否要做壓測 2.壓測的準備過程 3.壓測工具選擇 4.壓測資料以及報告結果相關 1.如何衡量乙個系統是否要做壓測 首先需要衡量乙個系統是否需要壓測,從以下角度考慮 從兩個角度進行分析 a.業務角度 明確系統是對內使用還是對外使用,使用人數是多少,如果使...

IT之路 效能測試系列 初識效能測試

上一章節我們大概了解了下loadrunner,這一章,我們來認識一下效能測試。說到效能測試,很多同學會有自己不同的感想。web前端的測試同學說 頁面怎麼半天打不開啊,沒辦法測啊,必須改善。一線運維的同學說 靠,系統上線這才多久啊,怎麼就嘎嘣的宕機了?這可以不行啊,客戶跳起來了,必須趕緊處理。終端使用...