我有一台有 4 个 CPU 的 Web 服务器,不知何故它时不时会遇到数据包丢失的情况。最后我们将所有应用程序和数据移至另一个有 8 个 CPU 的系统。我们这样做是因为我们发现除了平均 CPU 利用率持续上升到 80% 的现象外,其他都正常。
在故障排除过程中。我检查了 /proc/interrupts 文件,发现中断已固定到 CPU 0。还发出了“mpstat -p ALL”来查看每个 CPU 的利用率。我们检查时,没有一个 CPU 的利用率为 100%。
话虽如此,只有平均 CPU 利用率上升到 100%,但由于我们没有使用监控系统定期收集 CPU 利用率,因此其中任何一个都可能飙升到 100%。相反,它只是使用命令检查。在更换为具有更多 CPU 的新系统后,数据包丢失不再发生。我想到了以下问题:
- 如果四核系统中某个 CPU 的利用率恰好是 100%,并且正在将该中断固定到 NIC 中断。内核是否会调度另一个不太繁忙的 CPU 来代替它处理 NIC 中断?
增加系统CPU后丢包问题解决,是不是因为系统CPU越多,网卡中断占用CPU利用率达到100%的概率越小?
向系统添加更多 CPU 是否会减少上下文切换,从而减少系统开销?
答案1
如果四核系统中某个 CPU 的利用率恰好是 100%,并且正在将该中断固定到 NIC 中断。内核是否会调度另一个不太繁忙的 CPU 来代替它处理 NIC 中断?
通常不会。中断无论如何都会获得优先权,因此无需移动 NIC 中断。
增加系统CPU后丢包问题解决,是不是因为系统CPU越多,网卡中断占用CPU利用率达到100%的概率越小?
不。这有什么关系?中断,顾名思义,中断CPU 并使其处理中断。
向系统添加更多 CPU 是否会减少上下文切换,从而减少系统开销?
可以,但不太可能产生任何影响。更多 CPU 只会减少非强制上下文切换(系统决定即使没有必要,也要采取必要措施,并且没有人会把系统设计得如此糟糕,以至于非强制的上下文切换会对性能产生重大影响。
仅从您所说的内容进行推测,我怀疑在系统处于高负载的某些情况下,由于网卡服务速度不够快,数据包会丢失。这可能不是因为中断服务速度不够快,而是与网络流量相关的其他工作没有完全跟上数据包速率。这包括,例如,TCP 协议所需的所有操作。如果这种情况发生,数据包将在某个地方丢失。