LWN:在今后十年让BPF保持活力!

A look at what‘s possible with BPF arenas BPF arena是一种内存区域,允许在BPF中编写任意数据结构,验证器在此可以更宽松地检查指针。在2025年的Linux峰会上,Emil Tsalapatis报告了其在编写sched_ext调度器时使用arena的经验。尽管整体上对arena感到满意,但他指出最大的问题是内核指针无法存储在arena中,这限制了其使用。目前,开发者需要将数据结构分为两部分存储:一部分在arena中,另一部分在BPF map中,以持有内核对象的引用。这种分割虽然可行,但降低了arena的便利性。Tsalapatis希望BPF 阅读详情

关注了就能看到更多这么棒的文章哦~

Modernizing BPF for the next 10 years

By Daroc Alden
June 7, 2024
LSFMM+BPF
Gemini-1.5-flash translation
https://lwn.net/Articles/977013/

BPF 最初 采用来作为对数据包过滤的一个通用化处理方案,这发生在十多年前。在那之后,BPF 发生了巨大的改变,变得更加强大。Alexei Starovoitov 在 2024 年 Linux 存储、文件系统、内存管理和 BPF 峰会 的第二天以 BPF 主题的演讲拉开了序幕,他带领大家讨论了 BPF 在未来十年不断发展过程中将要发生哪些变化。他提出了几个想法,包括扩展 BPF 程序可用的寄存器数量、动态死锁检测以及放宽验证器的一些现有限制。

Starovoitov 从回顾过去十年 BPF 发展的历程开始。BPF 最初的应用场景是在网络部分 —— 因此得名 "Berkeley Packet Filters"。2015 年,BPF 扩展成为了新一代工具,包括用于追踪(tracing)。他说道,BPF 中的一切演变都有其原因。一旦内核中存在对 BPF 的支持,像 katran 和 Cilium 之类的用户空间工具就开始出现并利用它。

3b308369f922777c986ae6b5126ffbeb.png

随着追踪工具的演变,它们需要访问内核头文件,以便理解它们看到的数据是如何布局的。他解释说,这引出了 BPF 类型格式 (BPF Type Format, BTF),“一次编译——到处运行”(CO-RE),以及教会 Clang 如何进行符号字段访问而不是使用已知的偏移量。也引入了其他一些增强 BPF 易用性的功能被引入进来。

在 C 语言中,全局变量的自然表示是将它们存储在 .data 段(或 .bss=、 =.rodata 等)中。但是,对于 BPF 程序来说,将全局变量与用户空间共享以进行配置或报告通常更有意义,这意味着数据需要存储在 BPF 映射(mapping)中。然而,即使全局变量存储在 BPF 映射中,用户空间可能仍然不知道它们的排列方式。解决方案是 BPF 的 骨架支持(skeleton support),它按照编译器布局全局变量相匹配的方式来生成类型(types),使其更易于以编程方式访问。

BPF 代码的编写方式也发生了很大的变化。最初,验证器不支持函数调用——这意味着程序员必须用 always_inline 来注释所有函数。这已经不再需要了,但由于互联网上存在各种旧的示例,许多用户似乎并不知道这一点。Starovoitov 说:“我觉得我们需要在宣传最佳实践方面多做一些。”循环也是类似的情况;它们最初不受支持,但随着时间的推移,它们变得越来越可用。然而,今天仍然有补丁提交到邮件列表中是使用 bpf_loop() 的,尽管 开放式迭代器(open-coded iterators, 更好的一个替代方案)在两年前就已经添加了。

BPF 代码使用的接口也发生了一些变化。BPF 调用内核代码的机制,最开始是靠辅助函数的。这些被认为是稳定的接口,因此很难尝试新的可能性。它们后来得到了 kfunc 作为补充,kfunc 是一个不稳定的接口,可以从任何地方扩展,包括内核模块。在 Starovoitov 演讲时,内核中存在 211 个辅助函数和 164 个 kfunc。

对于内核代码调用 BPF, struct_ops 机制提供了相同的灵活性。该特性最初是为 sched_ext 引入的,但事实证明它在内核中拥有许多用户。Starovoitov 说,实现该特性确实花费了一些时间,因为对 BPF 调用约定的必要转换并不简单。但总的来说, struct_ops 一直是一个非常有用的特性。

