Linux网络上的SoftIRQ和快速数据包处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux网络上的SoftIRQ和快速数据包处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2426字,纯文字阅读大概需要4分钟。
内容图文
![Linux网络上的SoftIRQ和快速数据包处理](/upload/InfoBanner/zyjiaocheng/947/116de8632b0a41269b00f8e845dd5868.jpg)
我一直在阅读有关Linux的性能调整的信息,以便在接收金融市场数据时获得最快的数据包处理时间.我看到,当NIC收到数据包时,它将通过DMA将其放入内存中,然后引发HardIRQ-依次设置一些NAPI设置并引发SoftIRQ.然后,SoftIRQ使用NAPI /设备驱动程序通过轮询从RX缓冲区读取数据,但这仅在有限的时间内运行(net.core.netdev_budget,默认为300个数据包).这些是运行ubuntu并带有solarflare NIC的真实服务器的参考.我的问题如下:
>如果每个HardIRQ发出一个SoftIRQ,并且设备驱动程序在1 go内读取多个数据包(netdev_budget),则从1x内从RX缓冲区中耗尽的每个数据包所产生的SoftIRQ会发生什么情况(收到的每个数据包都会产生一个硬然后软irq)?这些排队了吗?
> NAPI为什么使用轮询来耗尽RX_buffer?系统刚刚生成了SoftIRQ并正在读取RX缓冲区,那么为什么要轮询?
>大概是通过softirq对RX_Buffer进行排泄,仅会从1个特定的RX_Buffer中发生,而不会跨多个RX_Buffers发生吗?如果是这样,那么增加netdev_budget可以延迟其他RX_buffer的处理/消耗吗?还是可以通过将不同的RX_buffer分配给不同的内核来缓解这种情况?
>有一些设置可以确保HardIRQ立刻被提出并处理.但是,SoftIRQ可以在以后的时间进行处理.是否有设置/配置来确保与网络RX相关的SoftIRQ也得到最高优先级处理并且没有延迟?
解决方法:
我写了一篇详尽的博客文章,解释了您的问题的答案以及有关调整,优化,分析和理解整个Linux网络堆栈here的所有其他信息.
您的问题的答案:
>在处理softirq时,驱动程序提出的sofirq无效.这是因为NAPI帮助程序代码先尝试检查NAPI是否已在运行,然后再尝试提高softirq.即使NAPI没有检查,您也可以see from the softirq source将softirqs实现为位向量.这意味着softirq只能是1(待处理)或0(未待处理).设置为1时,将其设置为1的其他调用将无效.
> softirq用于启动NAPI轮询循环并控制NAPI轮询,因此它不会占用100%的CPU使用率. NAPI轮询循环只是一个for循环,softirq代码管理着它可以花费多少时间以及它有多少预算.
>每个CPU处理数据包可以花费全部预算.因此,如果将预算设置为300,并且您有2个CPU,则每个CPU可以处理300个数据包,总共600个.只有当您的NIC支持多个RX队列并且您已将IRQ分配给单独的CPU时,这才是正确的.处理.如果您的NIC没有,则可以使用接收数据包指导来帮助解决此问题(RPS).有关更多信息,请参见上面的我的博客文章.
>否,对此没有设置.请注意,softirq在运行它们的同一CPU上运行.因此,如果将RX队列1的hardirq处理程序设置为CPU 16,则softirq将在CPU 16上运行.您可以做的一件事是:将hardirqs设置为特定的CPU,并将使用该数据的应用程序设置为相同的CPU.将所有其他应用程序(如cron作业,后台任务等)固定到其他CPU上-这确保只有hardirq处理程序,softirq和将处理数据的应用程序可以运行.
如果需要极低延迟的网络数据包读取,则应尝试使用一种称为busy polling的新Linux内核网络功能.该功能可用于帮助最小化并减少网络数据包处理延迟.使用此选项将增加CPU使用率.
内容总结
以上是互联网集市为您收集整理的Linux网络上的SoftIRQ和快速数据包处理全部内容,希望文章能够帮你解决Linux网络上的SoftIRQ和快速数据包处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。