仮想ディスクにZFSデバイスファイルを使って性能アップ
これまで2回に渡ってFreeBSD 10で導入されたハイパーバイザbhyveの使い方を紹介してきました。今回は仮想ディスクにZFSデバイスファイルを使うことで仮想ディスクI/Oの性能を引き上げる方法を紹介します。
説明が重複するので、コマンドのオプションやネットワークインターフェースに関する説明は上記記事をご覧ください。今回はこれまでの内容を踏まえて作業内容と性能差について取り上げます。
ホスト側のセットアップ
ホスト側でbhyveを使うための設定を行います。システムを再起動しても有効にしておくために設定ファイルにも必要な設定を書き込んでおきます。
ここではtap0をホストのUFS上のファイルを仮想ディスクとした仮想環境(freebsd-10.2)、tap1をホストのZFSデバイスファイルを仮想ディスクとした仮想環境(freebsd-10.2-on-zfs)に割り当てています。
ゲスト環境の構築
FreeBSD 10.2-RELEASEのISOインストールイメージファイルを取得します。
ホストのUFS上のファイルを仮想ディスクとする場合のインストール方法はこれまでと同じです。
ホストのZFSデバイスファイルを仮想ディスクとして使う場合には、次のように環境をセットアップします。
truncate(1)コマンドでファイルを作成するのではなく、zfs(8)コマンドでデバイスファイルを作成しています。「z」がここで使っているプール名です。仮想ディスクとしてこのデバイスファイルと指定すると、このデバイスファイルが仮想ディスクとして使われるようになります。
bonnie++でベンチマーク
I/O性能を比較するためにbonnie++をインストールします。
bonnie++は性能の一つの側面を捉えるだけですので、あくまでも参考程度に考えて欲しいのですが、ある程度の特性といったものは見えてくるところがあります。
UFSとZFSの差をbonnie++の結果だけで考えるのはちょっとあれなのですが、参考程度にホストのUFSとZFSのbonnie++の結果も掲載しておきます。
ZFSデバイスファイルのほうが良い感じ
bonnie++の結果から、特にわかりやすい結果を比較すると次のようになります(ホストのUFS/ZFSは参考程度に)。
表1 bonnie++ベンチマーク結果比較(大きいほうがよい)
host UFS |
86112 |
41029 |
86736 |
143.6 |
host ZFS |
51994 |
48555 |
146090 |
310.8 |
guest UFS-virtdisk |
76708 |
33849 |
73333 |
499.9 |
guest ZFS-virtdisk |
89008 |
39636 |
87941 |
968.3 |
参考までにレイテンシーに関してまとめた表も掲載しておきます。こちらはmsとusの単位の結果が混在していますが、項目毎には同じ単位に揃えてあります。
表2 bonnie++ベンチマーク結果比較(レイテンシー/小さいほうがよい)
host UFS |
1850 |
2094 |
1384 |
219 |
18137 |
13 |
20 |
88359 |
10 |
20 |
host ZFS |
28525 |
1533 |
455 |
349 |
9705 |
140 |
299 |
13659 |
119 |
463 |
guest UFS-virtdisk |
1737 |
2056 |
1537 |
120 |
32708 |
54 |
64 |
23808 |
36 |
36 |
guest ZFS-virtdisk |
4053 |
999 |
1059 |
94 |
44222 |
44 |
856 |
28166 |
40 |
39 |
UFS仮想ディスクとZFS仮想ディスクでは、ZFS仮想ディスクのほうがよさげな結果が出ています。
無駄な処理をしないので速くなる
ホストのUFS上のファイルを仮想ディスクとする場合、bhyve上で動作しているゲストはホストのUFSの機能をスルッとそのまま利用することになります。UFS on UFS的な状況を考えてもらうと、その無駄感が見えてくるかと思います。
ホストのZFSデバイスファイルを仮想ディスクにすると、この無駄な部分を排除できます。ZFSの処理をスルッと利用するのでその部分は遅くなりますが、ファイルシステムとしての処理とかが入らなくなるのでUFSを通るのに比べると軽くなります。
実験していませんが、パーティションの状態で静的にディスクを分けておいて、それを指定して仮想ディスクとした場合にも、同じように性能の向上が確認できるのではないかと思います。それがどういった性能を示すかはやってみないとわかりませんけれども。でも、便利さを考えるとZFSを使ったほうが管理が簡単だと思います。
こうしたベンチマークの結果はホストの設定やゲストの設定、利用しているハードウェアにも結果が左右されますし、ベンチマークの結果が実際に求める性能になっているとは限りません。利用する状況に合わせて自ら性能を比較してみてください。