33 个版本
0.0.34 | 2023年10月25日 |
---|---|
0.0.33 | 2022年9月9日 |
0.0.32 | 2021年11月24日 |
0.0.31 | 2021年3月30日 |
0.0.3 | 2018年2月8日 |
#194 in 开发工具
2,212 每月下载量
用于 2 crates
150KB
4K SLoC
rust-bcc
警告!未维护!
随着 Rust 生态系统其他 BPF Crates 的进步,这个 crate 已不再积极维护。我们建议采用 libbpf-rs
关于
针对 BPF 编译器集合的 Rust 风格绑定。目标是模仿 https://github.com/iovisor/bcc 中的 Python BCC 绑定。
C bcc API(在 bcc-sys
中暴露)非常强大,但单独使用它并安全地管理它分配的所有资源相当复杂。
此 crate 目前为实验性,其中包含一些不安全或不太符合 Rust 风格的内容。非常欢迎拉取请求。
先决条件
- bcc v0.4.0-v0.23.0
静态链接
此 crate 允许静态链接 libbpf/libbcc,这可以创建不依赖于目标系统上匹配版本的工具。要静态链接,您可能需要从源代码编译多个依赖项。有关如何构建这些依赖项以及如何在 CI 中构建和运行静态链接示例的信息,请参阅 build/ci.sh
脚本。
入门
了解如何使用此 crate 的最佳方式是阅读示例。这些示例最令人兴奋的地方是,Rust 版本的代码实际上并不比 Python 版本冗长。在某种程度上,Rust 代码更易读,因为与 Python 相比,在 Rust 中操作 C 数据结构更为自然。
构建
该库使用功能来支持多个版本的bcc。根据您安装的bcc版本,在构建示例时可能需要使用功能标志,以便将期望的bcc版本与系统上安装的版本相匹配。
示例
- examples/strlen.rs 使用BPF哈希表来统计所有由
strlen
运行的字符串的频率。将 strlen_count.py 章节移植到Rust。 - examples/opensnoop.rs 使用perf事件跟踪系统上打开的每个文件。将 opensnoop.py 移植到Rust。
- examples/softirq.rs 使用内核tracepoints来报告在软中断处理器中花费的时间。将 softirqs.py 移植到Rust。
依赖
~5.5MB
~159K SLoC