如何测量低延迟C++应用的延迟时间

3

我需要测量低延迟应用程序 (3至5微秒) 的消息解码延迟。

我使用了以下方法,

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命令绑定到CPU。

1
做更多的样本,然后取平均值。在现代多任务系统上,波动是不可避免的,但当然波动也可能取决于你如何获取时间。 - Some programmer dude
我使用了“gettimeofday”函数来获取时间。 - Janaka
1
在Linux上,我使用clock_gettime函数,并将clockid_t设置为CLOCK_PROCESS_CPUTIME_ID,这样就只能测量特定进程所花费的CPU时间。我还确保测试修改了一些原始变量,在计时器停止后打印出来,以防止编译器对测试进行优化。 - Galik
1个回答

0

有许多不同的方法可以使用代码分析器或现有系统调用来收集性能指标。

北卡罗来纳州立大学在其HPC网站这里上提供了关于可用计时器和分析器类型以及适当使用每种类型的案例和一些示例的良好资源。

在大多数现代系统上,波动不可避免,与超线程和频率缩放相关的某些BIOS设置可能会对某些应用程序的性能产生重大影响,功耗和冷却/环境设置也可能会产生影响。

通过将结果分布作为直方图查看和/或将其拟合为高斯分布,还可以帮助确定分布的正常程度以及波动是否为正常统计噪声或严重的异常值。运行其他测试也将是有益的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接