我一直在阅读关于Linux的性能优化,以便在接收金融市场数据时获得最快的数据包处理时间。我看到,当网卡接收到一个数据包时,它通过DMA将其存储在内存中,然后产生一个HardIRQ,然后设置一些NAPI设置并引发一个SoftIRQ。然后,SoftIRQ使用NAPI /设备驱动程序通过轮询从RX缓冲区中读取数据,但这只会在有限的时间内运行(net.core.netdev_budget,默认为300个数据包)。这些都是参照真实服务器运行Ubuntu,与Solarflare的网卡我的问题是如下:Linux上的SoftIRQ和快速数据包处理网络
如果每个HardIRQ提出了一个软中断,以及设备驱动程序在1个围棋(netdev_budget)读取多个数据包,会发生什么到每一个从RX缓冲区中排出的数据包引发的SoftIRQs(每个包接收到的数据包将会增加一个难度,然后是软irq)?这些排队?
为什么NAPI使用轮询来排空RX_buffer?系统刚生成一个SoftIRQ并正在读取RX缓冲区,那么为什么轮询?
推测,通过softirq排空RX_Buffer只会从1个特定的RX_Buffer发生,而不会发生在多个RX_Buffers之间?如果是这样,那么增加netdev_budget可以延迟处理/排空其他RX_buffers?或者可以通过将不同的RX_buffers分配给不同的内核来缓解这种情况?
有一些设置可以确保立即提出并处理HardIRQ。但是,SoftIRQ可能会在稍后处理。是否有设置/配置以确保与网络RX相关的SoftIRQ也以最高优先级处理并且没有延迟?
这可能更适合Linux/Ubuntu Stack Exchange站点之一。 –