
Linux kernel
文章平均质量分 85
Linux Kernel知识分享
mounter625
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
BPF meets io_uring
摘要(149字): BPF与io_uring两大内核子系统近期实现首次交汇,通过补丁集支持在io_uring中运行BPF程序。BPF提供内核安全执行能力,io_uring解决异步系统调用问题,二者结合可基于I/O操作结果动态决策,减少用户态-内核态切换开销。然而当前功能尚属概念验证,需完善结果传递机制才能实用化,且因复杂性高、需root权限,应用场景有限。这一融合标志着Linux用户空间与内核界限进一步模糊,展现了异步编程与内核可扩展性的未来潜力,但实际广泛采用仍面临调试难度和权限限制等挑战。原创 2025-08-26 10:36:06 · 595 阅读 · 0 评论 -
iproute2 and libbpf: vendoring on the small scale
摘要:Linux社区近期围绕是否将libbpf库与iproute2网络工具集捆绑发布展开激烈讨论。BPF开发者主张捆绑以跟上快速发展的BPF生态,认为发行版提供的libbpf版本滞后且不可靠;而发行版维护者则坚持传统依赖管理模式,反对重复打包可能引发的安全和管理问题。双方争论焦点在于:1)版本控制与兼容性,2)用户体验一致性,3)发行版更新节奏与开发者迭代速度的冲突。最终iproute2将采用发行版提供的libbpf,但这场争论揭示了Linux发行模式与快速演进技术(如BPF)之间的持续张力。(149字)原创 2025-08-25 11:20:48 · 716 阅读 · 0 评论 -
Sleepable BPF programs
本文探讨了BPF程序从不可睡眠到支持可睡眠功能的发展历程。最初,经典BPF程序被设计为原子执行,无法进行任何可能阻塞的操作。随着扩展BPF的引入,其功能大幅扩展,但"BPF程序不能睡眠"的核心假设仍被保留。近期补丁集通过BPF_F_SLEEPABLE标志首次允许部分BPF程序(如安全模块和跟踪程序)在特定条件下睡眠,但受到严格限制:只能访问预分配的哈希表和数组map,且新增了bpf_copy_from_user辅助函数来安全读取用户空间数据。尽管当前实现存在诸多限制,这标志着BPF向更复原创 2025-08-25 06:12:58 · 983 阅读 · 0 评论 -
Dumping kernel data structures with BPF
摘要:Linux内核社区提出了两种基于BPF技术的新方法来导出内核数据结构信息。宋永洪的方案通过创建/sys/kernel/bpfdump虚拟文件系统,允许加载BPF_TRACE_DUMP程序来定制数据结构输出格式;Alan Maguire的方案则利用BTF数据新增%pT格式指令,实现类似Python的任意结构打印功能。这两种方法分别针对系统监控和调试场景,前者提供灵活的持久化接口,后者支持临时的详细结构输出,都显著提升了从内核获取信息的便利性,有望共同被纳入内核。原创 2025-08-24 06:50:28 · 477 阅读 · 0 评论 -
A look at “BPF Performance Tools“
摘要(150字): Brendan Gregg的《BPF性能工具》深入探讨了BPF技术在Linux系统中的性能分析应用。BPF从网络功能演进为内核可观测性核心工具,本书重点展示其高效跟踪生产系统瓶颈的能力,而非底层实现。全书分为技术原理与实战工具两大部分,涵盖CPU、内存、I/O等11个领域,提供大量BCC/bpftrace单行脚本案例。尽管主题复杂且存在内容重复(为兼顾参考书功能),但通过传统工具对比和“可选练习”设计,兼顾了实用性与深度。电子版存在排版瑕疵,但仍是理解现代Linux性能分析的权威指南,适原创 2025-08-24 05:27:08 · 461 阅读 · 0 评论 -
A medley of performance-related BPF patches
BPF性能优化技术正在快速发展,包括三种主要改进:1. BPF调度器使用跳板机制替代昂贵的retpoline间接跳转,性能提升约3倍,适用于XDP等高频调用场景;2. 可内存映射的BPF数组map允许用户空间直接访问map数据,完全避免系统调用,但仅限于特定map类型;3. 批量操作支持通过单次系统调用处理多个map元素,兼容所有map类型并支持删除等操作。这些优化分别针对不同使用场景,其中调度器和内存映射补丁已接近合并,预计将显著提升BPF程序执行效率和用户空间交互性能。原创 2025-08-23 05:52:05 · 517 阅读 · 0 评论 -
Possible paths for signing BPF programs
摘要:内核开发人员Boscaccy和Singh分别提出了两种BPF程序签名验证方案。Boscaccy的方案将验证集成到内核加载过程,而Singh主张通过用户空间的加载器程序进行验证。主要分歧在于是否信任加载器代码,以及如何处理需要CO-RE重定位的复杂BPF程序。两种方案都能支持简单BPF程序的签名验证,但复杂程序的支持仍需进一步讨论。Singh的补丁集还引入了"独占映射"功能来加强数据保护。尽管具体实现方式存在争议,BPF程序签名验证功能有望在近期内核版本中实现。原创 2025-08-22 00:39:32 · 649 阅读 · 0 评论 -
The rest of the 6.17 merge window
Linux 6.17内核合并窗口关闭,新增多项重要功能 Linux内核6.17版本合并窗口已关闭,共合入11,404个变更集。主要更新包括: 架构支持:LoongArch架构增强BPF支持,S390系统新增透明大页交换功能 核心改进:BPF子系统新增字符串操作和标准输出流,引入DAMON_STAT简化内存监控 硬件支持:新增对多款时钟控制器、GPIO控制器和Wi-Fi 6适配器的驱动 网络优化:移除过时RFC6675协议,新增DualPI2拥塞控制,强化TCP窗口限制 安全增强:AppArmor新增AF_U原创 2025-08-22 00:21:46 · 1285 阅读 · 0 评论 -
On the use of LLM assistants for kernel development
内核社区面临AI工具带来的挑战与争议。随着LLM(大语言模型)等AI工具在软件开发中的普及,内核开发者开始讨论如何规范其使用。争议焦点包括:是否应接受AI生成的补丁、如何披露工具使用情况、版权归属及维护者责任等问题。目前有两派提案:Gilbert建议新增Generated-by标签标识工具来源;Levin主张沿用现有Co-developed-by标签但禁用Signed-off-by。反对者认为需先制定正式政策,担忧AI补丁会增加隐蔽错误和维护负担。支持者则强调工具能提升效率,全面禁止不切实际。讨论还涉及版权原创 2025-08-22 00:12:39 · 861 阅读 · 0 评论 -
Filesystem sandboxing with eBPF
摘要:乔治亚理工学院博士生Ashish Bijlani开发了SandFS文件系统沙箱技术,允许非特权用户通过BPF实现动态安全策略。该技术针对运行不受信任代码的需求,在保持5-10%低性能开销的同时,解决了现有方案(如SELinux、LD_PRELOAD等)在权限、安全性和性能方面的不足。SandFS作为可堆叠文件系统,通过LLVM将C编写的策略编译为BPF字节码,由内核强制执行,有效隔离敏感文件访问。(149字)原创 2025-08-21 04:00:51 · 760 阅读 · 0 评论 -
BPF and the realtime patch set
Linux内核5.3版本合并了PREEMPT_RT实时补丁集,但该功能与BPF子系统存在根本性冲突。BPF在原子上下文中分配内存、使用非标准锁机制并禁用抢占,这些都与实时内核的要求相悖。开发者围绕"是否应禁用BPF来支持实时补丁"展开激烈争论:BPF维护者认为实时补丁应该让步,因为BPF对现代Linux系统至关重要;而实时补丁开发者则指出BPF长时间禁用抢占(最高可达500μs)会破坏实时性。双方探讨了使用local_lock机制等解决方案,但最终未能达成共识。目前用户仍需在BPF和实时原创 2025-08-20 05:48:48 · 776 阅读 · 0 评论 -
BPF at Facebook (and beyond)
摘要:Facebook积极开发内核BPF技术并坚持"上游优先"理念,但其实际BPF应用细节鲜为人知。KernelRecipes 2019会议上,BPF开发者Alexei Starovoitov透露,Facebook每台服务器运行约40个BPF程序,涉及性能监控、网络调度和安全监控等领域。虽然BPF功能强大,但也带来性能挑战,如1%的系统性能下降和数据库延迟问题。解决方案包括"编译一次,到处运行"技术(5.4内核支持)和验证器改进。未来BPF发展将更多依赖BTF数据,预原创 2025-08-19 11:29:45 · 460 阅读 · 0 评论 -
BPF: what‘s good, what‘s coming, and what‘s needed
2019年Linux存储、文件系统和内存管理峰会首次设立BPF专题分会场。Dave Miller在主题演讲中剖析了BPF的成功要素:它通过沙盒机制在内核中安全运行程序,使开发者无需修改源码即可实时观测和调整内核行为。BPF当前仍存在诸多限制(如循环支持不足、代码复用困难),但正在快速发展,包括指令上限提升至100万条、引入有界循环支持等。未来需改进调试能力、访问控制和内存管理,并建立类似Arduino的简易开发环境。尽管BPF与内核ABI兼容性问题引发讨论,其安全机制(如校验器)已能有效防御多数漏洞。特别值原创 2025-08-19 03:03:46 · 1052 阅读 · 0 评论 -
Managing sysctl knobs with BPF
摘要:Linux内核的sysctl机制通过/proc/sys暴露系统参数,但缺乏细粒度访问控制。Andrey Ignatov提出的补丁引入BPF_PROG_TYPE_CGROUP_SYSCTL程序类型,通过控制组实现容器环境下对sysctl的精确管控。该方案允许BPF程序根据名称、当前值和新值进行访问决策,甚至修改待写入值。相比传统LSM安全模块,BPF方案具有控制组粒度的策略灵活性,体现了BPF在内核策略控制方面的优势。这反映了内核通过BPF替代复杂策略框架的趋势,在保持性能的同时提供更强的可定制性。(1原创 2025-08-18 13:22:51 · 506 阅读 · 0 评论 -
Concurrency management in BPF
摘要:eBPF引入了maps功能,使BPF程序之间及与用户空间进程共享数据成为可能,但也带来了并发问题。为此,BPF开发者增加了XADD指令和自旋锁机制来管理并发访问。自旋锁只能保护map中的单个结构体,且使用受到严格限制(如一次只能持有一个锁)。用户空间通过bpf()系统调用的BPF_F_LOCK标志间接使用自旋锁。与此同时,关于BPF内存模型的讨论仍在进行,开发者对是否采用与内核相同的内存模型存在分歧,主要争议点在于性能与可移植性的权衡。随着BPF在并发环境中的广泛应用,明确其内存模型变得日益重要。原创 2025-08-17 09:57:05 · 705 阅读 · 0 评论 -
Binary portability for BPF programs
摘要: BPF程序虽基于通用虚拟机设计,但在不同架构间的可移植性仍受限,尤其是依赖内核结构体偏移量的跟踪程序。当前解决方案需即时编译并携带完整工具链,效率低下。为解决这一问题,开发者提出将结构体偏移信息嵌入BTF格式,通过libbpf在加载时动态重定位,并引入运行时变量替代预处理分支。此外,还需处理全局变量、只读数据及类型匹配等复杂问题。虽然部分极端情况仍无法解决,但该方案有望显著提升常用BPF工具(如BCC集合)的跨平台兼容性,降低嵌入式场景的部署成本。(149字) 关键点: 问题核心:内核结构体偏移量差原创 2025-08-16 09:47:24 · 811 阅读 · 0 评论 -
Improving control over transparent huge page use
摘要:透明大页(THP)能提升性能但也可能因内存碎片降低效率,当前内核提供了多种控制机制但仍有不足。最新补丁为prctl()添加了PR_THP_DISABLE_EXCEPT_ADVISED选项,允许进程禁用THP同时保留特定区域的启用能力。此外,开发者正探索通过BPF程序动态控制THP分配,包括页面大小选择,但担心过早固化接口会影响后续改进。目前相关补丁仍在评审中,BPF方案虽具前景但需谨慎推进以避免长期支持负担。内存管理开发者寻求在灵活性与稳定性间取得平衡的解决方案。原创 2025-08-15 23:01:40 · 573 阅读 · 0 评论 -
6.17 Merge window, part 1
Linux 6.17合并窗口进展:已合并4000+非合并更改集,主要涉及核心内核和文件系统优化。重点更新包括:x86架构安全增强、Arm系统新功能支持、Btrfs大页实验性功能、EROFS元数据压缩、ext4缓冲I/O改进等。硬件支持新增多款设备驱动,安全方面引入新的完整性保护API。目前仍有7500+提交待处理,预计合并窗口将于8月10日关闭。原创 2025-08-15 06:28:43 · 631 阅读 · 0 评论 -
Some advanced BCC topics
BPF虚拟机正逐步应用于更多内核子系统。BCC(BPF编译器集合)不仅提供管理工具,还支持开发者创建自定义BPF工具。文章详细介绍了BCC开发环境,演示如何通过TRACEPOINT_PROBE宏将程序附加到内核tracepoint(如kmalloc调用),并利用BPF_HASH映射统计函数调用次数。同时探讨了BCC的调试功能,包括编译控制、字节码输出和运行时日志,并对比了trace_pipe与BPF_PERF_OUTPUT两种输出方式的优劣。最后预告将介绍用户态USDT探针的应用。全文通过具体代码示例(如k原创 2025-08-14 10:57:12 · 870 阅读 · 0 评论 -
Warning about WARN_ON()
内核开发中关于错误处理机制的争议:多年来开发者被建议用WARN_ON()替代会导致系统崩溃的BUG_ON(),但如今WARN_ON()也面临质疑。当系统启用panic_on_warn时,WARN_ON()实际效果等同于BUG_ON(),可能引发大规模宕机。最新编码规范修改建议改用dev_warn*()等不会导致崩溃的警告方式,但这引发核心开发者分歧——有人认为该修改"比错误更错误",而维护者Greg K-H则支持减少WARN_ON()使用。这场争论折射出内核开发在系统稳定性与错误可见性之原创 2025-08-13 22:55:44 · 805 阅读 · 0 评论 -
Using user-space tracepoints with BPF
本文介绍了用户静态定义跟踪(USDT)探针的技术原理和应用方法。USDT探针源自Sun的DTrace工具,为用户空间代码提供了一种低开销的动态插桩方式。文章详细讲解了如何在Linux系统中使用BPF编译器集合(BCC)工具来操作USDT探针,包括tplist查看可用探针、trace工具跟踪探针数据等。通过实际示例,展示了如何为自定义C程序添加USDT探针,并利用BCC工具进行监控和分析。USDT探针技术已广泛应用于MySQL、Java、Node.js等主流软件中,帮助开发者以极低性能损耗诊断生产环境中的应用原创 2025-08-12 03:06:08 · 523 阅读 · 0 评论 -
An introduction to the BPF Compiler Collection
本文介绍了BPF编译器集合(BCC)项目,它解决了eBPF开发中的关键痛点:无需内核源码即可编写、编译和加载eBPF程序。BCC提供Python/Lua前端、丰富的工具链和100多个示例,显著降低了eBPF开发门槛。通过"Hello World"示例展示了BCC的高效工作流程:用Python编写简短程序,自动完成编译加载,并实时输出内核跟踪信息。文章还演示了argdist.py和btrfsdist.py等实用工具,它们能统计函数调用次数、绘制延迟直方图等。预告下篇将深入探讨eBPF数据结原创 2025-08-11 10:35:44 · 951 阅读 · 0 评论 -
A thorough introduction to eBPF
摘要: eBPF(扩展伯克利数据包过滤器)是Linux内核中的虚拟机技术,最初用于网络包过滤,现已发展为通用内核编程工具。其核心优势在于安全性和高性能:通过严格的内核验证器确保程序无循环、内存安全,并利用JIT编译提升执行效率。eBPF程序可挂载到多种内核事件(如网络流量、系统调用、性能事件),实现实时监控、调试和网络优化。数据结构上,eBPF通过多种Map类型(哈希表、数组等)实现内核与用户空间的数据交互。开发工具链(如LLVM、BCC)支持C语言编写eBPF程序,降低了使用门槛。典型应用包括XDP高性能原创 2025-08-11 04:18:06 · 919 阅读 · 0 评论 -
Notes from the LPC tracing microconference 2017
2017年Linux Plumbers大会举行的"跟踪和BPF"微型会议探讨了多项内核和用户空间跟踪技术。会议讨论了BPF映射自省方案、堆栈跟踪优化、kprobes改进建议、uprobes性能问题解决方案,以及通用跟踪格式(CTF)的应用前景。Facebook工程师分享了全天候跟踪中遇到的堆栈转换和kprobes管理问题,提出了通过内核直接解析地址、改进perf事件子系统等解决方案。会议还探讨了BPF工具集的扩展,包括BCC工具专业化存储需求。这些讨论反映了Linux跟踪技术在实际大规模原创 2025-08-10 03:27:58 · 506 阅读 · 0 评论 -
Extending run-time verification for the kernel
Linux内核运行时验证系统迎来重大升级,通过引入线性时序逻辑(LTL)支持来扩展属性检查能力。开发人员Nam Cao提交的补丁系列经过11次迭代后进入linux-next树,即将合入主线内核。新方案采用Büchi自动机将LTL表达式编译为状态机,相比手工编写更高效,能表达"始终"、"最终"等时序约束。典型应用包括检测实时任务优先级反转、验证锁的正确释放等。虽然当前代码生成器功能基础,但已显著简化复杂属性的实现难度,有望推动内核各子系统开发更精细的运行时验证机制。该优原创 2025-08-09 13:51:41 · 1034 阅读 · 0 评论 -
A proxy-execution baby step
Linux代理执行技术取得重大进展 摘要:Linux内核开发团队为解决优先级反转问题,在6.17版本中推进了代理执行技术的关键进展。该技术允许被阻塞的高优先级任务将CPU时间"借给"锁持有者执行,比传统的优先级继承方法更全面。当前补丁实现了同一CPU上的代理执行逻辑,包含任务状态跟踪、时间片计算等核心机制,但仍需解决跨CPU执行等复杂情况。后续将通过"捐赠者迁移"实现不同CPU间的代理执行。这项持续多年的开发工作已进入最后阶段,待完善后将显著提升系统调度效率。 (字数原创 2025-08-07 22:46:07 · 716 阅读 · 0 评论 -
Rethinking the Linux cloud stack for confidential VMs
摘要: 公有云存在隐私性局限,Linux虚拟机隔离无法完全阻止云服务商访问内存。机密计算技术通过加密内存保护客户数据,但需重构Linux云栈以平衡性能与安全。虚拟化依赖硬件隔离机制(如x86特权等级、IOMMU)和软件层(KVM、cgroups),机密计算新增隔离层防止主机入侵。性能优化中,I/O直通技术(如DPDK、vDPA)加速网络却削弱安全审计,体现虚拟化根本矛盾。解决方案如AMD SEV-TIO通过加密DMA避免跳板缓冲区,TDISP标准实现设备与VM的互信认证,但需全栈改造且面临厂商支持不足。启动原创 2025-08-07 11:02:56 · 905 阅读 · 0 评论 -
Last-minute control-group BPF ABI concerns
Linux 4.10合并的BPF控制组过滤功能引发争议。该特性允许将BPF程序附加到控制组来过滤进程网络流量,但其设计存在三个主要问题:1) 使用bpf()系统调用而非控制组接口实现;2) 层级过滤语义不符合预期(仅执行最底层过滤器);3) 缺乏安全模型,可能成为攻击向量。尽管开发者Andy Lutomirski等提出质疑,但维护者Alexei Starovoitov认为当前实现足够合理,安全改进可后续进行。若不修改就在4.10发布,这些设计缺陷可能永久固化,为未来埋下兼容性和安全隐患。原创 2025-08-06 07:56:20 · 483 阅读 · 0 评论 -
Persistent BPF objects
Linux内核4.4版本引入了BPF对象的持久化机制,通过创建特殊的/sys/fs/bpf虚拟文件系统,使BPF程序和maps能够超越创建进程的生命周期而持续存在。该方案采用bpf()系统调用的BPF_PIN_FD和BPF_GET_FD命令来管理持久化对象,取代了之前依赖守护进程保持文件描述符的临时方案。设计过程中考虑了FUSE文件系统、特殊命名空间和设备文件等多种实现方式,最终选择了更安全高效的内核虚拟文件系统方案。虽然当前未支持将BPF maps直接映射为文件系统对象,但该特性为网络流量控制和系统追踪等原创 2025-08-05 02:10:07 · 428 阅读 · 0 评论 -
The BPF system call API, version 14
摘要:BPF补丁集已更新至第14版,核心功能趋于稳定。新版本改用包含所有参数的单一union类型,简化了系统调用。主要功能包括map管理(创建/更新/查询/删除条目)和程序加载(需通过严格验证)。程序加载时移除了早期版本中的"fixup"数组,改为专用指令。虽然当前版本尚不支持将程序绑定到事件,但代码已进入net-next树,预计将随3.18内核发布。开发者持续优化API设计,两个月内迭代12个版本,展现了将其纳入主线的决心。原创 2025-08-04 10:21:20 · 482 阅读 · 0 评论 -
A report from the networking miniconference 2014
2014年内核峰会第二天举行了网络子系统开发者会议,重点讨论了多个技术议题。SCTP协议正计划重构以减少代码重复,网络层已实现支持动态调整大小的RCU保护哈希表以节省内存。eBPF开发引发争议,开发者被要求放慢提交速度以确保安全性。Netfilter研讨会上报告了连接跟踪代码去中心锁优化和小包处理性能提升的进展。nftables防火墙兼容层开发取得进展,但与iptables将长期共存。封装卸载技术中引入源端口号分流和远程校验和卸载等创新方案。会议还讨论了发送批处理优化、无线网络ARP代理节能方案、网络功能卸原创 2025-08-03 12:28:16 · 910 阅读 · 0 评论 -
A reworked BPF API
本文介绍了Linux内核中BPF虚拟机的重大改进。最新补丁集移除了全局ID机制,改用文件描述符管理BPF程序和映射,解决了资源泄漏和ID冲突问题。核心变化包括:1)通过单一bpf()系统调用加载程序,返回文件描述符而非数字ID;2)映射创建同样采用文件描述符机制;3)引入"修正数组"解决程序与映射的引用问题。虽然新方案使加载器需感知映射细节,但整体设计获得社区认可,预计将在3.17内核版本中合并。这些改进使BPF从单纯包过滤扩展到更广泛的内核编程场景。原创 2025-08-02 12:12:59 · 906 阅读 · 0 评论 -
Extending extended BPF
BPF(伯克利数据包过滤器)正从网络子系统扩展为通用的内核虚拟机。最新补丁集将BPF解释器移出网络代码,创建独立目录(kernel/bpf),并引入扩展BPF(eBPF)功能。关键改进包括:1)新增bpf()系统调用支持用户空间直接加载eBPF程序;2)严格的验证器机制确保程序安全性;3)引入共享键值存储"maps"实现内核-用户空间通信;4)支持将程序附加到socket和tracepoint。争议点包括GPL许可证强制要求及全局命名空间设计。该改动将BPF转变为更通用的内核内虚拟机,但原创 2025-08-02 07:04:01 · 848 阅读 · 0 评论 -
QUIC for the kernel
QUIC传输协议旨在解决TCP在现代互联网中的性能问题,如连接延迟、队头阻塞和协议僵化。尽管已承载大量网络流量,QUIC的Linux内核支持进展缓慢。最新补丁首次尝试将QUIC集成到内核,通过IPPROTO_QUIC协议类型提供类似TCP的接口,但TLS握手仍由用户空间处理。基准测试显示当前内核实现性能显著落后于TCP和内核TLS,主要由于缺乏硬件卸载支持和额外数据拷贝。随着硬件优化和代码完善,性能有望提升。虽然9000多行的初始补丁已提交,完整实现和审查仍需较长时间,预计最快2026年才能进入主线内核。该原创 2025-08-01 08:40:59 · 769 阅读 · 0 评论 -
How to write Rust in the kernel: part 3
摘要: 本文是内核Rust编程系列文章的第三部分,重点介绍了内核中Rust与C的通用绑定接口。主要内容包括: 内存分配:通过kernel::alloc模块实现堆分配,支持Kmalloc、Vmalloc和KVmalloc三种方式,提供Box和Vec等智能指针封装,确保安全性和灵活性。 自引用结构:通过Pin机制处理内核中的自引用结构(如双向链表),避免移动导致的内存损坏,并简化初始化流程(如pin_init!宏)。 锁机制:支持Rust风格的锁(如Mutex、自旋锁和RCU锁),利用生命周期系统确保访问数据时原创 2025-08-01 03:45:03 · 806 阅读 · 0 评论 -
Scheduler medley: time-slice extension, sched_ext deadline servers, and LRU batching.
Linux调度器近期迎来多项重要改进:1. 用户空间关键区抢占延迟机制(Prakash Sangappa补丁系列)允许线程持锁时获得额外30μs执行时间,通过rseq结构实现,支持按进程配置;2. sched_ext调度类将引入deadline server(Joel Fernandes实现),确保自定义调度器任务至少获得5%CPU时间,避免被实时任务完全抢占;3. 内存管理优化(Frederic Weisbecker方案)禁止对隔离CPU远程触发LRU批处理,改为在系统调用返回时处理,保障CPU隔离承诺。原创 2025-07-31 23:19:06 · 1334 阅读 · 0 评论 -
BPF: the universal in-kernel virtual machine
本文探讨了Linux内核中BPF(Berkeley Packet Filter)技术的演进与应用扩展。BPF最初作为网络数据包过滤工具,经过多次迭代已发展为支持JIT编译、64位寄存器和内核函数调用的通用虚拟机(internal BPF)。3.15内核将其分为经典BPF和内部BPF两个版本,后者性能显著提升且正向网络子系统外扩展,如用于安全计算(seccomp)和追踪过滤(tracepoint)。Alexei Starovoitov的补丁显示,用BPF替代原有追踪过滤器可使执行效率提升20倍以上。虽然当前B原创 2025-07-31 09:08:07 · 607 阅读 · 0 评论 -
A JIT for packet filters
BPF(伯克利数据包过滤器)是Linux网络协议栈中用于高效过滤网络数据包的关键机制。最新补丁通过引入JIT编译器,将BPF程序直接转换为x86汇编指令,使单次过滤操作提速50纳秒。该技术虽目前仅支持x86-64架构,但其成功验证了内核级JIT编译的可行性。文章还探讨了将类似优化应用于iptables的可能性,并指出基于BPF理念的nftables可能更具发展潜力。这一突破性改进为高流量场景下的数据包处理提供了显著的性能提升。原创 2025-07-30 05:28:44 · 520 阅读 · 0 评论 -
Dynamic DMA mapping using the generic device
本文介绍了Linux内核中的DMA API,分为基础API(Part I)和针对非一致性内存平台的扩展(Part II)。基础API包含:1)一致性内存分配dma_alloc_coherent/free;2)小型缓冲区的DMA内存池管理dma_pool_create/alloc/free;3)地址限制检查dma_set_mask;4)流式DMA映射dma_map_single等。特别说明了不同DMA方向(TO_DEVICE/FROM_DEVICE/BIDIRECTIONAL)的同步要求,以及物理连续性和对齐原创 2025-07-29 05:44:04 · 1192 阅读 · 0 评论 -
Allowing BPF programs more access to the network
在Linux峰会上,Mahé Tardy讨论了开发Tetragon(基于BPF的安全监控软件)时遇到的挑战,主要聚焦两个方向:1)探索让BPF程序直接通过网络发送数据以消除用户空间拷贝,提出了vmsplice()或io_uring等实现方案;2)为BPF防火墙添加发送TCP reset包的能力,以更优雅地终止连接。虽然讨论未形成最终结论,但展示了BPF在安全监控领域的技术潜力,包括可能完全移除用户空间组件以增强安全性。与会者就技术可行性展开探讨,提出了netconsole等替代方案,总体上对扩展BPF功能持原创 2025-07-27 10:30:19 · 762 阅读 · 0 评论