0

当我实现任何运行 Linux(Intel Xeon x86_64)的网络服务器时,瓶颈通常变成一个单一且始终相同的 CPU 核心(中断总是发生在同一个 (CPU0) 核心上),在该核心上出现中断(IRQ)调用网卡驱动程序代码的网卡。是否有可能以某种方式实现中断出现在不同的处理器内核上(通过随机或循环),而不是单个,从而平衡负载?

但是:如果在单个内核上没有完成硬件中断之前,它不可能是由不同的内核引起的,即使我们在中断完成之前以某种方式完成了网络设备的工作,那么:

我希望每次在不同的内核上发生中断时,然后我与网卡交换数据,堆积与给定 CPU 内核(带有该内核索引的缓冲区)有关的内存数据,然后结束中断(IRQ) 代码。所以,我想避免线程间同步。每个内核可以执行中断网卡,也可以只将一个线程绑定到具有实时优先级的内核。我使用 1P-1C 容器,它的所有缓存线始终只属于单个内核的 L1/L2。而且我们不需要缓存同步(CPUx L1/L2 <-> L3 <-> CPUy L1/L2),这给了我们 10 倍的速度。

或者更好地使用软IRQ而不是硬件IRQ?

4

0 回答 0