它也不是由 sched_ext 推动的 BPF 唯一改变;与调度器的必要集成意味着它推动了许多功能,这些功能可以改善内核和 BPF 程序之间的数据共享。最值得注意的也许是 kptrs,它们是指向内核数据结构的直接指针,依赖于 BPF 验证器来跟踪所有权和生命周期信息。

当然,总的趋势是让 BPF 程序更强大。Starovoitov 讨论的最近变化是 BPF arenas 和 cond_break,它们代表着 BPF 能够实现任意算法和数据结构的一大步。Starovoitov 说,添加这些意味着扩展 BPF 不再需要那么多的内核更改,它还将许多静态验证转化为运行时验证。现在这些功能已经到位,将会出现更多 BPF 库。正则表达式和哈希表的库已经存在——字符串操作库可能是下一个。

未来

现在,库代码(library code)通过最古老的库管理技术在 BPF 程序之间重复使用,那就是复制和粘贴。他说道,这需要改变。BPF 开发人员需要一些方法将共享 BPF 代码作为库进行分发——理想情况下,一种类似于 Rust 或 Python 的方法,其中库仅作为源代码进行分发。C 和 C++ 并不真正擅长处理依赖关系管理,BPF 应该吸取它们的教训。

并非所有理想的库都可以在今天的 BPF 中编写;为了实现真正任意的算法,还需要一些额外的增强。 sched_ext 无法完成用户可能想要的所有事情——尤其是重新实现 EEVDF(当前的默认 Linux 调度器)——因为当前对锁的限制。一次只能持有单个锁,并且程序在持有锁时不能调用 kfunc。更糟糕的是,验证器代码中的错误可能会在这种情况下导致死锁。Starovoitov 断言,BPF 需要另一道防线,以便 BPF 程序(或 BPF VM 的核心基础设施)持有的锁不能干扰内核。一旦这一点成为可能,就可以实现运行时死锁检测,然后就可以放宽验证器目前对锁的限制。

很多人认为放宽验证器的要求是让 BPF 图灵完备的必要条件,但与普遍看法相反,它已经图灵完备了,他说道。BPF arena 几乎是最后一个需要为此补上的功能,之后可以在 BPF 中实现解释器来证明这一点。唯一缺少的部分是对跳转表和间接 gotos 的支持。Starovoitov 解释说,在 BPF 中编写解释器是一个“玩具动机”,他并不期望任何人真的想去这样做,但跳转表是 BPF 要想有所作为的必要条件。

与间接 gotos 相关的是对尾调用(tail calls)支持。BPF 已经拥有 bpf_tail_call() ,但 Starovoitov 称之为一个 hack,说它使用起来很麻烦。一个更简洁的解决方案是使用一个专门的指令进行间接调用——BPF 从一开始实际上就拥有它,只要调用目标是全局函数。缺少的组件是验证器尚未支持;需要更改验证器以理解“指令地址”的概念。

效率

让 BPF 更灵活的目标几乎不需要其他功能,但也还有一些可以提高效率的功能,比如专用的 bit 操作指令或对调用约定(calling convention)的改动,Starovoitov 解释道。特别是,一个函数属性可以用来标记不需要使用调用者保存寄存器的函数,这可以让编译器更智能地分配寄存器,并减少溢出到堆栈的寄存器数量。另一个关于更好地分配寄存器的可能想法是仅仅增加可用寄存器的数量。当 BPF 最初被开发时,x86 是正在考虑的主要架构;与其他架构相比,它提供的寄存器数量不多。对于现代 BPF 来说,Arm 和 RISC-V 架构是重要的竞争者——但 BPF 程序无法利用到增加了的可用寄存器数量。

Starovoitov 提到了 BPF 开发人员可以用来解决这个问题的几种方法,比如切换到虚拟寄存器并在内核中进行寄存器分配。其他可能性包括拒绝对给定架构使用太多寄存器的程序、为不同数量的寄存器编译的臃肿的二进制文件,或者让验证器跟踪溢出到堆栈的寄存器,并在可能的情况下将其转换为寄存器。David Vernet 指出,BPF 的指令编码只有 4 位用于寄存器,因此使用超过 16 个寄存器将很困难。Starovoitov 回复说,新的指令可能会为寄存器增加更多空间,并指出他认为对寄存器数量的限制已经过时了。

