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已经后台开始工作帮你监控服务器负载情况,如果发现有需要调整内核参数,则他会自动调整至合适的参数。