テクニカルコラム:かんたん♪ ZFS:第十二回:圧縮機能
これからZFSを勉強しようという方に好評な標記コラムの13号が発行されましたので、お伝えします。なお、バックナンバーは以下をご覧ください。
http://www.cmsinc.co.jp/mm/mailmagazine/nexenta_index.html
◆◆>[ テクニカルコラム:かんたん♪ ZFS ]<◆◆◆◆◆◆◆◆◆◆◆◆
第十二回:圧縮機能
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
こんにちは。本年もよろしくお願いいたします。今年はいつもの年より寒
いようです。今までの経験では、夏が暑いと冬は寒さが厳しい。逆に冷夏
だと暖冬ということが多いように思います。みなさんも風邪などひかない
ようお気をつけください。
このコラムでは実際に ZFS を使う上で役に立つ Tips を紹介します。
今までのファイルシステムとは一味違う ZFS を活用して面倒なファイル
管理の苦労を減らしましょう!
-------------------------------------------------------------------
パフォーマンス改善を行う時、負荷に対して処理能力を持て余している部
分を補強してもほとんど改善は望めません。一方、処理能力を目一杯使っ
ている部分を補強すると、大きな改善を期待することができます。
今回は ZFS の圧縮機能について説明します。処理性能がディスク I/O 律
速で CPU リソースに余裕がある場合は、 圧縮機能を適用することにより
性能を改善できる可能性があります。
理想的な条件で圧縮機能の効果を確認してみましょう。同じストレージプー
ル上に作成した二つの ZFS ファイルシステムについて、 一方は圧縮機能
を使用、もう一方は圧縮機能を使用しないよう設定します。そして搭載さ
れた物理メモリよりも十分に大きなサイズのファイルをシーケンシャルに
書き込みます。
■ 圧縮機能 : ON
# zfs set compression=on t/compress/
# dd if=/dev/zero of=/t/compress/data bs=128k count=131072
131072+0 records in
131072+0 records out
17179869184 bytes (17 GB) copied, 8.08684 seconds, 2.1 GB/s
---------------------------
CPU syscl usr sys wt idl
0 1658 0 38 0 62
1 9637 0 53 0 46
2 2113 0 38 0 62
3 1101 0 40 0 60
4 4918 0 44 0 56
5 8331 0 53 0 46
6 4061 0 42 0 58
7 2006 0 37 0 62
■ 圧縮機能 : OFF
# zfs set compression=off t/nocompress/
# dd if=/dev/zero of=/t/nocompress/data bs=128k count=131072
131072+0 records in
131072+0 records out
17179869184 bytes (17 GB) copied, 38.5033 seconds, 446 MB/s
---------------------------
CPU syscl usr sys wt idl
0 1480 3 9 0 87
1 4372 3 18 0 80
2 2283 3 10 0 87
3 1847 2 15 0 83
4 1218 2 10 0 88
5 1053 0 15 0 85
6 2400 1 13 0 86
7 469 1 8 0 90
試験には物理プロセッサ Intel(r) Xeon(r) CPU E5620 が一台搭載された
マシンを使用しました。物理メモリは 2 [GB] 搭載されています。
結果、圧縮機能を使用すると 2.1 [GB/s]、しない場合は、446 [MB/s] の
スループットとなりました。 446 [MB/s] は試験に使用したストレージ装
置の物理的な性能と見なすことができます。圧縮機能を使用するとディス
ク装置への I/O 負荷が少なくなり、アプリケーション (dd コマンド) か
ら見た性能が大きく向上しています。
圧縮機能を使用すると CPU 負荷が高くなるので注意してください。 この
テストでは、8 コアとも使用率が 40 ~ 50 % 程度に上がりました。圧縮
機能を使用しない場合は 10 ~ 20 % 程度です。 結果では sys の部分の
使用率が上がっています。 これは圧縮処理が ZFS I/O 処理 (カーネル空
間) で行われているからです。この部分はパイプライン化されており、圧
縮のように純粋に CPU に依存する処理は複数のコアに負荷が分散します。
iostat で確認し、ディスク I/O が限界性能に達していない場合は CPU
のコア数を増やすことによりさらなる性能向上が期待できます。
圧縮機能はこのテストのようにストリーム型のシーケンシャルアクセスが
多い場合に有効です。一方でランダムアクセスが多い OLTP へ適用しても
効果が少ないという報告もあります。
圧縮アルゴリズムは lzjb と gzip を選択することができます。単に on
と指定すると lzjb が使用されます。
# zfs set compression=gzip t/compress/
とすると gzip (圧縮レベル 6) が使用されます。
# zfs set compression=gzip-9 t/compress/
とすると gzip (圧縮レベル 9) が使用されます。gzip の方が圧縮率は高
いのですが、その分 CPU 負荷が高くなります。
圧縮機能使用する場合は、事前に検証を行い。十分に効果が期待できるこ
とを確認した上で使用してください。
今回のコラムでは、ZFS の圧縮機能を紹介させていただきました。
(つづく)
■ 参考文献
(1) BigAdmin: ZFS ソースツアー
http://www.sun.com/bigadmin/hubs/multilingual/japanese/content/zfs-source.jsp
(2) The Blog of Ben Rockwood
http://www.cuddletech.com/blog/pivot/entry.php?id=983
(3) ZFS でデータ圧縮
http://blogs.sun.com/yappri/entry/zfs_compression
(高田 浩生)
***