我找到了别人用来测量这个问题的软件 – 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.
解决方法 我希望你的系统正在安排另一个进程在同一个cpu上运行,你要么被替换,要么被移动到另一个核心,但会有一些时序损失.您可以通过深入研究同时发生的内核事件来找到原因.例如systemtap或perf可以给你一些见解.我将从调度程序事件开始,首先消除该事件:https://github.com/jav/systemtap/blob/master/tapset/scheduler.stp
总结以上是内存溢出为你收集整理的为什么我的Linux应用每0.5秒就会停止一次?全部内容,希望文章能够帮你解决为什么我的Linux应用每0.5秒就会停止一次?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)