ZFS へのメモリの割り当ての優先度は ufs/nfs のファイルキャッシュよりも低い2019年09月23日 12時55分52秒

以前から、ZFS のメモリ割り当ては、他のファイルシステムとは別になっていて、あれこれとパフォーマンスに影響が出てくるのは、周知の事実。ZFS は自前でキャッシュをしたり、あれこれとレイヤーを実装しているので、FreeBSD の unified cache とは、切り離されている為に、相性がいまいち。

ZFS のみで使う。UFS や NFS の利用領域には限定的にする必要がある。UFS や NFS から読み出す度に、ファイルキャッシュが作成されて、inactive が増える一方 ZFS に割り当てられるメモリが減っていってしまう。

今回、パフォーマンスを殺す典型的な構成をつくってしまった。

外付けディスクに入っているファイルを移動したかったが、物理的な接続口が足りないので NFS を利用することにした。NFS サーバ側にあるファイルを ZFS 側に移す。なお ZFS を使った側は i386 で 512MB の機械と 1GB の機械を使った。最初は、512 MB のメモリでやったのが原因だと思ったので、1GB に変えてみたが、結果は同じだった。

実は、ZFS 側に移すときに二つにしたかったので、cp を行った。最初は、ZFS もあるだけのメモリを使ってディスクの書き込みスピードで書き込んでいたが、cp がどんどん NFS のファイルキャッシュを積んでいく。それに伴って ZFS のメモリが減っていく。最終的には、ZFS は 20MB から 30MB ぐらいで全て処理をするまでになってしまった。

困ったので、次のファイルの組は mv で行う。 mv を使うとファイルが一つ移動し終る度に、元のファイルが削除される。それに伴って、ファイルキャッシュも破棄される。その為、ファイルがメモリを圧迫しない程度の大きさだと ZFS のメモリも最小限まで減らされることはなかった。