在量化領域,對效能要求比較高,特別是高頻交易,那是納秒必爭。在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前端的測試同學說 頁面怎麼半天打不開啊,沒辦法測啊,必須改善。一線運維的同學說 靠,系統上線這才多久啊,怎麼就嘎嘣的宕機了?這可以不行啊,客戶跳起來了,必須趕緊處理。終端使用...