小さなメモリーを効率的に利用するための仕組みが 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_merge | slab_nomerge |
---|---|---|
uptime | 2 days, 3:07 | 1 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 Object | 0.01K / 0.33K / 16.00K | 0.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 のデフォルト設定をそのまま使おうかと思います。