Amazon Linux 2023にbpftuneをインストールする

2023.07.04

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で独自拡張も可能みたいですし、なかなか良さそうですね。

References