一次可挂上四百多个系统调用:tracing_multi 进 Linux 7.2
想给每一个系统调用都挂上延时统计时,过去常见两条路:要么写几百份几乎一样的 BPF 程序,要么退回 kprobe 多重挂接——安装灵活,但热路径往往更贵。Jiri Olsa 推动的 tracing_multi 改变了这件事:一条程序、 …
想给每一个系统调用都挂上延时统计时,过去常见两条路:要么写几百份几乎一样的 BPF 程序,要么退回 kprobe 多重挂接——安装灵活,但热路径往往更贵。Jiri Olsa 推动的 tracing_multi 改变了这件事:一条程序、 …
每年秋天,内核社区最核心的开发者都会聚到一起,把接下来一两年要落地的东西摊开来吵一遍。今年的 Linux Plumbers Conference 定在 10 月 5 日到 7 日,捷克布拉格。
eBPF 让我们不改内核、不装模块就能往内核里放代码,但决定谁能放的,一直只是"你是不是 root",而不是"代码是谁构建的、有没有被改过"。内核模块十多年前就有签名机制,eBPF 一直缺这一环。
你在 CLAUDE.md 里写了一条规则:"不要执行 git push"。Agent 遵守了,它确实没有调用 git 工具。但它写了一个 Python 脚本,脚本里调了 subprocess.run(["git", "push"]),代码推 …
Marchesi 展示了一张功能对照表,左边 LLVM/Clang,右边 GCC 16。扫一遍下来:基础特性部分两者已基本对齐;但 production 级别的高级特性——内存序感知原子操作(memory ordering aware …
如你构建系统或运维集群时,频繁遇到代理 (agent)、iptables 或内核模块的各种限制,那么 eBPF 正是你一直在寻找的更安全、更快、更具动态性的技术选择。eBPF 允许你在 Linux 内核中运行小型且经安全验证的程序,实现运 …
在 2004 年,Linux 社区的 Con Kolivas 提出了可插拔式调度器的想法,旨在让内核中存在多个调度器,用户可在引导时选择。然而,该想法遭到了强烈反对,认为会导致调度器的碎片化。在 2021 年,Facebook …
在本文中,我们将探讨在 eBPF 程序内部触发信号的语义。此外,我们还将确定和观察在处理这些信号背后我的影响。
经过上述测试,我们可以看到 I/O Wait 可能是一个令人非常困惑的指标。如果 CPU 密集型的进程运行,I/O Wait 的值可能会降低,但是尽管 I/O Wait 指标下降了,但磁盘 I/O 仍然和原来一样阻塞进程执行。所以在判断是否 …
Linux 内核在 2022 年主要发布了 5.16-5.19 以及 6.0 和 6.1 这几个版本,每个版本都为 eBPF 引入了大量的新特性,本文将对这些新特性进行一点简要的介绍,更详细的资料请参考对应的链接信息。总体而言,eBPF 在 …
随着 eBPF 的发展,我们已经可以将 eBPF/XDP 程序直接部署在普通服务器上来实现负载均衡,从而节省掉用于专门部署 LVS 的机器。
想想看,当我们用 kprobe 为一个内核函数注册了 probe 之后,怎样能看到对应内核函数的第一条指令被替换了呢?
Linux 内核中的调试符号包含源代码级别的信息,如函数名称、函数调用约定、以及源代码行号到指令的映射。这些信息在调试或剖析内核的时候非常有用。在本文中,我将展示如何在 Ubuntu 上获得任何内核的调试符号。
如果你只是需要快速使用工具来进行问题排查,包括但不限于函数调用栈跟踪、函数调用子函数流程、函数返回结果,那么推荐你直接使用 Brendan Gregg 封装的 perf-tools工具即可,本文尝试从手工操作 Ftrace 跟踪工具的方式展 …
Cilium 项目已逐渐成为万众瞩目之星,我们很自豪能够成为该项目的核心人员。几天前,我们发布了具有诸多新功能的 Cilium 1.11 版本,这是一个令人兴奋的版本。诸多新功能中也包括了万众期待的 Cilium Service Mesh …
本文基于 Ubuntu 21.04 版本使用 Vagrnt 和 VirtualBox 打造了 BPF 编译环境,同时提供了命令行升级内核和手工编译内核升级的方式
在使用 VirtualBox( VMDK 模式)管理虚拟机的时候,我们经常会遇到一些编译安装场景(比如编译 Linux 内核),会导致磁盘空间急剧膨胀,但是在编译完成后即使我们删除了相关的文件,在 VM 虚拟机占用主机的空间却并没有减少, …
BTF(BPF 类型格式)是一种元数据格式,对与 BPF 程序 /map 有关的调试信息进行编码。BTF 这个名字最初是用来描述数据类型。后来,BTF 被扩展到包括已定义的子程序的函数信息和行信息。调试信息可用于 map 的更好打印、函数签 …
本文基于 ubuntu 20.04 版本,对于 kdump 的原理、安装和使用进行了详细的说明,并给出了 crash 工具常用的命令说明
本文介绍了 pstack 打印程序运行堆栈,golang 中如何输出 goroutine 堆栈和如何使用 sysrq 输出系统运行的线程堆栈;同时对于函数级别的调用栈和子函数调用工具也给出了介绍
本文涵盖了 Linux 内核进程管理的各个方面,从进程基础知识、Linux 调度器 O(n)/O(1)/CFS 对比、进程的抢占、负载计算 PLET、SMP 负载均衡等维度,详细介绍了 Linux 进程管理相关的只是
本文介绍了在 Ubuntu 20.04 机器上使用 qemu + gdb 进行内核调试的整体流程; 最终使用 Eclipse-CDT 进行图形化设置的主要步骤
本文主要介绍了由于 ipvs estimation_timer 遍历时间过长导致服务请求抖动或 ping 抖动的排查思路,使用 bpf 技术的 traceicmpsoftirq.py 脚本定位到抖动处理的软中断 CPU 核数,通过 perf …
本文使用 kpatch 的 livepatch 的技术,避免了重启系统或者加载模块,解决了 kubernetes 环境下的 ipvs 规则数量过大,ipvs 的统计定时器 estimation_timer 在内核时间过长导致网络抖动的问题
本文用于排查 linux 下 CPU 使用率低而 Load 负载高的场景模拟测试,通过 vfork 和 nfs server 模拟两种场景
1. 平均负载(Load Average)概念 1.1 单核 CPU 系统 单个 CPU 的处理能力和负载情况可以用下图表达,如果为1.0 表明负载已经饱和,CPU 没有更多的处理能力: 图中的卡车等同于 CPU 的时间片概念(一般情况下对 …