あけましておめでとう😂!
では、今日はLinux 4.20より導入された PSI を試していきたいわけですが、まずは環境構築からやっていきたいとおもいます。今後、「〜していきたい」と言う表現が続きますが、そこは任意のユーチューバーやゲーム実況者の声に置き換えてお読みください。
PSIは公式サイトがあります。
Pressure Stall Information
とは、各種リソース、CPU/メモリ/IO のプレッシャー状況を取得する方法で、具体的には /proc
やcgroup2配下のファイルを経由してゲットできます。いわゆるロードアベレージのように参照できるのかどうかが気になっていて、色々試していきたいと思います。
ちなみに、TenForwardさんがすでに紹介記事を軽く書いていますので、僕はあれですね、フォロワーとしてやっていきたい。
カーネルをビルドしてdebファイルに固める
実はこの手順についてはgihyo.jpにすでにまとまっています。なのでまずはそこをご覧ください。事前に入れるべきパッケージもまとまっています。
この手順をベースに進めていきます。Ubuntu Bionicのシステム上で linux-4.20.7 のソースをとってきます。
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.20.7.tar.xz tar Jzf linux-4.20.7.tar.xz mkdir ../build cd linux-4.20.7/
configファイルを用意します。Ubuntuで使っているものをコピってきますが、 scripts/config
というツールを利用してPSIを有効にします。
cp /boot/config-`uname -r` ../build/.config scripts/config --file ../build/.config --enable PSI
あとはgihyoの手順の通りですね。好きなLOCALVERSIONを付与できるので、嬉しいですね(?)
make O=../build/ olddefconfig make -j$(nproc) O=../build/ LOCALVERSION=-udzura-sample make modules -j$(nproc) O=../build/ LOCALVERSION=-udzura-sample make bindeb-pkg -j$(nproc) O=../build/ LOCALVERSION=-udzura-sample
CPUがたくさんあれば意外と早く終わります。
vagrant@ubuntu1804:/data/work/linux-4.20.7$ ls -l ../ total 806920 drwxrwxr-x 24 vagrant vagrant 4096 Feb 12 01:29 build drwxrwxr-x 25 vagrant vagrant 4096 Feb 6 08:27 linux-4.20.7 -rw-rw-r-- 1 vagrant vagrant 5954 Feb 12 01:33 linux-4.20.7-udzura-sample_4.20.7-udzura-sample-1_amd64.buildinfo -rw-rw-r-- 1 vagrant vagrant 2775 Feb 12 01:33 linux-4.20.7-udzura-sample_4.20.7-udzura-sample-1_amd64.changes -rw-r--r-- 1 vagrant vagrant 11085992 Feb 12 01:30 linux-headers-4.20.7-udzura-sample_4.20.7-udzura-sample-1_amd64.deb -rw-r--r-- 1 vagrant vagrant 53078464 Feb 12 01:30 linux-image-4.20.7-udzura-sample_4.20.7-udzura-sample-1_amd64.deb -rw-r--r-- 1 vagrant vagrant 761068728 Feb 12 01:32 linux-image-4.20.7-udzura-sample-dbg_4.20.7-udzura-sample-1_amd64.deb -rw-r--r-- 1 vagrant vagrant 1022728 Feb 12 01:30 linux-libc-dev_4.20.7-udzura-sample-1_amd64.deb
最後はこれを sudo dpkg -i ../linux-*.deb
などとしてまとめてインストールします。
最後の最後に、カーネルの起動パラメータに psi=1
を追記しないと有効になりません。 /etc/default/grub
を以下のようにして update-grub2
します。
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 psi=1"
ではカーネルを新しくして再起動。
vagrant@ubuntu1804:~$ cat /proc/cmdline BOOT_IMAGE=/vmlinuz-4.20.7-udzura-sample root=UUID=afffe8ae-31ac-4960-be55-f7e95fcdd06f ro net.ifnames=0 biosdevname=0 psi=1 quiet vagrant@ubuntu1804:~$ uname -a Linux ubuntu1804.localdomain 4.20.7-udzura-sample #1 SMP Fri Feb 8 03:33:08 PST 2019 x86_64 x86_64 x86_64 GNU/Linux vagrant@ubuntu1804:~$ ls -l /proc/pressure/ total 0 -r--r--r-- 1 root root 0 Feb 12 02:13 cpu -r--r--r-- 1 root root 0 Feb 12 02:13 io -r--r--r-- 1 root root 0 Feb 12 02:13 memory vagrant@ubuntu1804:~$ cat /proc/pressure/cpu some avg10=0.00 avg60=0.15 avg300=0.08 total=255832
出てきました! 次回は cgroup-v2 + LXC とかの環境で負荷をかけたりして遊んでいきたい。
ちょっと、こう言う感じの雑なやつでも書いて行く頻度をあげよう...。