我有一台闲置的16核
Linux机器.如果我运行一个简单的单线程C程序,它位于循环中,永远读取循环计数器(使用rdtsc指令),那么每0.5秒,我看到计时器值跳跃0.17 ms.换句话说,似乎每0.5秒我的应用程序停止0.17ms.我想了解为什么会发生这种情况以及我能做些什么.我知道Linux不是一个实时的操作系统.我只是想了解发生了什么,所以我可以充分利用Linux提供的功能.
我找到了别人用来测量这个问题的软件 – https://github.com/nokia/clocktick_jumps.它的结果与我自己的一致.
回答“告诉我们你要解决的具体问题”问题 – 我使用DPDK处理高速网络应用程序.每秒大约有6000万个数据包到达.我需要决定制作RX缓冲区的大小,并且有理由认为我选择的数字是合理的.这个问题的答案是这个难题的一部分.
我的代码看起来像这样:
// Build with gcc -O2 -Wall #include <stdio.h> #include <unistd.h> #include <x86intrin.h> int main() { // Bad way to learn frequency of cycle counter. unsigned long long t1 = __rdtsc(); usleep(1000000); double millisecs_per_tick = 1e3 / (double)(__rdtsc() - t1); // Loop forever. Print message if any iteration takes unusually long. t1 = __rdtsc(); while (1) { unsigned long long t2 = __rdtsc(); double delta = t2 - t1; delta *= millisecs_per_tick; if (delta > 0.1) { printf("%4.2f - Delay of %.2f ms.\n",(double)t2 * millisecs_per_tick,delta); } t1 = t2; } return 0; }
我正在使用Ubuntu 16.04,amd64.我的处理器是Intel Xeon X5672 @ 3.20GHz.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。