增加可用寄存器的数量也可能为传递六个或更多参数打开大门。现在,BPF 每个函数最多可以传递五个参数,因为只有五个寄存器用于传递参数。可以通过使用堆栈来解决这个问题,但额外的寄存器将是一个更简单的解决方案。改变 BPF 调用约定的关键点是要确保它可以有效地映射到内核的调用约定,因此正确的解决方案并不立即显而易见。

更多用途

Starovoitov 提到了一个最终的“空中楼阁”的想法,用于改善 BPF 和内核之间的互操作性:有了额外的寄存器和扩展的调用约定,就可以做到将内核编译成 BPF ISA。这将为许多以前无法想象的应用程序打开大门,例如在整个内核中使用 BPF 调试。

但也有一些更可行的改进,比如允许 alloca()。BPF 程序目前被限制为 512 字节的堆栈,这使得使用 alloca() 不切实际,因为没有太多空间可用于分配。虽然可能可以扩展 BPF 堆栈的大小,但另一个解决方案是使用“分隔堆栈(divided stack)”,该堆栈在单独的堆栈上跟踪返回地址和局部变量。内核能看到的 512 字节堆栈可以用来保存函数调用,并在运行时动态分配更大的堆栈(可能在 BPF arena 内)。

Vernet 质疑在 BPF 程序中 alloca() 有多令人满意,并指出与使用静态分配相比,它会创建一堆额外的指令——事实上, alloca() 在内核中是被禁止的,原因之一就是这个。Starovoitov 承认它在内核中是被禁止的,但他不认为这跟 BPF 程序有什么关系。 alloca() 比堆分配开销要小得多,并且可以保证成功。BPF 程序可能会发现它对保存大小根据内核结构的大小而变化的结构很有用,这是一个相当频繁会遇到的麻烦问题。

当然,所有这些未来的灵活性都需要付出代价。Starovoitov 说:“并非所有事情都可以静态完成。” 让 BPF 程序安全地取消,并使用运行时超时来增强程序验证,这些可能会变得必要。Starovoitov 说,这项工作正在进行中。但是,调试所有这些新功能不太可能成为问题,因为 BPF 已经具有良好的可观察性。BTF 调试信息非常适合 C 代码(以及内核代码),现有的工具,比如 bpftrace,非常有效地利用了它。缺少的一件事是让这些可观察性工具在用户空间工作。Starovoitov 指出这是一个“先有鸡还是先有蛋”的问题:用户模式 BPF 探测器速度不快,所以为什么要费心支持它们?但是,如果没有额外的支持,它们就不会变得更快。此外,用户空间使用的许多语言与 BTF 语义不匹配,这可能需要对格式进行更改。

让 BPF 更强大的一个潜在副作用是让验证器承担更多工作。目前,验证器有一个百万条指令的限制,仅仅是为了限制它在一个病态的 BPF 程序上花费的时间。但是,对于大型程序来说,任何验证器或编译器的更改都可能让它达到这个限制,这是一种“糟糕的用户体验”。Starovoitov 说,目前还没有真正的解决方案,但这个问题是 BPF 开发人员必须有意识地关注以解决的问题。有一些解决方法,比如在 BPF CI 中测试编译器的更改。另一个可能的解决方案是放宽限制,让验证器在它能够判断它正在取得进展的情况下不受一百万条指令的限制。

Starovoitov 提出的最后一个想法是将 BPF 打造成一个内核模块。他指出,对于销售需要 BPF 的产品的供应商来说,主要问题是使用的内核种类繁多;很难让一个 BPF 程序在所有内核上都能正常工作。他解释说,一个潜在的解决方案是使 BPF 子系统能够独立于基本内核进行升级。这本身将是一个巨大的挑战——现有的内核模块机制不足以支持它——但它可以解决一些持久的问题(persistent problems)。

问题

Starovoitov 在结束演讲时说,他认为 BPF 的下一个增长领域可能是 Linux 安全模块 (LSM)、其他安全用例,以及对 sched_ext 的持续改进。观众提出了一些问题。一个人问 Starovoitov 认为 BPF 在经过十年的变化之后,现在用起来更容易还是更难。Starovoitov 回复说,BPF 开发人员已经使其更容易使用,但他们实际上无法简化 BPF 背后的某些核心设计,因为受限于稳定性保证,它并不像它原本可以做到的那样容易使用。另一个人问 Starovoitov 是否期望 BPF 在内核之外看到增长。Starovoitov 回复说,BPF 的主要力量在于可观察性和安全性。内核之外可能有一些用例需要这种组合,但用户空间整体上不会从 BPF 中受益,他说道。

