1688392000663-1.png
Oracle 开源了一个基于 BPF 的 Linux 参数自动调优工具 “bpftune”,这是一个内核参数自动优化工具,可以通过监控 Linux 系统的工作负载自动设置正确的内核参数值。

Linux 内核包含超过 1,500 个可调参数 ,bpftune 会随着系统的状态不断地自动调整多项参数,一切参数的更改都是轻量级且完全实时,无需重新启动设备即可生效。

其主要好处是:

  • 使用 BPF(伯克利数据包过滤器)可观测性功能持续监控和调整系统行为。
  • 由于可以使用 BPF 观察系统状态的更多细节,因此可以在细粒度级别调整系统行为。

目前 bpftune 可以自动调整的参数:

  • Congestion tuner: 自动调节拥塞控制算法的选择。
  • Neighbour table tuner: 在接近满载时通过增长表来自动调整 Neighbour table 的大小。
  • Route table tuner: 在接近满时通过增长表来自动调整路由表大小。
  • sysctl tuner: 监视 sysctl 设置,如果它与自动调整的 sysctl 值冲突,则禁用关联的调谐器。
  • TCP buffer tuner: 自动调整最大和初始缓冲区大小。
  • net buffer tuner: 自动调整与核心网络相关的可调参数。
  • netns tuner: 监控网络命名空间的添加和删除,有助于增强 bpftune 整体的命名空间感知能力

编译安装

# 启用crb库
dnf config-manager --set-enabled crb
# 安装依赖
dnf install git libbpf-devel bpftool libnl3-devel libcap-devel clang llvm python3-docutils -y
# 下载源码(国内可能会卡住,卡住ctrl+c 重新执行试试)
git clone https://github.com/oracle-samples/bpftune.git
# 编译代码
cd bpftune/
make
# 安装
make install 

启动

# 启动命令
systemctl start bpftune
# 开机自启
systemctl enable bpftune

查看状态

# 查看状态命令
systemctl status bpftune
# 执行结果
[root@linux bpftune]# systemctl status bpftune
● bpftune.service - BPF-based auto-tuning of system parameters
     Loaded: loaded (/usr/lib/systemd/system/bpftune.service; enabled; preset: disabled)
     Active: active (running) since Mon 2023-07-03 21:33:28 CST; 6min ago
   Main PID: 99628 (bpftune)
      Tasks: 2 (limit: 2162908)
     Memory: 49.1M
        CPU: 1.491s
     CGroup: /system.slice/bpftune.service
             └─99628 /usr/sbin/bpftune

Jul 03 21:33:28 linux systemd[1]: Started BPF-based auto-tuning of system parameters.
Jul 03 21:33:28 linux bpftune[99628]: bpftune works fully
Jul 03 21:33:28 linux bpftune[99628]: bpftune supports per-netns policy (via netns cookie)
Jul 03 21:33:36 linux bpftune[99628]: Scenario 'netns created' occurred for tunable 'Network namespace' in global ns. network namespace creation
Jul 03 21:33:36 linux bpftune[99628]: netns created (cookie 69633)

提示Active: active (running) 则代表正常启动

此刻bpftune已经后台开始工作帮你监控服务器负载情况,如果发现有需要调整内核参数,则他会自动调整至合适的参数。