2023-02-14

Linux 起動オプションに slab_nomerge を指定してみた

小さなメモリーを効率的に利用するための仕組みが SLAB ですが、さらにそれを有効に利用しようというのが slab_merge というオプションです。

Linux Mint 21.1 ではカーネルのコンフィグに以下のように指定されています。

$ cat /boot/config-$(uname -r) | grep -i slab_merge
CONFIG_SLAB_MERGE_DEFAULT=y

これは起動オプションに slab_merge と指定したのと同じ意味合いです。


SLAB のマージを無効化すると、一般的にはセキュリティ面での安全性が高まる、という効果があるそうですが、マージしなくなることでパフォーマンスも良くなるのではないかと考えました。

また、マージしない SLAB が増えると思われ、SLAB に割り当てるメモリー量も増えるのではないかと考えました。

ちなみに、Red Hat Enterprise Linux 8.4 からは CONFIG_SLAB_MERGE_DEFAULT=n が設定されるように変わっているとのことで「時代はマージしない」なのではないかというのも実験のきっかけの一つです。

 

というわけで、今回は有効・無効で SLAB の量が変化するかを確認してみました。

Linux Mint を起動後、2日間ほど経過したあたりで slabtop -o コマンドの結果を比べてみました。

比較項目slab_mergeslab_nomerge
uptime2 days, 3:071 day, 19:13
Active / Total Objects (% used)4,844,377 / 5,356,201 (90.4%)4,953,534 / 5,161,116 (96.0%)
Active / Total Slabs (% used)147,909 / 147,909 (100.0%)137,482 / 137,482 (100.0%)
Active / Total Caches (% used)129 / 218 (59.2%)172 / 312 (55.1%)
Active / Total Size (% used)1,619,457.85K / 1,783,303.19K (90.8%)1,330,248.77K / 1,361,669.01K (97.7%)
Minimum / Average / Maximum Object0.01K / 0.33K / 16.00K0.01K / 0.26K / 16.00K

uptime の差は nomerge の方が少なく、84% ほどです。Total Slabs の差は merge が 147,909 に対して、nomerge は 137,482 で 92% ほどです。システムの稼働時間が少ないにも関わらず、総 SLAB 数が nomerge の方が多くなっています。

しかし、Total Size は nomerge の方が小さいです。

merge、nomerge の 2ケースで全く同じ操作をしていないので微妙ですが、nomerge を指定したからと言って SLAB の数が激増し、メモリーの使用量も増えてしまう、ということはなさそうです。

 

パフォーマンス面での数値は取っていませんが、デスクトップ用途として体感できるような差はありませんでした。

あまりメリットを感じられず、起動オプションに指定するのも面倒なので Linux Mint というか Ubuntu のデフォルト設定をそのまま使おうかと思います。