ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

Ubuntu(などdeb系なLinux)でLinux 4.20 + PSIなカーネルを入れる

あけましておめでとう😂!

では、今日はLinux 4.20より導入された PSI を試していきたいわけですが、まずは環境構築からやっていきたいとおもいます。今後、「〜していきたい」と言う表現が続きますが、そこは任意のユーチューバーやゲーム実況者の声に置き換えてお読みください。

PSIは公式サイトがあります。

facebookmicrosites.github.io

Pressure Stall Information とは、各種リソース、CPU/メモリ/IO のプレッシャー状況を取得する方法で、具体的には /proc やcgroup2配下のファイルを経由してゲットできます。いわゆるロードアベレージのように参照できるのかどうかが気になっていて、色々試していきたいと思います。

ちなみに、TenForwardさんがすでに紹介記事を軽く書いていますので、僕はあれですね、フォロワーとしてやっていきたい。

tenforward.hatenablog.com

tenforward.hatenablog.com

カーネルをビルドしてdebファイルに固める

実はこの手順についてはgihyo.jpにすでにまとまっています。なのでまずはそこをご覧ください。事前に入れるべきパッケージもまとまっています。

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 とかの環境で負荷をかけたりして遊んでいきたい。


ちょっと、こう言う感じの雑なやつでも書いて行く頻度をあげよう...。