【发布时间】:2015-05-30 09:47:12
【问题描述】:
我正在处理的程序需要在从网络到达时实时处理某些对象。吞吐量很好,但由于意外延迟,我偶尔会在输入队列中丢失。
我的分析表明延迟的来源很可能在我的程序之外;类似于在我的进程的 CPU 内核上调度另一个进程(我将进程的亲和性设置为某个内核)或到达的硬件中断(可能是网络中断)。
我的问题是我不确定延迟的来源。是否有工具或方法可以找到某个时间段内 CPU 内核的准确使用情况? (例如告诉我核心 0 被进程 19494 99.1% 的时间使用,进程 20001 0.8% 的时间和进程 8110 0.1% 的时间。)
我在配备 Xeon CPU 的 HP 服务器上使用 Ubuntu 14.04 Server Edition。
【问题讨论】:
-
您是否尝试提高您的程序优先级?
-
是的,我做到了。我将调度策略设置为 FIFO,优先级设置为 99。
-
你可以尝试运行分析器并确保延迟是外部的
-
在我的情况下,一个完整的分析器是不行的。我相信这种延迟是由外部引起的原因是我的程序的两个部分在独立运行时都表现出合理的延迟。当放在一起时,虽然延迟要多得多。到目前为止,我唯一的猜测是网络中断(两部分之一与网络通信)。
-
您可以尝试使用 Wireshark 检查数据是否通过网络到达或在传输过程中发生了什么。我已经看到网络上发生了很多事情,这些事情减慢了我的应用程序速度(例如 TCP/IP 重新传输、ARP 请求停止 TCP/IP 堆栈......)。
标签: linux server real-time delay