筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2014-05-19 L2ARC
■ 今さらながら ZFS 環境に SSD を足して L2ARC を使ってみる
特に技術的に目新しいものではないです。5年遅い。メモリを限界まで増設していてこれ以上足せないというケースでもなければ、この記事の最後の Togetter まとめを読んでメモリを足したほうがいいです。
普段使いで使用している ZFS な FreeBSD 環境も年季が入ってきて、遅くはないものの速くもなく、IO がボトルネックになっているのを感じるので SSD を足して L2ARC として使用してみました。
特に /usr/ports が比較的大きな git リポジトリ になっていて、そこに git pull したり tig でリポジトリをオープンするとディスクアクセスでかなり待たされる状態になっていました。
本来なら ZFS パフォーマンスにいちばん効くのはメインメモリの増設ですが、既に限界の 8GiB まで増設していてこれ以上の強化となるとプラットフォームごと刷新しなければならないので、とりあえず SSD を足して L2ARC として使用します。メモリが 8GiB しかないため、ARC サイズは 1GB に制限して運用していました。
L2ARC 以外にも ZIL を SSD に乗せると同期書き込みが速くなるのですが、SSD の寿命が尽きた場合にデータの不整合や破損が発生するのは避けたいため、今回は見送り。個人用途なので、SSD の寿命が尽きたときに停止してしまうのは許容します。
元の環境はこんな感じ。
- CPU
- Intel(R) Core(TM)2 CPU 6700 @ 2.66GHz (2664.05-MHz K8-class CPU)
- メインメモリ
- 8GiB (MAX)
- チップセット
- Intel G965
- OS
- FreeBSD 10-STABLE r266177
- HDD
- Seagate Barracuda 7200.14 ST2000DM001
SSD は TS64GSSD340 を購入しました。キャッシュ用途と割りきっての導入なので小さめですが、もっと大きなものにしてもよかったかも。
- Transcend SSD 2.5インチ SATA3 6Gb/s MLC採用 128GB 3年保証 TS128GSSD340
- Transcend SSD 2.5インチ SATA3 6Gb/s MLC採用 256GB 3年保証 TS256GSSD340
- Transcend SSD 2.5インチ SATA3 6Gb/s 512GB 3年保証 TS512GSSD320
増設した SSD は /dev/ada1 として認識されているので以下のようにして L2ARC を追加します。
# gpart create /dev/ada1 # gpart add -a 4k -s 20G -t freebsd-zfs -l l2arc0 ada1 # gpart add -a 4k -s 20G -t freebsd-swap ada1 # zpool add zroot cache gpt/l2arc0
作業後のハードディスクと SSD のパーティション構成は下記の通り。
$ gpart show => 34 3907029101 ada0 GPT (1.8T) 34 6 - free - (3.0K) 40 128 1 freebsd-boot (64K) 168 16777216 2 freebsd-swap (8.0G) 16777384 3890251744 3 freebsd-zfs (1.8T) 3907029128 7 - free - (3.5K) => 34 125045357 ada1 GPT (60G) 34 6 - free - (3.0K) 40 41943040 1 freebsd-zfs (20G) 41943080 16777216 2 freebsd-swap (8.0G) 58720296 66325095 - free - (32G)
SSD は完全にキャッシュ用途として割り切っているので、ついでにスワップも SSD に載せてしまいます。
# swapon /dev/ada1p2 # swapoff /dev/ada0p2
% swapinfo Device 1K-blocks Used Avail Capacity /dev/ada1p2 8388608 0 8388608 0%
スワップデバイスを変更したので /etc/fstab も書き換えます。
#/dev/ada0p2 none swap sw 0 0 /dev/ada1p2 none swap sw 0 0
再起動して ARC/L2ARC をクリアしてから、しばらく普通に使ってみて zfs-stats で L2ARC の様子を見てみると、
------------------------------------------------------------------------ ZFS Subsystem Report Tue May 20 00:52:15 2014 ------------------------------------------------------------------------ L2 ARC Summary: (HEALTHY) Passed Headroom: 27.89k Tried Lock Failures: 18.59k IO In Progress: 20.44k Low Memory Aborts: 0 Free on Write: 1.05k Writes While Full: 85 R/W Clashes: 22 Bad Checksums: 0 IO Errors: 0 SPA Mismatch: 0 L2 ARC Size: (Adaptive) 5.19 GiB Header Size: 0.85% 45.29 MiB L2 ARC Breakdown: 1.00m Hit Ratio: 47.21% 473.82k Miss Ratio: 52.79% 529.77k Feeds: 12.80k L2 ARC Buffer: Bytes Scanned: 6.51 TiB Buffer Iterations: 12.80k List Iterations: 818.65k NULL List Iterations: 133.00k L2 ARC Writes: Writes Sent: (FAULTED) 6.59k Done Ratio: 99.98% 6.59k Error Ratio: 0.00% 0 ------------------------------------------------------------------------
うん、効いてる気がする。キャッシュヒット率も 47% くらいらしい。キャッシュに乗っている間は
$ cd /usr/ports; tig
で tig を起動するのも少し速くなりました。めんどくさいので前後で比較もしません。いい加減に L2ARC を追加してみたけどとりあえずコレでOK!
参考
L2ARC については ftp.jaist.ac.jp の中の藤枝さんの記事が詳しい。
あとこれ。メモリを足せるならメモリを足したほうが速いです。今回は古い環境のために試しに SSD L2ARC を追加してみました。あまり本気でカリカリにチューニングする気もないので、5000円の費用でどう改善できるかなとやってみた結果です。