另一位观众询问如何将所有这些信息传达给没有出席 LFSMM+BPF 的众多 BPF 用户;他们建议开展对外推广,向其他会议推广这些想法。Starovoitov 说,他完全同意这是一个好主意,但他不是做福音传教的专家。他呼吁会议上的其他人帮助宣传这些想法。

BPF 的增长速度惊人,而且没有任何迹象表明它会停止。许多用户正在发现 BPF 带给内核的更强的可观察性和可配置性所带来的价值。与此同时,很明显,人们仍然有很大的计划来改变 BPF。在未来的十年中,它可能会有很大的不同。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

45805d42bbd4c765f70694a46d20e8fa.jpeg

Linux 可观测性 BPF&eBPF 以及 BCC&bpftrace 认知 博文内容为读书笔记整理,对原书内容做了摘要博文内容涉及:BPF和eBPF认知BCC和bpftrace认知BCC和bpftrace工具简单认知理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》BCC和bpftrace。它们运行需的动态和静态插桩(跟踪)技术。 阅读详情

相关推荐

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。

ik678901的博客 1782

从现在,看未来---Linux Kernel 未来发展方向

Linux发展至今已逾三十多年,随着内核新feature以及兼容性越来越高,使其变得十分庞大,现在如果再想通读内核源代码几乎成了 **“不可能的任务”**。近年来,又掀起了宏内核和微内核、Rust重写内核以及eBPF will be replace Linux等等有争议的声音,相信Linux Kernel的核心Maintainer也都注意到了这些。那么,他们会给出怎么样的回应?我们拭目以待 !

Rethinking the Kernel 9042

从零到一:基于GeneMark-ES/ET的新基因组注释实战指南

本文提供了一份基于GeneMark-ES/ET的新基因组注释实战指南。详细介绍了从环境搭建、数据准备到核心运行的全流程,重点解析了ES(从头预测)与ET(结合RNA-Seq证据)两种模式的选择与操作,并分享了Perl模块依赖、并行处理等常见问题的解决方案,帮助生物信息学研究者高效完成基因预测工作。

weixin_29266647的博客 209

LWN:BPF与安全!

关注了就能看到更多这么棒的文章哦~BPF and securityBy Jake EdgeOctober 4, 2023LSSEUChatGPT translationhttps://lwn.net/Articles/946389/eBPF内核虚拟机即将迎来其加入Linux十周年,它已经发展成为生态系统中多种用途的工具。eBPF的创始人,也是其早期开发的主要负责人Alexei Starovoito...

Linux News搬运工 1077

手把手教你用ROS和Gazebo搭建Unitree A1机器狗仿真环境(含URDF/Xacro详解)

本文详细介绍了如何使用ROS和Gazebo搭建Unitree A1机器狗的仿真环境,涵盖URDF/Xacro文件编写、Gazebo物理引擎集成及ROS控制实现。通过实战指南,帮助开发者掌握四足机器人仿真技术,提升开发效率。

bush的博客 277

STorM BGC V1.31硬件+SimpleBGC固件:从零搭建三轴云台开发环境(Keil+JLink避坑指南)

本文详细介绍了如何从零搭建STorM BGC V1.31硬件+SimpleBGC固件的三轴云台开发环境,涵盖硬件连接、Keil+JLink开发工具配置、固件编译与烧录等关键步骤,并提供了常见问题的解决方案和调试技巧,帮助开发者快速上手三轴云台开发。

weixin_28693683的博客 380

LWN:BPF 里新的共享内存方案!

关注了就能看到更多这么棒的文章哦~A proposal for shared memory in BPF programsBy Daroc AldenFebruary 21, 2024Gemini translationhttps://lwn.net/Articles/961941/2021 年 2 月 6 日,Alexei Starovoitov 提交了一系列的补丁(patch series)给...

Linux News搬运工 503

手把手教你学Simulink--基于新能源与储能系统的场景实例:压缩空气储能(CAES)系统热力学建模

