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の仕様。
参考
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が変わってます。ただし、これは一時的なもので再起動すれば元に戻ります。永続化させる最もシンプル(かつ雑)な方法として、スタートアップスクリプトにしてしまう方法があります。
フォーラムでもそういう解決策だったので、そうしました。
コメント