web-dev-qa-db-ja.com

8 SSDドライブのソフトウェアRAID10アレイの書き込みパフォーマンスが低い

Supermicro X10DRW-iマザーボードと8つのKingston SKC400S SSDのRAID10アレイを搭載したサーバーがあります。 OSはCentOS 6

  # cat /proc/mdstat 
Personalities : [raid10] [raid1] 

md2 : active raid10 sdj3[9](S) sde3[4] sdi3[8] sdd3[3] sdg3[6] sdf3[5] sdh3[7] sdb3[1] sda3[0]
      3978989568 blocks super 1.1 512K chunks 2 near-copies [8/8] [UUUUUUUU]
      bitmap: 9/30 pages [36KB], 65536KB chunk

  # mdadm --detail /dev/md2                
    /dev/md2:
            Version : 1.1
      Creation Time : Wed Feb  8 18:35:14 2017
         Raid Level : raid10
         Array Size : 3978989568 (3794.66 GiB 4074.49 GB)
      Used Dev Size : 994747392 (948.67 GiB 1018.62 GB)
       Raid Devices : 8
      Total Devices : 9
        Persistence : Superblock is persistent

      Intent Bitmap : Internal

        Update Time : Fri Sep 14 15:19:51 2018
              State : active 
     Active Devices : 8
    Working Devices : 9
     Failed Devices : 0
      Spare Devices : 1

             Layout : near=2
         Chunk Size : 512K

               Name : ---------:2  (local to Host -------)
               UUID : 8a945a7a:1d43dfb2:cdcf8665:ff607a1b
             Events : 601432

        Number   Major   Minor   RaidDevice State
           0       8        3        0      active sync set-A   /dev/sda3
           1       8       19        1      active sync set-B   /dev/sdb3
           8       8      131        2      active sync set-A   /dev/sdi3
           3       8       51        3      active sync set-B   /dev/sdd3
           4       8       67        4      active sync set-A   /dev/sde3
           5       8       83        5      active sync set-B   /dev/sdf3
           6       8       99        6      active sync set-A   /dev/sdg3
           7       8      115        7      active sync set-B   /dev/sdh3

           9       8      147        -      spare   /dev/sdj3

書き込み速度がひどく、SSDのパフォーマンスにさえ近づいていないことに気づきました。

# dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=dsync      
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 16.511 s, 65.0 MB/s

読み取り速度は結構です

# hdparm -tT /dev/md2

/dev/md2:
 Timing cached reads:   20240 MB in  1.99 seconds = 10154.24 MB/sec
 Timing buffered disk reads: 3478 MB in  3.00 seconds = 1158.61 MB/sec

この問題のトラブルシューティングを行った後、おそらく最初にストレージ構成をめちゃくちゃにしたことがわかりました。X10DRW-iには、6ポートSATAと4ポートsSATAの2つの別々のSATAコントローラーを備えたIntel C610があります。そのため、アレイ内のディスクは別のコントローラーに接続されており、これがパフォーマンス低下の根本的な原因であると思います。これを修正するアイデアは1つだけです。PCIeSASコントローラ(おそらくAOC-S3008L-L8E)をインストールし、それにSSDドライブを接続します。

だから私は以下を確認したいと思います:

私は根本的な原因について正しいのですか、それとも何かを再確認する必要がありますか?

私のソリューションは機能しますか?

ドライブを新しいコントローラーに再接続しても、RAIDとデータは残りますか?私の調査によると、はい。パーティションのUUIDは同じままなので、確認したいだけです。

事前にみんなに感謝します。

UPD:iostat -x 1 ddテストの実行中: https://Pastebin.com/aTfRYri

# hdparm /dev/sda                                    

/dev/sda:
 multcount     = 16 (on)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 124519/255/63, sectors = 2000409264, start = 0

# cat /sys/block/md2/queue/scheduler                 
none

AFAIKスケジューラーは物理ドライブに設定されていますが、

# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 

smartctl -a(パーティションではなくデバイス上): https://Pastebin.com/HcBp7gUH

UPD2:

# dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 14.389 s, 74.6 MB/s

UPD3:

/パーティションでfstrimを実行し、some効果を得ただけですが、書き込み速度が低すぎます:227 MB /秒、162 MB/s、112 MB/s、341 MB/s、5つの連続したテストで202 MB/s。

5
Evgeny Terekhov

測定された低パフォーマンスは、さまざまな要因の結果です。

  • 作成後、アレイは完全に同期され、SSDの半分にほとんど(すべてではないにしても)のフラッシュデータページが割り当てられます。これにより、SSDが安全な消去/トリミングによってすべて/ほとんど/一部のページが「解放」されるまで、低パフォーマンス状態になります。これは、fstrim;後のパフォーマンスの向上を説明しています。
  • (デフォルト)512 KBのチャンクサイズは、シーケンシャル/ストリーミングのパフォーマンスを最大化するには大きすぎます(ddでベンチマークした場合)。 all-SSDsアレイでは、64 KBのチャンクサイズを選択し、おそらく(これは実際のテストで確認する必要があります)、 "far"レイアウトを使用します。チャンクサイズを小さくすると、ストリーミングアクセスには有効ですが、ランダムな読み取り/書き込みにペナルティが科される可能性があることに注意してください。これは主にHDDの問題ですが、SSDでも多少影響を受ける可能性があります。
  • デフォルトでは、Linuxカーネルは最大で512 KBのサイズのI/Oを発行します。つまり、ddに1 GBのブロックを使用するように要求した場合でも(最初のコマンドに従って)、これらは無数の512 KBサイズのリクエストに分割されます。これは512 KBサイズのチャンクと相まって、書き込みリクエストごとにシングルSSDを実行します。基本的に、ストリーミング書き込みパフォーマンスをシングルSSDレベルで制限し、RAIDによる潜在的な速度の増加を否定します。 max_sectors_kb調整可能(/sys/block/sdX/queue/max_sectors_kb)、512 KBより大きい値は(一部の構成/カーネルバージョンで)無視できます。
  • 最後に、興味深く、義務的な最初のストップですが、dd自体はベンチマークとしては不十分です。それは、低い(1)キュー深度でストリーミングパフォーマンスをテストするだけです。現在のアレイ構成でも、fioのようなより包括的なテストは、少なくともランダムI/Oにおいて、単一ディスクのシナリオと比較して大幅なパフォーマンスの向上を示します。

現在の状況を修正するために何ができますか?まず、あなたはmustディスク/アレイのワイプを受け入れます。明らかに、あなたは必要最初のステップとしてバックアップを取る必要があります。次に:

  • 配列を停止して削除します(mdadm -S /dev/md2
  • トリムallデータブロックanyディスク(blkdiscard /dev/sdX3
  • 64 KBのチャンクとcleanフラグ(mdadm --create /dev/md2 --level=10 --raid-devices=8 --chunk=64 --assume-clean /dev/sdX3
  • ddおよびfioで再ベンチします。
  • 問題がなければ、バックアップを復元します。

SATAセットアップに関する最後の注意:最大のパフォーマンスを得るには、この方法でディスクを分割することは明らかに避けてください。とはいえ、書き込み速度が非常に遅いので、SATAコントローラーのせいにはなりません。新しいものを購入する前に、上記の指示に従ってアレイを実際に再作成します。

8
shodanshok