本文介绍了使用Simulink进行压缩空气储能(CAES)系统热力学建模的详细步骤。系统模型包含压缩机、储气装置、膨胀机、热交换器和控制器等核心模块,通过MATLAB函数计算各部件参数,并设置仿真条件。文章详细说明了从模型创建到性能评估的完整流程,包括压缩/膨胀过程的能量转换、温度压力变化等关键指标分析。该建模方法可验证设计方案的有效性,并为系统优化提供参考,适用于新能源与储能领域的研究与应用。

MHD0815的博客 9172

【转】BPF详解

原文地址:https://linux.cn/article-9507-1.html 什么是 BPF? BPF,及伯克利包过滤器BerkeleyPacketFilter,最初构想提出于 1992 年,其目的是为了提供一种过滤包的方法,并且要避免从内核空间到用户空间的无用的数据包复制行为。它最初是由从用户空间注入到内核的一个简单的字节码构成,它在那个位置利用一个校验器进行检查 —— 以避免内核...

mrhesongze的博客 1万+

危废焚烧优化控制系统设计与实现:基于数据驱动的控制参数预测

本文提出了一种基于数据驱动的危险废物焚烧过程优化控制方法。系统利用历史运行数据和实时监测数据,通过深度学习模型预测关键控制参数,实现焚烧过程的智能化控制。系统采用Python开发,结合TensorFlow/PyTorch框架,构建了完整的数据采集、预处理、特征工程、模型训练和实时预测闭环系统。该系统能够处理多变量非线性关系,适应工况变化,从历史数据中学习最优控制策略,相比传统PID控制方法具有显著优势。论文详细介绍了系统架构、算法设计和实现细节,为危废焚烧过程的优化控制提供了有效解决方案。

huanghm88的专栏 206

PyTorch深度学习实战(41)——循环神经网络与长短期记忆网络

循环神经网络 (Recurrent Neural Network, RNN) 通过将前一个时间步的隐藏状态作为当前时间步的输入,实现对序列数据的建模,由于循环连接的存在,RNN 能够捕获时间依赖关系,然而,RNN 在处理长期依赖性问题时会遇到困难。为了解决这个问题,提出了 LSTM,通过引入门控机制改进 RNN 来有效地处理长期依赖关系。在本节中,了解了 LSTM 和 RNN 的基本原理,并介绍了如何在 PyTorch 中实现 LSTM。

盼小辉丶的博客 1万+

LWN:用BPF异步采集stack trace!

关注了就能看到更多这么棒的文章哦~Capturing stack traces asynchronously with BPFBy Daroc AldenJune 19, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/978736/Andrii Nakryiko 在 2024 年的Linux 存储、文件系统、内...

Linux News搬运工 2352

DeepSeek Harness“一切皆插件”核心机制详解

DeepSeek Harness 的“一切皆插件”核心 = Cordis 微内核 + 服务化能力接口 + 声明式依赖注入 + 类型化事件 + 可逆副作用 + 配置层 Profile/Bundle/Patch 组合。它的工程收益是:把模型、工具、循环、存储、UI 等所有 Agent 能力都变成“可从配置替换、可干净装卸”的单元,而不是写死在框架里。

软件行业技术文化交流。 595

LWN: 2019年LWN年终总结!

关注了就能看到更多这么棒的文章哦~A year-end wrap-up from LWNByJonathan CorbetDecember 18, 2019原文来自:https://l...

Linux News搬运工 1853

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LWN:LWN的2020年预测!

关注了就能看到更多这么棒的文章哦~LWN's 2020 visionByJonathan CorbetJanuary 1, 2020原文来自:https://lwn.net/A...

Linux News搬运工 471

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

BPF架构(二)

BPF架构(一)指令集:https://blog.youkuaiyun.com/byxzone/article/details/132219479。

barryX的技术笔记 1027

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

探索eBPF:Linux内核的黑科技

eBPF 是一个基于寄存器的虚拟机,使用自定义的 64 位 RISC 指令集,能够在 Linux 内核内运行即时本地编译的 “BPF 程序”,并能访问内核功能和内存的一个子集。这是一个完整的虚拟机实现,不要与基于内核的虚拟机(KVM)相混淆,后者是一个模块,目的是使 Linux 能够作为其他虚拟机的管理程序。eBPF 也是主线内核的一部分,所以它不像其他框架那样需要任何第三方模块(LTTng 或 SystemTap),而且几乎所有的 Linux 发行版都默认启用。

