Introduction
先日、OracleがLinuxカーネルのパラメータを自動チューニングするツール「bpftune」をオープンソースで公開という記事をみました。
bpftuneはBPF(Berkeley Packet Filter)という、
Linuxカーネル内のいろいろな機能をフックして
機能拡張可能な仕組みを利用し、継続的にLinuxカーネルの詳細な監視と
自動チューニングを実現しているようです。
今回はこのbpftuneをAmazon Linux 2023にインストールして、
動作を確認してみます。
bpftune?
さきほどもいったように、bpftuneはLinuxカーネルの
パラメータを自動チューニングを提供します。
BPFのオブザーバビリティ機能観を使い、
システムの振る舞いを継続的に監視して調整します。
説明によると、結構細かい粒度でチューニング可能みたいです。
そして、チューニングできる項目はNeighbourテーブルや
Routeテーブル、TCPバッファやネットワーク名前空間が
監視対象になっています。
また、pluginを独自に実装して任意の監視や
チューニングを行うこともできるそうな。
Environment
今回はAmazon Linux 2023のAMIをつかって
EC2インスタンスを起動して試してみました。
Try
まず、Amazon Linuxのインスタンスを起動してSSHログインします。
その後必要パッケージをインストールしていきましょう。
% sudo yum update
% sudo yum install -y openssl-devel git gcc gcc-c++
% sudo yum -y install bpftool clang libcap-devel libbpf-devel libnl3-devel
bpftuneのGitリポジトリをcloneします。
% git clone https://github.com/oracle-samples/bpftune.git
Makeする。
% cd bpftune/
% make ; sudo make install
インストールが完了したらbpftune -sコマンドを実行してみます。
bpftuneが現在のLinuxカーネルに対応していれば、
↓のような表示がでます。
% sudo bpftune -s
bpftune: bpftune works fully
bpftune: bpftune supports per-netns policy (via netns cookie)
bpftuneを起動します。
psで見てみると、正常に起動しているみたいです。
% sudo service bpftune start
Redirecting to /bin/systemctl start bpftune.service
% ps -ax | grep bpftune
43742 ? Ssl 0:00 /usr/sbin/bpftune
実際にbpftuneが動いているのか確認します。
適当なリポジトリをgit cloneしたあとにjournalctlでログを見てみます。
% git clone https://github.com/curl/curl.git #適当なリポジトリをcloneしてみる
・・・
% sudo journalctl /usr/sbin/bpftune
bpftune[43742]: Scenario 'need to increase TCP buffer size(s)' occurred for tunable 'net.ipv4.tcp_rmem' in global ns.
Need to increase buffer size(s) to maximize throughput
bpftune[43742]:
Due to need to increase max buffer size to maximize throughput change net.ipv4.tcp_rmem(min default max)
from (4096 131072 19200000) -> (4096 131072 24000000)
動いてるっぽいのがわかります。
また、ip netnsでネットワーク名前空間を追加したときも動いています。
% sudo ip netns add bofrtunetest-route
・・・
% sudo journalctl /usr/sbin/bpftune
bpftune[43742]: Scenario 'netns created' occurred for tunable 'Network namespace' in global ns. network namespace creation
bpftune[43742]: netns created (cookie 4098)
ちなみに、Dockerでコンテナを起動した場合にも動きます。
Summary
bpftuneを試してみました。
daemonとして動き、自動でカーネルをチューニングしてくれるので、
いちいち設定をしなくてもOK。
pluginで独自拡張も可能みたいですし、なかなか良さそうですね。