2014-11-25 204 views
2

我需要測量低延遲應用程序的消息解碼延遲(3到5 us)。如何測量低延遲C++應用程序的延遲

我用下面的方法,

1. Get time T1 
2. Decode Data 
3. Get time T2 
4. L1 = T2 -T1 
5. Store L1 in a array (size = 100000) 
6. Repeat same steps for 100000 times. 
7. Print array. 
8. Get the 99% and 95% presentile for the data set. 

但我得到每次測試之間波動。有人可以解釋這個原因嗎? 你能否爲此提出任何其他方法?

:應用程序是緊湊循環(獲得100%的CPU),並通過使用taskset commad綁定到CPU

+1

做更多的樣本,並獲得平均值。在現代多任務系統中,波動是不可避免的,但波動當然也可能取決於你如何得到時間。 – 2014-11-25 11:48:52

+0

我使用「gettimeofday」函數獲取時間 – Janaka 2014-11-25 11:51:59

+1

在linux上,我使用'clock_gettime'和'clockid_t'作爲'CLOCK_PROCESS_CPUTIME_ID',因爲那樣只會測量特定進程佔用的CPU時間。我還確保測試會修改某些原始變量,然後在計時器停止後再打印該變量,以防止編譯器優化測試。 – Galik 2014-11-25 11:56:37

回答

0

有許多的不同的方式,性能度量可以使用代碼分析器或通過收集任一使用現有的系統調用。

北卡羅來納州立大學有不同類型的定時器和分析器的資源,以及在HPC網站here上使用每個和一些示例的適當案例。

在大多數現代系統中不可避免地會出現波動,與超線程和頻率調整相關的某些BIOS設置對功耗和冷卻/環境設置可能會對某些應用程序的性能產生重大影響。

將結果作爲直方圖進行分佈和/或將它們擬合成高斯分佈也有助於確定分佈的正常程度以及波動是否爲正常統計噪聲或嚴重異常值。運行額外的測試也是有益的。