bcc

bcc

基于eBPF的高性能内核追踪与分析工具包

BCC是基于eBPF技术的内核追踪和分析工具包,提供C语言编写内核工具的能力及Python和Lua前端接口。它简化了BPF程序开发,适用于性能分析、网络流量控制等任务。项目包含丰富的工具和示例,覆盖系统跟踪、内存管理、进程监控、性能优化、CPU分析、网络诊断和存储分析等多个领域。

BPFLinux内核性能分析网络流量控制系统跟踪Github开源项目

BCC 徽标

BPF 编译器集合 (BCC)

BCC 是一个用于创建高效内核跟踪和操作程序的工具包,包含多个有用的工具和示例。它利用了扩展的 BPF(Berkeley Packet Filters),正式名称为 eBPF,这是一个首次添加到 Linux 3.15 的新特性。BCC 使用的大部分功能需要 Linux 4.1 及以上版本。

Ingo Molnár 对 eBPF 的描述如下:

这个周期中一个更有趣的特性是能够将 eBPF 程序(用户定义的、沙盒化的字节码由内核执行)附加到 kprobes。这允许用户对活动内核映像进行自定义检测,永远不会崩溃、挂起或对内核产生负面影响。

BCC 使 BPF 程序更易于编写,可以用 C 语言进行内核检测(并包含 LLVM 的 C 语言封装),以及 Python 和 Lua 前端。它适用于许多任务,包括性能分析和网络流量控制。

截图

这个例子跟踪了一个磁盘 I/O 内核函数,并在内核中填充了一个 I/O 大小的 2 次方直方图。为了效率,只有直方图摘要会返回到用户级。

# ./bitehist.py 正在跟踪...按 Ctrl-C 结束。 ^C kbytes : count distribution 0 -> 1 : 3 | | 2 -> 3 : 0 | | 4 -> 7 : 211 |********** | 8 -> 15 : 0 | | 16 -> 31 : 0 | | 32 -> 63 : 0 | | 64 -> 127 : 1 | | 128 -> 255 : 800 |**************************************|

上面的输出显示了一个双峰分布,其中最大的模式是 800 次 I/O,大小在 128 到 255 KB 之间。

查看源代码:bitehist.py。跟踪的内容、存储的内容以及数据的呈现方式都可以完全自定义。这只展示了众多可能功能中的一部分。

安装

请参阅 INSTALL.md 了解您平台上的安装步骤。

常见问题

请参阅 FAQ.txt 了解最常见的故障排除问题。

参考指南

请参阅 docs/reference_guide.md 获取 bcc 和 bcc/BPF API 的参考指南。

内容

其中一些是包含 C 和 Python 的单个文件,其他一些有一对 .c 和 .py 文件,还有一些是文件目录。

跟踪

示例

工具

<center><a href="images/bcc_tracing_tools_2019.png"><img src="https://yellow-cdn.veclightyear.com/2b54e442/24ebd88e-58f2-4ab5-864b-33c8bd2498df.png" border=0 width=700></a></center>
  • tools/argdist: 以直方图或频率计数的形式显示函数参数值。示例
  • tools/bashreadline: 打印系统范围内输入的 bash 命令。示例
  • tools/bpflist: 显示具有活动 BPF 程序和映射的进程。示例
  • tools/capable: 跟踪安全能力检查。示例
  • tools/compactsnoop: 跟踪压缩区域事件及其 PID 和延迟。示例
  • tools/criticalstat: 跟踪并报告内核中的长原子临界区。示例
  • tools/deadlock: 检测运行进程中的潜在死锁。示例
  • tools/drsnoop: 跟踪直接回收事件及其 PID 和延迟。示例
  • tools/funccount: 计算内核函数调用次数。示例
  • tools/inject: 带有调用链和谓词的目标错误注入。示例
  • tools/klockstat: 跟踪内核互斥锁事件并显示锁统计信息。示例
  • tools/opensnoop: 跟踪 open() 系统调用。示例
  • tools/readahead: 显示预读缓存的性能。示例
  • tools/reset-trace: 重置跟踪状态。仅用于维护。示例
  • tools/stackcount: 计算内核函数调用及其堆栈跟踪。示例
  • tools/syncsnoop: 跟踪 sync() 系统调用。示例
  • tools/threadsnoop: 列出新线程创建。示例
  • tools/tplist: 显示内核跟踪点或 USDT 探针及其格式。示例
  • tools/trace: 跟踪任意函数,可带过滤器。示例
  • tools/ttysnoop: 观看 tty 或 pts 设备的实时输出。示例
  • tools/ucalls: 汇总高级语言中的方法调用或 Linux 系统调用。示例
  • tools/uflow: 打印高级语言中的方法流程图。示例
  • tools/ugc: 跟踪高级语言中的垃圾回收事件。示例
  • tools/uobjnew: 按对象类型和分配的字节数汇总对象分配事件。示例
  • tools/ustat: 收集高级语言中的事件,如垃圾回收、线程创建、对象分配、异常等。示例
  • tools/uthreads: 跟踪 Java 和原始 pthreads 中的线程创建事件。示例
