eBPF 在网易轻舟云原生的应用实践

本文介绍了eBPF在Linux内核中的重要性和技术优势,如平台无关性、内核无关性、安全检查和方便升级。通过与传统trace工具的对比,展示了eBPF在系统探测和网络性能优化的应用,包括系统探测工具BCC和Bpftrace。eBPF在网易轻舟中用于系统探测和网络性能优化,如HTTP请求延迟监控和TCP连接数监控,以及通过sockops组件加速istio服务网格通信,实现了性能提升。未来,将继续探索eBPF在监控和网络优化领域的更多应用。
摘要由CSDN通过智能技术生成

作者 | 李阳,陈启钧

策划 | 田晓旭

首发 | InfoQ

eBPF 是 Linux 内核近几年最为引人注目的特性之一,通过一个内核内置的字节码虚拟机,完成数据包过滤、调用栈跟踪、耗时统计、热点分析等等高级功能,是 Linux 系统和 Linux 应用的功能 / 性能分析利器。本文将介绍 eBPF 的技术特点,及 eBPF 在网易杭研轻舟系统探测和网络性能优化方面的应用。

1. 技术浅析—eBPF 好在哪里

eBPF 是 Linux Kernel 3.15 中引入的全新设计,将原先的 BPF 发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。

eBPF 支持在用户态将 C 语言编写的一小段“内核代码”注入到内核中运行,注入时要先用 llvm 编译得到使用 BPF 指令集的 ELF 文件,然后从 ELF 文件中解析出可以注入内核的部分,最后用 bpf_load_program() 方法完成注入。 用户态程序和注入到内核中的程序通过共用一个位于内核中的 eBPF MAP 实现通信。为了防止注入的代码导致内核崩溃,eBPF 会对注入的代码进行严格检查,拒绝不合格的代码的注入。

eBPF在网易轻舟云原生的应用实践

1.1 eBPF 的技术优势

eBPF 具备一些非常棒的特性,使得我们在内核层面的监控变得更加便捷、高效,并且非常安全:

  • 平台无关,由 JIT 负责将 BPF 代码翻译成最终的处理器指令;
  • 内核无关,辅助函数(Helper functions)使得 BPF 能够通过一组内核定义的函数调用(Function call)来从内核中查询数据,或者将数据推送到内核。不同类型的 BPF 程序能够使用的辅助函数可能是不同的;
  • 安全检查,和内核模块不同,BPF 程序会被一个位于内核中的校验器(in-kernel verifier)进行校验,以确保它们不会造成内核崩溃、程序永远能够终止等;
  • 方便升级,对于网络场景(例如 TC 和 XDP),BPF 程序可以在无需重启内核、系统服务或容器的情况下实现原子更新,并且不会导致网络中断;
  • 通信方式,eBPF MAP,跟 Ftrace 提供的 ring buffer 相比就是数据常驻内存,不会读取之后就消失;
    - 事件驱动,BPF 程序在内核中的执行总是事件驱动的;

1.2 eBPF 和其他 trace 工具的对比

在 eBPF 出现之前,Linux 已经存在多种成熟的 trace 机制和相应的上层工具:

eBPF在网易轻舟云原生的应用实践

如上图所示,eBPF 借助 perf_event 和 trace_event 几乎支持对目前所有已知 trace 功能的支持,唯一与传统 trace 工具不同的是,attach 到每个探测点的 probe 函数是

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网易杭研

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值