我有一个Web服务器,有4个CPU,它不知何故间歇性地遇到丢包。 最后,我们将所有的应用程序和数据移动到另一个有8个CPU的系统。 我们这样做是因为我们没有发现任何问题,除了平均CPU利用率一直高达80%的一个现象。
在故障排除期间。 我检查了/ proc / interrupts文件,中断被固定在CPU 0上。“mpstat -p ALL”也被发出来查看每个CPU的使用情况。 而当我们检查他们时,他们都没有100%。
话虽如此,只有平均CPU使用率上升到100%,但其中任何一个可能有一个高峰到100%,因为我们没有使用监控系统定期收集CPU使用率。 相反,它只是使用命令进行检查。 在更换一个更多的CPU的新系统之后,丢包还没有发生。 以下问题出现在我身上:
为系统增加更多的CPU之后,数据包丢失得到了解决,这是因为系统拥有的CPU越多,NIC中断占用的CPU使用率上升到100%的可能性就越小。
添加更多的CPU到系统会导致更less的上下文切换,从而减less系统开销?
如果四核系统中的一个CPU的使用率恰好为100%,并且正在固定到NIC中断的中断。 内核会调度另一个不是很忙的CPU来处理NIC中断吗?
通常,没有。 无论如何中断优先,所以不需要移动NIC中断。
为系统增加更多的CPU之后,数据包丢失得到了解决,这是因为系统拥有的CPU越多,NIC中断占用的CPU使用率上升到100%的可能性就越小。
不,为什么这么重要? 正如其名称所示, 中断会中断 CPU并使其服务于中断。
添加更多的CPU到系统会导致更less的上下文切换,从而减less系统开销?
它可以,但这不太可能有任何改变。 更多的CPU只会减less不受限制的上下文切换(系统决定采取的切换,即使不需要),没有人devise系统如此糟糕,以至于非受限上下文切换对性能有重大影响。
根据你所说的话,我怀疑在系统处于高负载的情况下,数据包丢失了,因为网卡的服务速度不够快。 可能这不是由于中断服务速度不够快,而是与networkingstream量相关的其他工作不能完全快速地跟上分组速度。 这包括,例如,TCP协议所需的所有操作。 如果这种情况发生,数据包将被丢弃。