内存和进程工具
  • tools/execsnoop: 通过 exec() 系统调用跟踪新进程。示例
  • tools/exitsnoop: 跟踪进程终止(退出和致命信号)。示例
  • tools/killsnoop: 跟踪由 kill() 系统调用发出的信号。示例
  • tools/kvmexit: 显示每个虚拟机退出的退出原因及其统计信息。示例
  • tools/memleak: 显示未释放的内存分配以查找内存泄漏。示例
  • tools/oomkill: 跟踪内存不足(OOM)杀手。示例
  • tools/pidpersec: 计算新进程(通过 fork)。示例
  • tools/rdmaucma: 跟踪 RDMA 用户空间连接管理器访问事件。示例
  • tools/shmsnoop: 跟踪 System V 共享内存系统调用。示例
  • tools/slabratetop: 内核 SLAB/SLUB 内存缓存分配率排行。示例
性能和时间工具
  • tools/dbslower: 跟踪比阈值慢的 MySQL/PostgreSQL 查询。示例
  • tools/dbstat: 将 MySQL/PostgreSQL 查询延迟汇总为直方图。示例
  • tools/funcinterval: 同一函数之间的时间间隔直方图。示例
  • tools/funclatency: 计时函数并显示其延迟分布。示例
  • tools/funcslower: 跟踪缓慢的内核或用户函数调用。示例
  • tools/hardirqs: 测量硬 IRQ(硬中断)事件时间。[示例](tools/
  • tools/bitesize:显示每个进程的I/O大小直方图。示例
  • tools/cachestat:跟踪页面缓存命中/未命中比率。示例
  • tools/cachetop:按进程跟踪页面缓存命中/未命中比率。示例
  • tools/dcsnoop:跟踪目录项缓存(dcache)查找。示例
  • tools/dcstat:目录项缓存(dcache)统计。示例
  • tools/biolatency:以直方图形式总结块设备I/O延迟。示例
  • tools/biotop:磁盘的top命令:按进程总结块设备I/O。示例
  • tools/biopattern:识别随机/顺序磁盘访问模式。示例
  • tools/biosnoop:跟踪块设备I/O,包括PID和延迟。示例
  • tools/dirtop:按目录显示文件读写。目录的top命令。示例
  • tools/filelife:跟踪短暂文件的生命周期。示例
  • tools/filegone:跟踪文件消失的原因(删除或重命名)。示例
  • tools/fileslower:跟踪缓慢的同步文件读写。示例
  • tools/filetop:按文件名和进程显示文件读写。文件的top命令。示例
  • tools/mdflush:跟踪md刷新事件。示例
  • tools/mountsnoop:系统范围内跟踪mount和umount系统调用。示例
  • tools/virtiostat:显示VIRTIO设备IO统计。示例
文件系统工具

网络

示例:

BPF自省

帮助自省BPF程序的工具。

  • introspection/bps.c:列出加载到内核中的所有BPF程序。BPF程序的'ps'命令。示例

动机

BPF保证加载到内核中的程序不会崩溃,也不会永远运行,但BPF又足够通用,可以执行多种任意类型的计算。目前,可以用C语言编写一个程序,编译成有效的BPF程序,但编写一个编译成无效BPF的C程序要容易得多(C语言就是这样)。用户在尝试运行程序之前不会知道它是否有效。

有了专门的BPF前端,人们应该能够用一种语言编写程序,并从编译器那里得到关于其在BPF后端的有效性的反馈。这个工具包旨在提供一个只能创建有效BPF程序的前端,同时仍然充分利用其灵活性。

此外,当前与BPF的集成工作流程有些笨拙,有时涉及直接在Linux内核源代码树中编译。这个工具链旨在最大限度地减少开发人员编译BPF所花费的时间,而将重点放在可以用BPF编写的应用程序和可以用BPF解决的问题上。

这个工具包的特点包括:

  • 共享库中的端到端BPF工作流程
    • 为BPF后端修改的C语言
    • 与llvm-bpf后端集成以进行JIT编译
    • 动态加载/卸载JIT编译的程序
    • 支持BPF内核钩子:套接字过滤器、tc分类器、tc操作和kprobes
  • Python绑定
  • 套接字过滤器、tc分类器和kprobes的示例
  • 用于跟踪运行系统的独立工具

未来,很可能会支持更多的绑定,而不仅仅是Python。随时添加对你选择的语言的支持并发送拉取请求!

教程

网络

在2015年Red Hat峰会上,BCC作为BPF会话的一部分进行了展示。 模拟了一个多主机vxlan环境,并使用BPF程序监控其中一个物理接口。BPF程序保存了通过接口的内部和外部IP地址的统计信息,用户空间组件将这些统计信息转化为一个图表,显示多个粒度级别的流量分布。查看代码这里

贡献

已经迫不及待要提交一些代码了吗?这里有一些资源可以加入IOVisor社区的讨论,看看你想做什么工作。

外部链接

想了解更多关于BCC及其使用方式的信息吗?你可以在LINKS.md中找到网上其他BCC相关内容的链接。

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多