大量の財務データのダウンロードと処理を担当しています。取引日ごとに、約100GBを追加する必要があります。
この量のデータを処理するために、大学のデータセンターから仮想サーバー(3コア、12 GBのRAM)と30台のTBブロックデバイス)を借りています。
仮想マシンで、LinuxにUbuntu 16.04とZFSをインストールしました。次に、30TBのブロックデバイスにZFSプールを作成しました。 ZFSを使用する主な理由は、データが適切に圧縮できるため(約10%)、圧縮機能です。 ZFSがベアメタルを表示することを望んでいるというゴールデンルールに従わないために、私をそれほど厳しくしないでください。インフラストラクチャをそのまま使用することを強制されます。
投稿の理由は、書き込み速度が遅いという問題に直面しているためです。サーバーはブロックデバイスから約50 MB /秒でデータを読み取ることができますが、データの書き込みは約2〜4 MB /秒で非常に遅くなります。
以下は、プールとデータセットに関する情報です。
zdb
tank:
version: 5000
name: 'tank'
state: 0
txg: 872307
pool_guid: 8319810251081423408
errata: 0
hostname: 'TAQ-Server'
vdev_children: 1
vdev_tree:
type: 'root'
id: 0
guid: 8319810251081423408
children[0]:
type: 'disk'
id: 0
guid: 13934768780705769781
path: '/dev/disk/by-id/scsi-3600140519581e55ec004cbb80c32784d-part1'
phys_path: '/iscsi/[email protected]%3Asn.606f4c46fd740001,0:a'
whole_disk: 1
metaslab_array: 30
metaslab_shift: 38
ashift: 9
asize: 34909494181888
is_log: 0
DTL: 126
create_txg: 4
features_for_read:
com.delphix:hole_birth
com.delphix:embedded_data
zpool get all
NAME PROPERTY VALUE SOURCE
tank size 31,8T -
tank capacity 33% -
tank altroot - default
tank health ONLINE -
tank guid 8319810251081423408 default
tank version - default
tank bootfs - default
tank delegation on default
tank autoreplace off default
tank cachefile - default
tank failmode wait default
tank listsnapshots off default
tank autoexpand off default
tank dedupditto 0 default
tank dedupratio 1.00x -
tank free 21,1T -
tank allocated 10,6T -
tank readonly off -
tank ashift 0 default
tank comment - default
tank expandsize 255G -
tank freeing 0 default
tank fragmentation 12% -
tank leaked 0 default
tank feature@async_destroy enabled local
tank feature@empty_bpobj active local
tank feature@lz4_compress active local
tank feature@spacemap_histogram active local
tank feature@enabled_txg active local
tank feature@hole_birth active local
tank feature@extensible_dataset enabled local
tank feature@embedded_data active local
tank feature@bookmarks enabled local
tank feature@filesystem_limits enabled local
tank feature@large_blocks enabled local
zfs get all tank/test
NAME PROPERTY VALUE SOURCE
tank/test type filesystem -
tank/test creation Do Jul 21 10:04 2016 -
tank/test used 19K -
tank/test available 17,0T -
tank/test referenced 19K -
tank/test compressratio 1.00x -
tank/test mounted yes -
tank/test quota none default
tank/test reservation none default
tank/test recordsize 128K default
tank/test mountpoint /tank/test inherited from tank
tank/test sharenfs off default
tank/test checksum on default
tank/test compression off default
tank/test atime off local
tank/test devices on default
tank/test exec on default
tank/test setuid on default
tank/test readonly off default
tank/test zoned off default
tank/test snapdir hidden default
tank/test aclinherit restricted default
tank/test canmount on default
tank/test xattr on default
tank/test copies 1 default
tank/test version 5 -
tank/test utf8only off -
tank/test normalization none -
tank/test casesensitivity mixed -
tank/test vscan off default
tank/test nbmand off default
tank/test sharesmb off default
tank/test refquota none default
tank/test refreservation none default
tank/test primarycache all default
tank/test secondarycache all default
tank/test usedbysnapshots 0 -
tank/test usedbydataset 19K -
tank/test usedbychildren 0 -
tank/test usedbyrefreservation 0 -
tank/test logbias latency default
tank/test dedup off default
tank/test mlslabel none default
tank/test sync disabled local
tank/test refcompressratio 1.00x -
tank/test written 19K -
tank/test logicalused 9,50K -
tank/test logicalreferenced 9,50K -
tank/test filesystem_limit none default
tank/test snapshot_limit none default
tank/test filesystem_count none default
tank/test snapshot_count none default
tank/test snapdev hidden default
tank/test acltype off default
tank/test context none default
tank/test fscontext none default
tank/test defcontext none default
tank/test rootcontext none default
tank/test relatime off default
tank/test redundant_metadata all default
tank/test overlay off default
tank/test com.Sun:auto-snapshot true inherited from tank
書き込み速度を向上させるために何ができるか、ヒントを教えていただけますか?
更新1
ストレージシステムについてのコメントの後、私はIT部門に行きました。男は、vdevがエクスポートする論理ブロックは実際には512 Bであると私に言った。
これはdmesg
の出力です:
[ 8.948835] sd 3:0:0:0: [sdb] 68717412272 512-byte logical blocks: (35.2 TB/32.0 TiB)
[ 8.948839] sd 3:0:0:0: [sdb] 4096-byte physical blocks
[ 8.950145] sd 3:0:0:0: [sdb] Write Protect is off
[ 8.950149] sd 3:0:0:0: [sdb] Mode Sense: 43 00 10 08
[ 8.950731] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, supports DPO and FUA
[ 8.985168] sdb: sdb1 sdb9
[ 8.987957] sd 3:0:0:0: [sdb] Attached SCSI disk
512 B論理ブロックが4096 B物理ブロック?!
データをバックアップできる一時的なファイルシステムを提供します。次に、プールを最初からセットアップする前に、最初にrawデバイスの速度をテストします。更新を送信します。
更新2
元のプールを破壊しました。次に、dd
を使用していくつかの速度テストを実行しました。結果は問題ありません。両方向で約80MB /秒です。
さらにチェックとして、デバイスにext4パーティションを作成しました。大きなZipファイルをこのext4パーティションにコピーしました。平均書き込み速度は約40MB /秒です。すばらしいとは言えませんが、私の目的には十分です。
次のコマンドを使用して新しいストレージプールを作成しました
zpool create -o ashift=12 tank /dev/disk/by-id/scsi-3600140519581e55ec004cbb80c32784d
zfs set compression=on tank
zfs set atime=off tank
zfs create tank/test
次に、新しく作成したtest
ファイルシステムにZipファイルを再度コピーしました。書き込み速度は低く、約2〜5 MB /秒です。
何か案は?
更新3
tgx_sync
ファイルをコピーするとブロックされます。 ZoLの github リポジトリでチケットを開きました。
ashift=0
を設定しました。これにより、4096バイトのセクターを使用するHDドライブがある場合に書き込み速度が遅くなります。 ashift
がないと、ZFSは書き込みをセクター境界に正しく整列しません-> ZFSが512バイトのセクターを書き込んでいるとき、ハードディスクは4096バイトのセクターを読み取り、変更、書き込みする必要があります。
ashift=12
を使用して、書き込みを4096バイトセクターに揃えます。
また、使用中の実際のハードディスクに対して、パーティションの配置が正しいことを確認する必要もあります。