Oracle 打算使用 eBPF 为 Linux 重新设计 DTrace

甲骨文公司 报道 关于将 DTrace 相关更改传输到上游的工作,并计划在标准 Linux 内核基础架构之上实现 DTrace 动态调试技术,即使用 eBPF 等子系统。 最初,在 Linux 上使用 DTrace 的主要问题是许可证级别的不兼容,但在 2018 年 Oracle 重新获得许可 GPLv2 下的 DTrace 代码。

DTrace 已经 很长一段时间 作为 Oracle Linux 发行版扩展内核的一部分提供,但要在其他发行版中使用它,需要使用额外的内核补丁,这限制了该技术的使用。 举个例子,甲骨文 准备好的 有关在 Fedora Linux 上安装和使用 DTrace 的详细说明。 安装时需要组装 工具 以及使用从以下版本重建的 Linux 内核 补丁。 为了使用 Oracle 和 Fedora 补丁自动执行内核构建,建议 脚本.

eBPF 是内置于 Linux 内核中的字节码解释器,允许您创建网络操作处理程序、监视系统操作、拦截系统调用、控制访问、使用计时处理事件 (perf_event_open)、计算操作的频率和执行时间、使用 kprobes 执行跟踪/uprobes/跟踪点。 由于使用了 JIT 编译,字节码可以即时翻译为机器指令,并以本机代码的性能执行。 DTrace 可以在 eBPF 之上实现,类似于在 eBPF 之上的实现方式 工作 现有的追踪工具。

DTrace技术是为Solaris操作系统开发的,旨在解决动态跟踪系统内核和终端应用程序的问题,使用户能够详细监控系统行为并实时诊断问题。 在调试过程中,DTrace 不会影响正在研究的应用程序的运行,也不会以任何方式影响其性能,这使您可以即时组织对正在运行的系统的分析。 DTrace 的优势之一是高级 D 语言,类似于 AWK,在其中创建跟踪脚本比使用提供的工具通过 C、Python 和 Lua 以及外部库编写 eBPF 处理程序要容易得多。

Oracle 的工程师也在致力于为 GCC 创建 eBPF 后端,并且已经发布了 补丁集 将 eBPF 支持集成到 GCC 中并 取得了 包括在 GNU binutils 中支持 eBPF 的代码。 最初,eBPF 支持的后端基于 LLVM 技术,但 Oracle 对 GCC 中出现的为 eBPF 生成程序的标准能力感兴趣,这将允许使用一个工具包来构建 Linux 内核和构建程序对于 eBPF。

除了字节码生成后端之外,建议的 GCC 补丁还包括用于 eBPF 的 libgcc 端口和用于生成 ELF 文件的工具,从而可以使用内核提供的加载器在 eBPF 虚拟机中执行代码。 目前,C 语言的代码可以翻译为字节码(并非所有语言功能都可用),但将来预计会扩展可用的 C 语言功能,添加对其他语言的支持,创建模拟器,以及添加 GCC 支持,以便在不加载到内核的情况下调试 eBPF 程序。

来源: opennet.ru

添加评论