特集
» 2008年06月27日 14時17分 公開

Linux Hacks:FUSE経由でZFSを使う (2/3)

[Ben-Martin,Open Tech Press]
SourceForge.JP Magazine

性能

 性能はVMWareサーバの仮想マシン内で試してみた。新規の仮想ディスクを作成して、ディスク内の8Gバイトの領域をあらかじめ割り当てた。仮想化を使用することがベンチマーク全体に対して影響を与えると考えられるが、FUSE経由でZFSを実行した場合に期待できる性能は、仮想マシン内でのZFSと仮想マシン内でのカーネル内ファイルシステムとの性能比からある程度の予測ができるはずだ。カーネル内のLinuxファイルシステムとしては、今回使用したBonnie++ベンチマークのような大規模ファイルについての性能が高いXFSを使用した。

 ZFSの設計は、ほとんどのLinuxファイルシステムとやや異なっている。ZFSでは、1つ以上のパーティーションがある状態でまずはZFSの「プール」を作成し、その後プールの中に必要な数のファイルシステムを作成する。今回はベンチマーク用として、8Gバイトの仮想ディスク上の単一のパーティーション内に単一のプールを作成し、そのプールの中に2つのZFSファイルシステムを作成した。一方XFSのベンチマークのためには、ZFSが使用していたパーティーションのZFSのデータをすべて消去した後、そのパーティーション上に直接XFSファイルシステムを作成した。

 以下にZFSファイルシステムの作成とベンチマークの様子を示す。まず始めにfdiskを使ってディスク全体を占めるパーティーション1つを新規に作成した。その後「zpool create」コマンドを使って新規のプールを作成し、前記で作成したパーティーションにそのプールを割り当てた。「-n」オプションをつければ、実際にはプールを作成せずにコマンドの結果をシミュレーションする。分かりやすくするためにその結果も以下に示した。その後zfsコマンドを使ってtank/testfsというZFSファイルシステムを作成すると、以下のように普通のdfコマンドを使って/tank/testfsとしてLinuxカーネルからアクセス可能な新しいファイルシステムができる。それからBonnieベンチマークを実行した。なおベンチマークは、初回の実行ゆえの何らかの悪影響を受けていない数値を得るために何度か実行した。


# fdisk /dev/sdd
...
Disk /dev/sdd: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
...
/dev/sdd1               1        1044     8385898+  83  Linux
...
# zfs-fuse
# zpool create -n tank /dev/sdd1
would create 'tank' with the following layout:
        tank
          sdd1
# zpool create    tank /dev/sdd1
# zpool list
NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
tank  7.94G  92.5K  7.94G     0%  ONLINE  -
# zfs create tank/testfs
# df -h /tank/testfs/
Filesystem            Size  Used Avail Use% Mounted on
tank/testfs           7.9G   18K  7.9G   1% /tank/testfs
$ cd /tank/testfs
$ /usr/sbin/bonnie++ -d `pwd`
...
$ /usr/sbin/bonnie++ -d `pwd`
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
linuxcomf8       4G 12373  24 14707  11 10604   8 33935  50 36985   3 109.0   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  2272  17  3657  20  2754  18  2534  15  3736  20  3061  20
linuxcomf8,4G,12373,24,14707,11,10604,8,33935,50,36985,3,109.0,0,16,2272,17,3657,20,2754,18,2534,15,3736,20,3061,20

 以下に、XFSファイルシステム上でBonnieベンチマークを実行した様子を示す。やはりベンチマークは複数回実行した。


# mkfs.xfs /dev/sdd1
meta-data=/dev/sdd1              isize=256    agcount=8, agsize=262059 blks
         =                       sectsz=512   attr=0
data     =                       bsize=4096   blocks=2096472, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=2560, version=1
         =                       sectsz=512   sunit=0 blks, lazy-count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mkdir /raw
# mount /dev/sdd1 /raw
$ cd /raw
$ /usr/sbin/bonnie++ -d `pwd`
...
$ /usr/sbin/bonnie++ -d `pwd`
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
linuxcomf8       4G 38681  65 34840   6 16528   6 18312  40 18585   5 365.8   2
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1250  26 +++++ +++  3032  39  2883  69 +++++ +++  3143  59
linuxcomf8,4G,38681,65,34840,6,16528,6,18312,40,18585,5,365.8,2,16,1250,26,+++++,+++,3032,39,2883,69,+++++,+++,3143,59

 ベンチマーク結果から分かるように、FUSE経由でZFSを使った場合、出力操作についてはXFSの30〜60%の性能しか得られないようだ。一方、キャラクタ入力とブロック入力についてのテストでは、FUSEが行うキャッシュの効果によってzfs-fuseの性能の方がXFSよりも顕著に優れていた。つまり実用上の観点から言えば、書き込みよりも読み取りを多く行うファイルシステムの場合には、FUSE経由でZFSを使用することによる速度的なマイナスはないということだ。またzfs-fuseでの書き込み操作の性能がカーネル内ファイルシステムと比べたときに劣るとは言っても、システムが使用に耐えないというほどではない。ただし例のごとく、期待通りの性能を得られるかどうかについては、各自の使用目的についてのベンチマークを行って確かめるべきだろう。

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