web-dev-qa-db-ja.com

ZFS:読み取り速度は良いが書き込み速度が遅い

大量の財務データのダウンロードと処理を担当しています。取引日ごとに、約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 リポジトリでチケットを開きました。

4
BayerSe

ashift=0を設定しました。これにより、4096バイトのセクターを使用するHDドライブがある場合に書き込み速度が遅くなります。 ashiftがないと、ZFSは書き込みをセクター境界に正しく整列しません-> ZFSが512バイトのセクターを書き込んでいるとき、ハードディスクは4096バイトのセクターを読み取り、変更、書き込みする必要があります。

ashift=12を使用して、書き込みを4096バイトセクターに揃えます。

また、使用中の実際のハードディスクに対して、パーティションの配置が正しいことを確認する必要もあります。

1
Tero Kilkanen