用户态eBPF运行时实现高性能Uprobe和系统调用钩子
bpftime是一个功能完善的eBPF用户态运行时,提供高性能的Uprobe和系统调用钩子。其用户态Uprobe较内核Uprobe快10倍,能安全高效地钩住进程的所有系统调用。该项目兼容现有eBPF工具链,支持跨平台JIT编译,可动态注入运行中的进程,并能与内核eBPF协作。bpftime为系统监控和性能分析提供了强大支持。
bpftime
是一个功能齐全、高性能的用户空间eBPF运行时。它提供快速的Uprobe和系统调用钩子功能:用户空间uprobe比内核uprobe快10倍!并且可以安全高效地以编程方式钩住进程的所有系统调用。
📦 主要特性
🔨 快速开始
🔌 示例和用例
⌨️ Linux Plumbers 23演讲
📖 幻灯片
📚 Arxiv预印本
跟踪
或改变
函数的执行,钩住
或过滤
进程的所有 系统调用。10倍
。eBPF映射
,用于汇总聚合或控制平面通信。现有eBPF工具链
开发用户空间eBPF,无需任何修改。支持通过BTF实现CO-RE,并提供用户空间主机函数访问。JIT/AOT
编译器。还包括用C语言手工制作的x86 JIT,适用于资源受限的环境。VM可以像ubpf一样构建为独立库
。vm
:eBPF VM和JIT,您可以选择bpftime LLVM JIT和基于ubpf的简单JIT/解释器。它可以构建为独立库并集成到其他项目中。API类似于ubpf。runtime
:eBPF的用户空间运行时,包括系统调用服务器和代理、将eBPF程序附加到Uprobe和系统调用跟踪点,以及共享内存中的eBPF映射。daemon
:一个守护进程,使用户空间eBPF能够与内核配合工作并与内核uprobe兼容。监控和修改内核eBPF事件和系统调用,从内核加载用户空间eBPF。使用bpftime
,您可以使用熟悉的工具(如clang和libbpf)构建eBPF应用程序,并在用户空间执行它们。例如,malloc
eBPF程序使用uprobe跟踪malloc调用,并使用哈希映射聚合计数。
您可以参考eunomia.dev/bpftime/documents/build-and-test了解如何构建项目,或使用来自GitHub packages的容器镜像。
要开始,您可以构建并运行一个基于libbpf的eBPF程序,从bpftime
cli开始:
make -C example/malloc # 构建eBPF程序示例 bpftime load ./example/malloc/malloc
在另一个shell中,运行带有eBPF的目标程序:
$ bpftime start ./example/malloc/victim Hello malloc! malloc called from pid 250215 continue malloc... malloc called from pid 250215
您还可以动态地将eBPF程序附加到正在运行的进程:
$ ./example/malloc/victim & echo $! # pid是101771 [1] 101771 101771 continue malloc... continue malloc...
然后附加到它:
$ sudo bpftime attach 101771 # 您可能需要以root身份运行make install Inject: "/root/.bpftime/libbpftime-agent.so" Successfully injected. ID: 1
您可以看到原始程序的输出:
$ bpftime load ./example/malloc/malloc ... 12:44:35 pid=247299 malloc calls: 10 pid=247322 malloc calls: 10
或者,您也可以直接在内核eBPF中运行我们的示例eBPF程序,以查看类似的输出。这可以作为bpftime如何与内核eBPF兼容工作的示例。
$ sudo example/malloc/malloc 15:38:05 pid=30415 malloc calls: 1079 pid=30393 malloc calls: 203 pid=29882 malloc calls: 1076 pid=34809 malloc calls: 8
有关更多详细信息,请参阅eunomia.dev/bpftime/documents/usage。
⚠️ 注意:
bpftime
正在积极开发中,尚不建议用于生产环境。有关详细 信息,请参阅我们的路线图。我们非常希望听到您的反馈和建议!请随时开启问题或联系我们。
有关更多示例和详细信息,请参阅eunomia.dev/bpftime/documents/examples/网页。
示例包括:
Uprobe/USDT
跟踪和系统调用跟踪
:
bpf_override_return
更改函数行为。bpftime支持两种模式:
左:原始内核eBPF | 右:bpftime
在此模式下,bpftime可以在没有内核的用户空间运行eBPF程序,因此可以移植到低版本的Linux甚至其他系统,并且无需root权限即可运行。 它依赖于用户空间验证器来确保eBPF程序的安全性。
在此模式下,bpftime可以与内核eBPF一起运行。它可以从内核加载eBPF程序,并使用内核eBPF映射与内核eBPF程序(如kprobes和网络过滤器)协作。
当前的钩子实现基于二进制重写,底层技术受到以下启发:
有关详细信息,请参阅我们的草稿arxiv论文bpftime: 用于Uprobe、系统调用和内核-用户交互的用户空间eBPF运行时。
用户空间uprobe与内核uprobes相比性能如何?
探针/跟踪点类型 | 内核(纳秒) | 用户空间(纳秒) |
---|---|---|
Uprobe | 3224.172760 | 314.569110 |
Uretprobe | 3996.799580 | 381.270270 |
系统调用跟踪点 | 151.82801 | 232.57691 |
手动插桩 | 不可用 | 110.008430 |
它可以像内核uprobe一样附加到正在运行的 进程中的函数上。
LLVM JIT/AOT与其他eBPF用户空间运行时、原生代码或wasm运行时相比性能如何?
在所有测试中,bpftime的LLVM JIT始终展示出卓越的性能。它们在整数计算(如log2_int所示)、复杂数学运算(如prime所示)和内存操作(如memcpy和strcmp所示)方面都表现出很高的效率。虽然它们在整体性能上领先,但每个运行时都有其独特的优势和劣势。这些洞察对用户在为特定用例选择最合适的运行时时非常有价值。
有关我们如何评估和详细信息,请参见github.com/eunomia-bpf/bpf-benchmark。
哈希映射或环形缓冲区与内核相比(待完成)
有关详细的性能基准测试,请参见benchmark目录。
bpftime
允许您使用clang
和libbpf
构建eBPF程序,并直接在此运行时中运行它们。我们已经用third_party/libbpf中的libbpf版本进行了测试。不需要特定的libbpf或clang版本。task_struct
。有关更多详细信息,请参阅eunomia.dev/bpftime/documents/available-features。
有关详细信息,请参阅eunomia.dev/bpftime/documents/build-and-test。
bpftime
正在不断发展,未来还有更多功能:
敬请期待这个前景广阔的项目的更多发展!您可以在GitHub上找到bpftime
。
本项目采用MIT许可证。
有任何问题或对未来发展的建议吗?欢迎开issue或联系 yunwei356@gmail.com!
我们的arxiv预印本:https://arxiv.org/abs/2311.07923
@misc{zheng2023bpftime, title={bpftime: userspace eBPF Runtime for Uprobe, Syscall and Kernel-User Interactions}, author={Yusheng Zheng and Tong Yu and Yiwei Yang and Yanpeng Hu and XiaoZheng Lai and Andrew Quinn}, year={2023}, eprint={2311.07923}, archivePrefix={arXiv}, primaryClass={cs.OS} }
eunomia-bpf社区由中国科学院软件研究所的PLCT实验室赞助。
感谢其他赞助商和讨论帮助构建这个项目:来自帝国理工学院的Marios Kogias教授,来自华南理工大学的赖晓铮教授,来自西安邮电大学的陈立军教授,来自清华大学NISL实验室的李琦教授,以及LPC 23 eBPF赛道的Linux eBPF维护者们。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号