2014-11-25 116 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设置对功耗和冷却/环境设置可能会对某些应用程序的性能产生重大影响。

将结果作为直方图进行分布和/或将它们拟合成高斯分布也有助于确定分布的正常程度以及波动是否为正常统计噪声或严重异常值。运行额外的测试也是有益的。