Linux kernel BUSY_POLL 机制

Linux select/poll/epoll 实现原理剖析 select(2),poll(2) 以轮询的方式检查 fd 集合,轮询一遍没有就绪事件发生就会将自己挂起,等待监视的文件将自己唤醒(超时和信号都可以唤醒)。而 epoll(7) 是设备就绪时,调用回调函数,把就绪 fd 放入就绪链表中,并唤醒在 epoll_wait(2) 中进入睡眠的进程。虽然都要睡眠和交替,但是 select(2) 和 poll(2) 在“醒着”的时候要遍历整个 fd 集合,而 epoll(7) 在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的 CPU 时间。 阅读详情

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/performance_tuning_guide/sect-red_hat_enterprise_linux-performance_tuning_guide-networking-configuration_tools

 

 

Configuring Busy Polling

Busy polling helps reduce latency in the network receive path by allowing socket layer code to poll the receive queue of a network device, and disabling network interrupts. This removes delays caused by the interrupt and the resultant context switch. However, it also increases CPU utilization. Busy polling also prevents the CPU from sleeping, which can incur additional power consumption.

Busy polling is disabled by default. To enable busy polling on specific sockets, do the following.

  • Set sysctl.net.core.busy_poll to a value other than 0. This parameter controls the number of microseconds to wait for packets on the device queue for socket poll and selects. Red Hat recommends a value of 50.

  • Add the SO_BUSY_POLL socket option to the socket.

To enable busy polling globally, you must also set sysctl.net.core.busy_read to a value other than 0. This parameter controls the number of microseconds to wait for packets on the device queue for socket reads. It also sets the default value of the SO_BUSY_POLL option. Red Hat recommends a value of 50 for a small number of sockets, and a value of 100 for large numbers of sockets. For extremely large numbers of sockets (more than several hundred), use epoll instead.

Busy polling behavior is supported by the following drivers. These drivers are also supported on Red Hat Enterprise Linux 7.

  • bnx2x

  • be2net

  • ixgbe

  • mlx4

  • myri10ge

As of Red Hat Enterprise Linux 7.1, you can also run the following command to check whether a specific device supports busy polling.

# ethtool -k device | grep "busy-poll"

If this returns busy-poll: on [fixed], busy polling is available on the device.

 

 

其他链接

https://netdevconf.info/2.1/slides/apr6/dumazet-BUSY-POLLING-Netdev-2.1.pdf

https://github.com/tpn/pdfs/blob/master/Open%20Source%20Kernel%20Enhancements%20for%20Low-Latency%20Sockets%20using%20Busy%20Poll%20-%20Intel%20(Whitepaper).pdf

Linux分区表动态重载技术详解与实战 在Linux系统管理中,块设备分区表是磁盘管理的核心元数据,它定义了存储空间的逻辑划分方式。传统上修改分区表需要重启系统,这是因为内核采用缓存机制保护磁盘数据结构安全。现代Linux通过blockdev、partprobe等工具实现了运行时重载,其技术原理是触发内核事件通知链,强制更新gendisk结构体中的分区映射表。这项技术在云计算和虚拟化场景中尤为重要,能实现存储扩容不中断服务。针对物理服务器、KVM/VMware虚拟化等不同环境,需要组合使用scsi_rescan、udev规则等方案。实践中需特别注 阅读详情

相关推荐

Linux内核runtime PM原理与驱动开发实战指南

