プールで使用するsdbからsdiまでの8つの3TB Western Digital Red SATAドライブがあります。
私のブートおよびOSドライブは、sda上の850 EVO SSDです。
8個のWDドライブは、Supermicro AOC-SAS2LP-MV8アドオンカード、Supermicro ATXでx8で実行されるPCIE 3.0 x16のチャネルあたり600µMbyte/sの8チャネルSAS/SATAアダプタ上にあります。 DDR4 LGA 1151 C7Z170-OCE-Oマザーボード。
サーバーとZFSのセットアップは次のとおりです。
[root@nas ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@nas ~]# uname -a
Linux nas.whittenberg.domain 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@nas ~]# cat /var/log/dmesg | grep ZFS
[ 0.793572] ZFS: Loaded module v0.6.5.7-1, ZFS pool version 5000, ZFS filesystem version 5
[root@nas ~]# cat /var/log/dmesg | grep SPL
[ 0.777144] SPL: Loaded module v0.6.5.7-1
[root@nas ~]# cat /etc/modprobe.d/zfs.conf
# disable prefetch = 1
options zfs zfs_prefetch_disable=0
# set arc max to 48GB. I have 64GB in my server
options zfs zfs_arc_max=51539607552
# set size to 128k same as file system block size
options zfs zfs_vdev_cache_size=1310720
options zfs zfs_vdev_cache_max=1310720
options zfs zfs_read_chunk_size=1310720
options zfs zfs_vdev_cache_bshift=12
options zfs zfs_read_chunk_size=1310720
# Set thes to 10 so we get better IO at cost of banwidth
options zfs zfs_vdev_async_read_max_active=10
options zfs zfs_vdev_async_read_min_active=10
options zfs zfs_vdev_async_write_max_active=10
options zfs zfs_vdev_async_write_min_active=10
options zfs zfs_vdev_sync_read_max_active=10
options zfs zfs_vdev_sync_read_min_active=10
options zfs zfs_vdev_sync_write_max_active=10
options zfs zfs_vdev_sync_write_min_active=10
[root@nas ~]# zpool status
pool: myraid
state: ONLINE
scan: scrub repaired 0 in 0h16m with 0 errors on Sun Aug 7 01:40:49 2016
config:
NAME STATE READ WRITE CKSUM
myraid ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
mirror-3 ONLINE 0 0 0
sdh ONLINE 0 0 0
sdi ONLINE 0 0 0
errors: No known data errors
[root@nas ~]# zpool iostat -v
capacity operations bandwidth
pool alloc free read write read write
---------- ----- ----- ----- ----- ----- -----
myraid 382G 10.5T 119 35 14.0M 606K
mirror 95.5G 2.63T 29 8 3.49M 149K
sdb - - 28 8 3.50M 153K
sdc - - 28 8 3.50M 153K
mirror 95.5G 2.63T 29 8 3.49M 151K
sdd - - 28 8 3.50M 155K
sde - - 28 8 3.50M 155K
mirror 95.5G 2.63T 29 8 3.49M 152K
sdf - - 28 8 3.50M 156K
sdg - - 28 8 3.50M 156K
mirror 95.5G 2.63T 29 9 3.49M 155K
sdh - - 28 9 3.50M 159K
sdi - - 28 9 3.50M 159K
---------- ----- ----- ----- ----- ----- -----
[root@nas ~]# zfs get all
NAME PROPERTY VALUE SOURCE
myraid type filesystem -
myraid creation Sat Aug 6 21:01 2016 -
myraid used 382G -
myraid available 10.2T -
myraid referenced 382G -
myraid compressratio 1.05x -
myraid mounted yes -
myraid quota none default
myraid reservation none default
myraid recordsize 128K local
myraid mountpoint /myraid default
myraid sharenfs off default
myraid checksum fletcher4 local
myraid compression lz4 local
myraid atime off local
myraid devices on default
myraid exec on default
myraid setuid on default
myraid readonly off default
myraid zoned off default
myraid snapdir hidden default
myraid aclinherit restricted default
myraid canmount on default
myraid xattr on default
myraid copies 1 default
myraid version 5 -
myraid utf8only off -
myraid normalization none -
myraid casesensitivity sensitive -
myraid vscan off default
myraid nbmand off default
myraid sharesmb off default
myraid refquota none default
myraid refreservation none default
myraid primarycache all local
myraid secondarycache all default
myraid usedbysnapshots 0 -
myraid usedbydataset 382G -
myraid usedbychildren 1.98M -
myraid usedbyrefreservation 0 -
myraid logbias latency local
myraid dedup off local
myraid mlslabel none default
myraid sync disabled local
myraid refcompressratio 1.05x -
myraid written 382G -
myraid logicalused 403G -
myraid logicalreferenced 403G -
myraid filesystem_limit none default
myraid snapshot_limit none default
myraid filesystem_count none default
myraid snapshot_count none default
myraid snapdev hidden default
myraid acltype off default
myraid context none default
myraid fscontext none default
myraid defcontext none default
myraid rootcontext none default
myraid relatime off default
myraid redundant_metadata all default
myraid overlay off default
[root@nas ~]# zpool get all
NAME PROPERTY VALUE SOURCE
myraid size 10.9T -
myraid capacity 3% -
myraid altroot - default
myraid health ONLINE -
myraid guid 1068639342092444414 default
myraid version - default
myraid bootfs - default
myraid delegation on default
myraid autoreplace off default
myraid cachefile - default
myraid failmode wait default
myraid listsnapshots off default
myraid autoexpand off default
myraid dedupditto 0 default
myraid dedupratio 1.00x -
myraid free 10.5T -
myraid allocated 382G -
myraid readonly off -
myraid ashift 0 default
myraid comment - default
myraid expandsize - -
myraid freeing 0 default
myraid fragmentation 1% -
myraid leaked 0 default
myraid feature@async_destroy enabled local
myraid feature@empty_bpobj enabled local
myraid feature@lz4_compress active local
myraid feature@spacemap_histogram active local
myraid feature@enabled_txg active local
myraid feature@hole_birth active local
myraid feature@extensible_dataset enabled local
myraid feature@embedded_data active local
myraid feature@bookmarks enabled local
myraid feature@filesystem_limits enabled local
myraid feature@large_blocks enabled local
[root@nas ~]# zdb | grep ashift
ashift: 12
ashift: 12
ashift: 12
ashift: 12
[root@nas ~]# lsblk -t -e 11,1
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME
sda 0 512 0 512 512 0 cfq 128 128 0B
+-sda1 0 512 0 512 512 0 cfq 128 128 0B
+-sda2 0 512 0 512 512 0 cfq 128 128 0B
+-sda3 0 512 0 512 512 0 cfq 128 128 0B
+-centos_nas-swap 0 512 0 512 512 0 128 128 0B
+-centos_nas-root 0 512 0 512 512 0 128 128 0B
+-centos_nas-home 0 512 0 512 512 0 128 128 0B
sdb 0 4096 0 4096 512 1 noop 128 128 0B
+-sdb1 0 4096 0 4096 512 1 noop 128 128 0B
+-sdb9 0 4096 0 4096 512 1 noop 128 128 0B
sdc 0 4096 0 4096 512 1 noop 128 128 0B
+-sdc1 0 4096 0 4096 512 1 noop 128 128 0B
+-sdc9 0 4096 0 4096 512 1 noop 128 128 0B
sdd 0 4096 0 4096 512 1 noop 128 128 0B
+-sdd1 0 4096 0 4096 512 1 noop 128 128 0B
+-sdd9 0 4096 0 4096 512 1 noop 128 128 0B
sde 0 4096 0 4096 512 1 noop 128 128 0B
+-sde1 0 4096 0 4096 512 1 noop 128 128 0B
+-sde9 0 4096 0 4096 512 1 noop 128 128 0B
sdf 0 4096 0 4096 512 1 noop 128 128 0B
+-sdf1 0 4096 0 4096 512 1 noop 128 128 0B
+-sdf9 0 4096 0 4096 512 1 noop 128 128 0B
sdg 0 4096 0 4096 512 1 noop 128 128 0B
+-sdg1 0 4096 0 4096 512 1 noop 128 128 0B
+-sdg9 0 4096 0 4096 512 1 noop 128 128 0B
sdh 0 4096 0 4096 512 1 noop 128 128 0B
+-sdh1 0 4096 0 4096 512 1 noop 128 128 0B
+-sdh9 0 4096 0 4096 512 1 noop 128 128 0B
sdi 0 4096 0 4096 512 1 noop 128 128 0B
+-sdi1 0 4096 0 4096 512 1 noop 128 128 0B
+-sdi9 0 4096 0 4096 512 1 noop 128 128 0B
私の問題は、10Gbit/s接続(DAC PCからサーバー)で初めてファイルを読み込むとき、またはプールからサーバーのSSDにrsync
を使用すると、100Mバイトをわずかに超えることです。/s。同じファイルを2回目に読み込むと、10µGbit/s DAC接続で1.2µGbyte/sを、プールからSSDに380µMbyte/sを取得します。
サーバーを再起動して、プールからSSDへのテスト読み取りを実行します。
[root@nas ~]# rsync -h --progress /myraid/testmovie.avi /home/samba/testmovie.avi
testmovie.avi
1.08G 100% 79.59MB/s 0:00:12 (xfer#1, to-check=0/1)
sent 1.08G bytes received 31 bytes 80.21M bytes/sec
total size is 1.08G speedup is 1.00
その後、一度読んだ後も同じことをします。
[root@nas ~]# rsync -h --progress /myraid/testmovie.avi /home/samba/testmovie.avi
testmovie.avi
1.08G 100% 394.54MB/s 0:00:02 (xfer#1, to-check=0/1)
sent 1.08G bytes received 31 bytes 433.13M bytes/sec
total size is 1.08G speedup is 1.00
ポインタはありますか?最初の読み取りで4つのドライブの読み取り速度を取得する必要はありませんか?
非常に理論的な世界では、プール構成(4つのvdev、それぞれ2つのディスクミラー)から、1つのディスクの速度の8倍に相当する読み取り帯域幅が期待できます。理由は:
Western Digital 3µTB Redドライブは140µMB/s以上で読み取ることができると主張しています。少なくとも常にそうではありません。これらのドライブの1つから100µMB/sを取得できると仮定しましょう。これらをプール構成で組み合わせると、理論的に最大800µMB/sの読み取り帯域幅を取得できます。
さて、はっきりさせてください:800 MB/s、それはおそらく起こらないでしょう!ZFSがあなたにあるからではなく、その帯域幅の計算のためハードウェアが邪魔になっていないという仮定に基づいています。ただし、実際のワークロードでは理論上の速度が得られません。
もちろん、多くのディスクを1つの大きなプールに組み合わせることで、ある程度のパフォーマンスの改善が期待されることは理解しています。
テストを見てみましょう: rsync で大きなファイルを最初にコピーすると80 MB/sになり、同じことを2回目にすると400 MB/sになります。違いの説明は Adaptive Replacement Cache (ARC)であり、すでに知っていると思います。完全を期すために言っておきます。
ZFS ARCは、頻繁にアクセスされるデータをRAMに保存するメカニズムを提供します。
ZFSデータセットから初めてファイルを読み取るとき、ZFSは実際にディスクからデータを読み取る必要があります。それまでは、読み取りキャッシュにデータを取り込みます。 2回目の同じファイルの読み取りでは、RAMから直接データを取得します。システムには、1.08GBの完全なファイルを保持するのに十分な容量があると言いました。これは、rsync(400µMB/s)を使用してファイルを再度コピーするときに表示される速度は、ZFSプールの物理ディスクとは関係がないことを意味します。 SSDsda
ドライブの書き込み速度と考えることができます。正確に言うと、SSDのraw書き込み速度ではありません。rsyncを使用して、非常に低遅延で高帯域幅のメディア(RAMメモリ)からデータを読み取り、SSDドライブに書き込むときの速度です。 (これも非常に低いレイテンシを持っています)。さらに、Linuxはおそらく、利用可能なRAMメモリをすべて使用して、SSDドライブパーティションへの非同期書き込みをキャッシュすることを考慮すべきだと思います(ここでは想定しています!)。
したがって、この時点で、問題が発生します:RAMからSSDへの書き込み速度が400 MB/sのように見える場合、なぜZFSが実際にディスクから読み込んでいるときは80MB/sですか?それは単一のディスク速度よりも遅いです!明らかに、SSD自体を非難することはできず、ZFSプール内のすべてのドライブからさらに多くのものを期待していました!
正直に言うと、完全な答えはありません。私がこれまでに言ったことすべてを検討した後、あなたの質問に対する私の部分的な答えはです:
dd
またはcp
だけでも、順次読み取り/書き込みテストのより適切な選択肢になる可能性があります。インスピレーションについては この記事 をご覧ください。まとめるには:ボトルネックがどこにあるかを系統的に調べる必要があります。 ZFS自体だと思い込まないでください。おそらくそうではありません。さまざまな構成を試して、ジョブに適したツールを使用してテストを実行します。
私はベンチマークやテストの専門家ではないので、その点についてアドバイスはしません。インターネットには、このトピックに関するすばらしい資料がたくさんあります。 ZFSに固有のいくつかの側面に触れたいと思います。