嵌入式Linux内核的博客 1872

非常神奇的Linux技术:BPF

近两年BPF技术跃然成为了一项热门技术,在KubeCon 2020 Europe会议上有7个关于BPF的技术分享, 而在KubeCon 2020 China会议上也已有了3个关于BPF技术的中文分享,分别来自腾讯和PingCAP,涉足网络优化和系统追踪等领域。在中文社区里,包括阿里巴巴、网易、字节跳动等国内第一梯队IT公司也越来越关注BPF这项新技术。 一、前言 作为一个coder,时不时会遇到性能问题,有时候明明看资源,cpu,io都占用不高,程序的性能就是上不去,真有一种想进入到计算机里面看看到底发

msbjy的博客 4135

《BPF( 伯克利数据包过滤器 ) Performance Tools》 第一章 引言

并且显示了延迟离群点的存在。有人开发了动态跟踪工具(比如kerninstCambhs99l), 其也包含相应的跟踪语言,但是这些工具实在太过复杂,在实践中很少被使用,还有部分原因是它们会带来较大的运行风险:动态跟踪要求实时修改地址空间中的应用指令,一旦出现任何错误就会导致进程或者内核崩溃。opensnoop.bt 工具可以对出错的软件进行故障排查,也许软件尝试打开了错误的文件位置:也可以用于了解配置和日志文件的具体位置:还可以识别一些性能问题,比如文件打开频次过快,或者反复检查错误文件位置等。

weixin_55255438的博客 1512

一文搞懂如何从头开发一个Hello World级eBPF程序

近两年最火的Linux内核技术非eBPF[1]莫属!2019年以来,除了eBPF技术自身快速演进之外,基于eBPF技术的观测(Observability)、安全(Security)和网络(Networking)类项目[2]如雨后春笋般出现。耳熟能详的的包括:cilium[3](把eBPF技术带到Kubernetes世界)、Falco[4](云原生安全运行时,Kuberne...

TonyBai 2875

LWN:5.6内核数据分析!

关注了就能看到更多这么棒的文章哦~Some 5.6 kernel development statisticsByJonathan CorbetMarch 30, 2020原文来自:...

Linux News搬运工 746

如何选择 Linux 上的跟踪器

tracer是一个高级的性能分析和诊断工具,但是不要让这名词唬住你,如果你使用过 strace 和 tcpdump,其实你就已经使用过跟踪器了。系统跟踪器可以获取更多的系统调用和数据包。它们通常能跟踪任意的内核和应用程序。 有太多的 Linux 跟踪器可以选择。每一种都有其官方的(或非官方的)的卡通的独角兽吉祥物,足够撑起一台"儿童剧"了。 那么我们应该使用哪个跟踪器呢?

winsonyuan的专栏 645

LWN: 要继续做unprivileged BPF这个方向吗?

点击上方蓝色“Linux News搬运工”关注我们~Reconsidering unprivileged BPFByJonathan CorbetKernel内部的BP...

Linux News搬运工 394

Linux 中的 DTrace :BPF 进入 4.9 内核

Linux 中的 DTrace :BPF 进入 4.9 内核 编译自:http://www.brendangregg.com/blog/2016-10-27/dtrace-for-linux-2016.html 作者: Brendan Gregg 原创:LCTT https://linux.cn/article-8038-1.html 译者: GitFuture 本文地址

摄心神,致虚极,守静笃 2494

阿里内核月报:2017年05月

1. A report from Netconf: Day 1 本文是2017年4月3日Netconf会议报告。主要的议题是:移除ndo_select_queue()函数,对于refcount_t类型引入开关,TC重定向导致内核陷入循环等。 移除ndo_select_queue() ndo_select_queue()函数是大家首先讨论的,它被用来决定往...

weixin_34160277的博客 358

gdb 调试入门,大牛写的高质量指南

gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意。gdb 是 GNU 调试器,Linux 上的标配调试器。当我看 Greg Law 在 CppCon 2015 上的演讲《给我 15 分钟,我将改变你的对 GDB 的认知》的时候,我想起了示例输出的不足,幸运的是,这次有输出!这 15 分钟太值了。 它也启发我去分享一个完整的 gdb 调试实...

luguifang2011的专栏 1万+
上一篇: LWN:从CentOS 7升级切换?
下一篇: LWN:P4TC 撞墙了!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值