runtime PM是Linux内核功耗子系统中面向设备粒度的动态电源管理机制,其核心并非直接控制硬件电源,而是通过状态机驱动的协商式生命周期仲裁——在设备空闲时向驱动发起低功耗请求,并依赖驱动显式实现.runtime_suspend/.runtime_resume等回调完成实际操作。该机制独立于cpufreq和cpuidle,但深度耦合dev_pm_ops、引用计数与autosuspend双阈值逻辑,技术价值在于实现细粒度、可预测、可调试的运行时能效优化。典型应用场景包括嵌入式SoC外设(如SPI、USB

weixin_33798152的博客 375

Linux内核3.11的socket busy poll机制避免睡眠切换

Linux的网络协议栈非常独立,上下通过两个接口分别和用户态以及设备相连,也可以看作是北向和南向接口...北向通过socket接口,南向通过qdisc接口(你可以认为是上层的netdev queue,对于接收接口,NAPI的poll队列则是另一个例子),不管是socket还是qdisc,都是基于队列来管理的,也就是说,三个部分是独立的,socket只能看到读写队列,而看不到协议栈本身,socket

TCP/IP 9906

嵌入式Linux入门:通过Sysfs GPIO直接操作点亮LED的完整实践指南

GPIO(通用输入输出)是嵌入式系统中最基础且核心的硬件接口之一,它允许处理器通过数字信号直接控制外部设备或读取外部状态。其工作原理是通过配置特定引脚为输入或输出模式,并设置相应寄存器电平来实现控制。掌握GPIO操作对于理解嵌入式系统硬件交互至关重要,是驱动开发的基石。在Linux系统中,GPIO子系统提供了标准化的管理框架,而Sysfs文件系统则暴露了用户空间直接访问GPIO的接口,这为快速硬件验证和原型开发提供了便利。通过直接操作GPIO编号,开发者可以绕过复杂驱动框架,直观理解从用户空间指令到硬件引脚

weixin_30564785的博客 481

linux memcpy性能优化_Linux网络性能优化相关策略

“本文从底层到上层介绍了Linux网络性能优化策略”00—网卡配置优化从0开始是码农的基本素养网卡功能配置一般来说,完成同一个功能,硬件的性能要远超软件。随着硬件的发展,支持的功能也越来越多。因此,我们要尽量将功能offload到硬件上。使用ethtool -k 查看网卡支持的功能列表以及当前状态。下面是笔者一台虚机的输出。注:不同型号网卡的输出不同,不同内核版本输出也会略有区别。...

weixin_39942351的博客 684

高性能网络优化:深入解析忙轮询(Busy Polling)技术

与传统的“中断驱动”模式不同,忙轮询通过持续轮询(而非等待中断)来判断是否有新数据到达,从而避免中断处理的开销,提升高负载或低延迟场景下的性能。:通常与混合模式结合(如Linux的NAPI机制),在高负载时使用忙轮询,低负载时切换回中断模式以节省CPU。:在高负载时,频繁中断会导致CPU反复切换上下文,产生大量开销(中断风暴),延迟增加,吞吐量下降。:例如,随机值可能被误判为合法的超时时间(如极长或极短的时间),引发 CPU 空转或过早退出轮询。在启用忙轮询的场景下,这行代码是必要的。

数字人生 624

保姆级教程:用STM32标准库搞定TIM1的PWM输出(附完整代码和避坑点)

本文提供STM32F103高级定时器TIM1的PWM输出保姆级教程,涵盖从工程搭建到完整代码实现的详细步骤。重点解析TIM1作为高级定时器的特殊配置要点,包括时钟初始化、PWM通道设置和GPIO复用功能,并附常见问题排查指南和动态调整占空比的实用技巧,帮助开发者高效实现精准PWM控制。

weixin_30673611的博客 433

linux 内核 睡眠,Linux内核3.11的socket busy poll机制避免睡眠切换

Linux的网络协议栈非常独立,上下通过两个接口分别和用户态以及设备相连,也可以看作是北向和南向接口...北向通过socket接口,南向通过qdisc接口(你可以认为是上层的netdev queue,对于接收接口,NAPI的poll队列则是另一个例子),不管是socket还是qdisc,都是基于队列来管理的,也就是说,三个部分是独立的,socket只能看到读写队列,而看不到协议栈本身,socket...

weixin_29246195的博客 420

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化

本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。

weixin_44520581的博客 337

Linux kernel 4.20之select/poll

为什么80%的码农都做不了架构师?>>> ...

weixin_34384557的博客 282

TMC2209串口配置实战:从寄存器解析到电机精准控制

本文详细解析TMC2209步进电机驱动芯片的串口配置方法,从硬件连接到UART通信协议,再到核心寄存器功能详解。通过实战案例展示电流控制、微步细分和速度调节等关键配置,帮助工程师实现电机精准控制,并提供了常见故障诊断和优化技巧。

f6g7h8i9j的博客 1173

深度学习二分类实战:用Python+Keras搞定基因表达数据预测(附完整代码)

本文详细介绍了如何使用Python和Keras构建深度学习模型进行基因表达数据的二分类预测。通过数据预处理、特征选择、神经网络构建及优化策略,特别针对小样本场景提供了调参技巧和模型解释方法。文章还包含完整的代码示例,帮助读者快速掌握深度学习在生物信息学中的应用。

weixin_30642561的博客 245

Linux sysfs GPIO 中断监听实战:从 export 到 poll 的 5 步完整代码

本文详细介绍了在Linux用户态下通过sysfs接口实现GPIO中断监听的完整流程,包括基础概念、环境配置、C语言代码实现及优化建议。重点解析了从GPIO导出到poll监听的关键步骤,帮助开发者高效处理硬件中断事件,适用于嵌入式Linux开发场景。

weixin_34378969的博客 378

用python提取PDF中各类文本内容的方法

用python提取PDF中各类文本内容的方法

安静的软件工程师 6086

深入解析Linux内核NAPI机制:从中断风暴到轮询收包

在Linux网络收包路径中,中断风暴是高PPS场景下CPU性能下降的核心原因之一。为了在吞吐与延迟之间取得平衡,内核引入了NAPI机制,它通过受控的中断抑制与软中断轮询批量处理数据包,从而显著降低上下文切换开销。理解NAPI的调度原理,如napi_struct、poll回调与budget配额,是进行网络性能调优和内核源码阅读的基础。该机制广泛应用于网卡驱动、GRO聚合、RPS多队列分发等场景,也是排查软中断集中在单个CPU等问题的关键。本文从源码角度完整拆解NAPI的设计思路与核心流程,帮助开发者深入掌握L

weixin_34025051的博客 318

整理 钢琴 约翰汤普森-简易钢琴(小汤)

文件名:(小汤1)约翰-汤普森钢琴1 超清PDF (原版引进)文件名:(小汤2)约翰-汤普森钢琴2 超清PDF (原版引进)文件名:(小汤3)约翰-汤普森钢琴3 超清PDF (原版引进)文件名:(小汤4)约翰-汤普森钢琴4 超清PDF (原版引进)文件名:(小汤5)约翰-汤普森钢琴5 超清PDF (原版引进)文件大小:20.1 MB。文件大小:23.7 MB。文件大小:45.7 MB。文件大小:51.7 MB。文件大小:72.0 MB。

TS的博客 5万+

【部署】Kimi 接入OpenClaw完整步骤及关键注意事项

本文详细介绍了如何将Kimi AI接入OpenClaw系统的完整步骤。首先需确保环境满足OpenClaw版本要求和系统支持,然后通过配置向导完成本地网关设置和Kimi模型接入,包括API密钥配置。文章提供了详细的命令操作和界面截图指导,并重点说明了安全警告处理、服务状态检查、API密钥有效性验证等关键注意事项。最后还展示了Kimi流量消耗明细和问题排查方法,帮助用户顺利完成接入并解决常见问题。整个流程清晰明了,涵盖了从环境准备到最终验证的全部环节。

海兰 7180

Linux编程:嵌入式ARM平台Linux网络实时性能优化

网络实时性能首先取决于应用怎么收包、怎么排队、怎么分配内存,然后才是内核参数。对同一路传感器数据流,即使 SoC 有多个核,也应把收包、组包和发送固定在一个 CPU 核;多核用于不同数据流或不同职责。推荐顺序是:单一收包线程 + 阻塞 `recvmmsg`(多 fd 用 `poll`,fd 少且编号受控可用 `select`) → 批量收发 → 有界队列与队列满处理 → 内存池/零拷贝 → IRQ/NAPI/包分发 → CPU 隔离与实时调度 → 定时器。**

Where there is life, there is hope. 1709

vue3+element-plus - 最新详细实现将表格Table组件 “所见所得导出“ 为excel(xls/xlsx)电子表格文件,表格中的图片图像、图标等媒体资源完美导出显示(详细示例代码)

vue3,nuxt3,element plus,表格组件,Table,el-table,导出,下载,excel,电子工作簿,xls,xlsx,将表格导出成xls,如何把表格原封不动的导出成excel,保留图片,带图片,图标,如何导出包括含有图片的Excel表格,图片和表格数据导出excel,把表格导出成excel格式,表格内的图片一起导出,vue3导出图片和数据到Excel,可导出图片,导出图像到Excel,网页上的图片怎么能导出到xls表格中,显示图片url链接,图片太多导出失败,图片会超出单元格,图片不

✅ 精选推荐文章 4766

VSCode远程开发延迟骤降47%的秘密(基于Linux kernel 6.11+eBPF trace的VSCode Server通信栈深度剖析)

VSCode远程开发延迟骤降47%,显著提升协作与大型项目响应效率。基于Linux kernel 6.11+eBPF trace技术深度剖析VSCode Server通信栈,专为VSCode 2026远程开发速度优化设计,适用于SSH/Container/WSL等场景。值得收藏。

Algorift的博客 397

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

阻塞与非阻塞I/O:一文彻底搞懂核心区别与原理

在嵌入式Linux系统中,阻塞I/O是最基本也是最常见的I/O处理方式。阻塞I/O操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足该进程会唤醒。在阻塞访问时,不能获取资源的进程将进入休眠,它将CPU资源让给其他进程。因为阻塞的进程会进入休眠状态,所以必须确保有一个地方能够唤醒休眠的进程。唤醒进程最大可能发生在中断里面,因为在硬件资源获得的同时往往伴随着一个中断。

米联客(milianke) 412

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux alarm()与SIGALRM信号机制深度解析

alarm()是Linux中基于POSIX标准的进程级定时接口,其本质是操作内核it_real定时器并触发SIGALRM信号;该机制不阻塞线程、可与select/epoll等I/O多路复用协同,构成事件驱动架构的时间基石;技术价值在于提供轻量、异步、内核级的超时控制能力,广泛应用于服务心跳、看门狗保活、嵌入式低功耗唤醒及系统调用超时管理;本文聚焦alarm()底层原理、信号屏蔽与竞态处理、生产级封装实践,并深入解析SIGALRM在用户态与内核态协同中的关键作用。

weixin_34072458的博客 454

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Linux内核devfreq框架:设备功耗协同治理核心机制

devfreq是Linux内核功耗子系统中面向设备的动态频率调节框架,其本质并非简单复刻cpufreq的单点调频逻辑,而是通过设备抽象、负载评估、策略决策与跨域协调四大支柱,构建可调度、可联动、可感知的功耗治理基础设施。它基于设备I/O特征与物理约束建模,支持电压-频率协同、热事件联动及场景化策略注入,广泛应用于移动SoC、AI加速器、ISP和DDR控制器等对能效比敏感的嵌入式场景。作为内核态功耗协同中枢,devfreq为Android PowerHAL、thermal subsystem及定制化gover

weixin_33968104的博客 367

Linux 内核 PREEMPT_RT 实时抢占机制详解:睡眠自旋锁、线程化中断、配置项与硬件考量

本文基于 Linux 内核官方文档 [Real-time preemption](https://link.gitcode.com/i/96fa3b5181a498459c0ac732ff229e2c) 文档集(含理论、行为差异、硬件、架构移植与内核配置五篇子文档),系统讲解 PREEMPT_RT 如何将 Linux 内核转变为全抢占式实时内核。读完后,你能理解 rtmutex 睡眠自旋锁与优先级

gitblog_00232的博客 776

Linux驱动编程的‘信号灯系统’:深入剖析设备号与文件操作结构体

本文深入剖析Linux驱动编程中的设备号与file_operations结构体,将其比作交通信号灯系统。设备号唯一标识设备实例,而file_operations结构体定义了数据流动的规范和流程,是驱动开发的核心。文章详细解析了字符设备驱动的设备号分配机制、文件操作函数功能及多协议设备的协同工作模型,为开发者优化驱动性能和稳定性提供实用指导。

life6的博客 440

tx2 GPIO开发实战:引脚编号映射与sysfs/gpiod操作指南

GPIO是嵌入式系统硬件交互的基础接口,通过电平输入输出实现对外设的控制与状态采集。在Linux系统中,GPIO由内核统一管理,用户空间需通过sysfs或字符设备接口访问,涉及引脚编号映射、方向配置与权限管理等核心机制。掌握这些原理,能够帮助开发者在边缘计算设备上高效完成传感器读取、继电器控制等任务。以tx2为例,其40针扩展接口引出丰富GPIO资源,但物理针脚与系统编号的映射关系、sysfs与gpiod两套操作方式的差异,是实际开发中的常见难点。理解GPIO子系统架构与调试方法,可显著提升嵌入式硬件交互的

weixin_33912638的博客 353

Linux驱动工程师:真实工作、高薪逻辑与入门路径

设备驱动是操作系统与硬件交互的桥梁,而字符设备驱动框架则是理解内核模块工作的最佳切入点。在嵌入式Linux和物联网设备中,工程师需要掌握从设备树配置到底层寄存器操作的全链路能力,以确保数据稳定高效地传输。由于培养周期长、出错代价高,Linux驱动开发成为高薪且难以替代的技术方向。从实现一个简单的字符设备驱动开始,理解file_operations、设备号注册、中断与DMA缓存一致性等关键机制,并通过命令行工具与硬件“对话”,是进入这一领域的有效路径。面向应用开发者或刚入行的学习者,本文梳理了驱动工程师的日常

weixin_33766805的博客 429
下一篇: ubuntu 18.04 获取内核 编译vmlinux
gnixemos
博客等级 码龄23年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值