ZFSのARCサイズを変更する

スポンサーリンク

TrueNAS ScaleでARCがメモリを使い切ってくれないことに気づき、自力でサイズ変更したときのメモ。

TrueNAS ScaleのARCサイズのデフォルトは物理メモリの50%

TrueNASは、フリーのNAS用OSだが、「TrueNAS Core」と「TrueNAS Scale」という2種類に分岐している。歴史的にはCoreのほうが長く、そこからScaleが分岐して生まれた形。大きな違いは、ベースOS。TrueNAS CoreのベースOSはFreeBSDなのに対し、TrueNAS ScaleのベースOSはLinux。どっちかというとFreeBSDのほうが堅牢(と言われれているが実際のところどうなんですかね)なのと、ファイルシステムZFSはもともとFreeBSDにしかなく、後からLinuxに移植されたという歴史上、TrueNASはFreeBSDを採用していた。だが、なんだかんだ言ってLinuxのほうが使い勝手いいよね。ということでLinux移植版としてTrueNAS Scaleが生まれた感じ。ついでにPodmanコンテナが使えるようになって便利にもなった。

そんな2種類のTrueNASであるが、デフォルトのARCサイズはLinuxとFreeBSDで異なっているらしい。これはOpenZFSの仕様。

参考

Module Parameters — OpenZFS documentation
ARC size on Linux smaller by default - tuning zfs_arc_max?
Default ARC sizes are different on Linux and FreeBSD: and Tuning/Module Parameters.html#zfs-arc-max Linux: 1/2 of system...

Linux: システムメモリの1/2
FreeBSD: all_system_memory – 1GB と 5/8 × all_system_memory の大きい方

という違いがあり、Linuxはメモリの二分の一がARCのデフォルト値。システムの安定性を重視して、ということだそうだが、ちょっと、小さすぎない?仮に128GBメモリを積んだとして、64GBも余らせてどうする?という感じですよね。私が今TrueNAS Scaleをインストールしているマシンは物理メモリ16GBなので、8GBくらいしか使ってくれていません。

解決策としては、手動でzfs_arc_maxを上書きすること。

まず、現在のARCサイズを確認する

grep c_max /proc/spl/kstat/zfs/arcstats

するとこんな出力がされる

c_max                           4    8319774720

つまり、ARCサイズの上限値は8319774720バイトということ。もう少し見やすい方法として、以下のコマンドでもよい

arc_summary | grep size

私の場合、以下のような出力だった(抜粋)

ARC size (current):                                   100.0 %    7.8 GiB
        Target size (adaptive):                       100.0 %    7.7 GiB
        Min size (hard limit):                          6.2 %  495.9 MiB
        Max size (high water):                           16:1    7.7 GiB

Max sizeが7.7GiB。物理メモリが15.5GiBなので、もうちょっと増やしたい。ARCサイズ上限値は、「/sys/module/zfs/parameters/zfs_arc_max」というファイルに対して、バイト単位で書き込むことで上書きできる。

storage@carbon ~ % cat /sys/module/zfs/parameters/zfs_arc_max
0

でも、デフォルトの場合は中身は0みたい。とにかく、このファイルを上書きする。

echo 12879774720 > /sys/module/zfs/parameters/zfs_arc_max

12GiBくらい使ってほしかったのでこのくらいにしました。ちなみにroot必須。

その後、arc_summary | grep sizeすると

root@carbon[~]# arc_summary | grep size
ARC size (current):                                     3.9 %  476.3 MiB
        Target size (adaptive):                         4.2 %  511.8 MiB
        Min size (hard limit):                          4.0 %  495.9 MiB
        Max size (high water):                           24:1   12.0 GiB

となりました。無事Max sizeが変わってます。ただし、これは一時的なもので再起動すれば元に戻ります。永続化させる最もシンプル(かつ雑)な方法として、スタートアップスクリプトにしてしまう方法があります。

TrueNAS Scaleのスタートアップスクリプトの設定パネル

フォーラムでもそういう解決策だったので、そうしました。

ARC size on Linux smaller by default - tuning zfs_arc_max?
Default ARC sizes are different on Linux and FreeBSD: and Tuning/Module Parameters.html#zfs-arc-max Linux: 1/2 of system...

コメント

タイトルとURLをコピーしました