色々検証で買ったり、中古サーバを買ったらついてきたおまけRAIDカードが増えてきたのですが、どのカードがどの程度の性能を持っているかを感覚でしか分かっていなかったので計測、考察してみました。
2017年現在、いずれもヤフオクや秋葉原で5000円前後、少なくとも1万円以下(eBayではless than $100 USD)で買えるカードでもあるので、安価でそれなりの性能を持ったカードが欲しいと言ったときに役に立つと思います。そのため、全般的にカードが古いです。
計測環境
計測は以下の環境で行いました。使ったハードウェアはhttp://xmms.jp/blog/comments.php?y=17&m=05&entry=entry170504-004911です。
- OS: Windows 10 Pro Build 1511 64bit
- CPU Xeon E5 2670 (v1)
- MB Haunan X79
- Mem 16GB 4x4GB
- SSD
- Target disk: Sandisk X300 128GB
- OS disk: Intel 520 128GB
RAIDを構成する際にはX300の128GBを最大4つ使用します。中古で4000円程度だったのでいくつか買ってみましたが、買った時点で利用時間3時間、電源投入10回程度の状態でした。
計測手順
Windows10上にそれぞれのベンダのRAID設定ユーティリティーをインストールし、Windows上からアレイの作成、及び設定の変更を行いました。この際、OSは使い回しなので複数のRAID設定ユーティリティーが動いた状態になりますが…。
アレイの作成後、ディスクマネージャからNTFSでクイックフォーマットを行い、色々テスト条件を指定できるのがIO Meterだったので、今回はその後Windows上でIO Meter(iometer-1.1.0-win64.x86_64-bin.zip)を実行して以下のパターンの値を計測しました。
Maximun Disk sizeは10000000 Sectors (51210000000Byte、約5GB)、Run timeは30秒、各テストの前には10秒のRamp Up Timeを設けています。
- 512byte seq
- 100% Read
- 50% Read, 50% Write
- 100% Write
- 4KB seq
- 256KB seq
- 1MB Seq
- 1MB rand
このうちの、「R/WそれぞれのIOPS値」と「RW合算MB/s値」をまとめます。まあIOPS*アクセスデータサイズ=MB/sになるので後者は不要といえば不要ですが…。
本当はカード交換時にAHCIに繋ぎLinux等からblkdiscardをそれぞれのSSDに対して実行したあとに新しいカードに移るべきなのですが、あまりにも手間なのでそのまま別のカードに付け替え、実行しています。
RAIDアレイの初期化、Windowsからのクイックフォーマット命令時のいずれかにRAIDカードがよしなにSSDに伝えてblkdiscard/trim相当のことをしていると信じます。この辺の情報が謎でした。
検証カード
Intel X79 AHCI
リファレンス的な扱いです。X79のSATA6GポートにX300を1枚挿し、データを取得しました。SSDの性質上、R/Wが混ざるとかなり性能が落ちることが確認できますが、今回の目的はSSDの性能ではなくRAIDカードの性能であることに留意してください。
Access Specification Name | Read IOps | Write IOps |
---|
512 B; 100% Read; 0% random_QD1 | 25263.0 | 0.0 |
---|
512 B; 100% Read; 0% random_QD32 | 67221.0 | 0.0 |
---|
512 B; 50% Read; 0% random_QD1 | 1397.5 | 1399.2 |
---|
512 B; 50% Read; 0% random_QD32 | 3093.9 | 3103.4 |
---|
512 B; 0% Read; 0% random_QD1 | 0.0 | 22460.0 |
---|
512 B; 0% Read; 0% random_QD32 | 0.0 | 59233.5 |
---|
4 KiB; 100% Read; 0% random_QD1 | 21769.8 | 0.0 |
---|
4 KiB; 100% Read; 0% random_QD32 | 63632.3 | 0.0 |
---|
4 KiB; 50% Read; 0% random_QD1 | 3467.5 | 3494.7 |
---|
4 KiB; 50% Read; 0% random_QD32 | 13851.4 | 13853.1 |
---|
4 KiB; 0% Read; 0% random_QD1 | 0.0 | 18821.0 |
---|
4 KiB; 0% Read; 0% random_QD32 | 0.0 | 54700.6 |
---|
256 KiB; 100% Read; 0% random_QD1 | 1477.2 | 0.0 |
---|
256 KiB; 100% Read; 0% random_QD32 | 1572.1 | 0.0 |
---|
256 KiB; 50% Read; 0% random_QD1 | 372.1 | 368.4 |
---|
256 KiB; 50% Read; 0% random_QD32 | 462.4 | 462.5 |
---|
256 KiB; 0% Read; 0% random_QD1 | 0.0 | 1259.2 |
---|
256 KiB; 0% Read; 0% random_QD32 | 0.0 | 1110.5 |
---|
1M-Seq-100%R_QD1 | 398.1 | 0.0 |
---|
1M-Seq-100%R_QD32 | 384.4 | 0.0 |
---|
1M-Seq-50%R_QD1 | 127.4 | 124.0 |
---|
1M-Seq-50%R_QD32 | 123.3 | 116.5 |
---|
1M-Seq-100%W_QD1 | 0.0 | 303.3 |
---|
1M-Seq-100%W_QD32 | 0.0 | 276.4 |
---|
1M-rand-100%R_QD1 | 304.5 | 0.0 |
---|
1M-rand-100%R_QD32 | 382.7 | 0.0 |
---|
1M-rand-50%R_QD1 | 119.2 | 121.7 |
---|
1M-rand-50%R_QD32 | 121.7 | 121.4 |
---|
1M-rand-100%W_QD1 | 0.0 | 259.5 |
---|
1M-rand-100%W_QD32 | 0.0 | 282.2 |
---|
|
Access Specification Name | Read MBps (Decimal) | Write MBps (Decimal) |
---|
512 B; 100% Read; 0% random_QD1 | 12.9 | 0.0 |
---|
512 B; 100% Read; 0% random_QD32 | 34.4 | 0.0 |
---|
512 B; 50% Read; 0% random_QD1 | 0.7 | 0.7 |
---|
512 B; 50% Read; 0% random_QD32 | 1.6 | 1.6 |
---|
512 B; 0% Read; 0% random_QD1 | 0.0 | 11.5 |
---|
512 B; 0% Read; 0% random_QD32 | 0.0 | 30.3 |
---|
4 KiB; 100% Read; 0% random_QD1 | 89.2 | 0.0 |
---|
4 KiB; 100% Read; 0% random_QD32 | 260.6 | 0.0 |
---|
4 KiB; 50% Read; 0% random_QD1 | 14.2 | 14.3 |
---|
4 KiB; 50% Read; 0% random_QD32 | 56.7 | 56.7 |
---|
4 KiB; 0% Read; 0% random_QD1 | 0.0 | 77.1 |
---|
4 KiB; 0% Read; 0% random_QD32 | 0.0 | 224.1 |
---|
256 KiB; 100% Read; 0% random_QD1 | 387.2 | 0.0 |
---|
256 KiB; 100% Read; 0% random_QD32 | 412.1 | 0.0 |
---|
256 KiB; 50% Read; 0% random_QD1 | 97.5 | 96.6 |
---|
256 KiB; 50% Read; 0% random_QD32 | 121.2 | 121.2 |
---|
256 KiB; 0% Read; 0% random_QD1 | 0.0 | 330.1 |
---|
256 KiB; 0% Read; 0% random_QD32 | 0.0 | 291.1 |
---|
1M-Seq-100%R_QD1 | 417.4 | 0.0 |
---|
1M-Seq-100%R_QD32 | 403.1 | 0.0 |
---|
1M-Seq-50%R_QD1 | 133.6 | 130.1 |
---|
1M-Seq-50%R_QD32 | 129.3 | 122.1 |
---|
1M-Seq-100%W_QD1 | 0.0 | 318.0 |
---|
1M-Seq-100%W_QD32 | 0.0 | 289.8 |
---|
1M-rand-100%R_QD1 | 319.3 | 0.0 |
---|
1M-rand-100%R_QD32 | 401.3 | 0.0 |
---|
1M-rand-50%R_QD1 | 125.0 | 127.6 |
---|
1M-rand-50%R_QD32 | 127.6 | 127.3 |
---|
1M-rand-100%W_QD1 | 0.0 | 272.1 |
---|
1M-rand-100%W_QD32 | 0.0 | 295.9 |
---|
|
ちなみに、CDMとATTOの参考値です。
NEC N8103-130 (Megaraid SAS 9264-8i)
RAID5/6用キー付きのモデルです。購入時はバッテリ付きで1枚3000円程度でした。手元にあった物はFW 2.0.43-0991の物ですが、値を見る限りは最初からSATA6対応で動いているように見えます。よって、ファームの書き換えなどはしていません。
BBUもあるのですが、充電を待つのが面倒だったのでBBU無しで検証しています。過去の経験により、LSIのカードの設定については
- SSDの場合、NoReadAhead,Direct IOにした方が大体良い結果が出る
- SSDの場合は性質上先読みが無くても十分早い上、先読みが外れるコストの方がRAIDコントローラにとっては大きいらしい
- Cached IOにすると、読み込み時に ディスク→キャッシュメモリ→OS と言う順になるらしく、SSDの場合はキャッシュへ載せるオーバーヘッドの方が大きい
- SSDの場合、Diskcacheを有効にしてあげないと書き込み最適化が出来ず寿命にも影響する
- エンプラ向けSSDはでかいキャパシタを持っているので電源断でもSSD上のDRAMのデータは消失せずにすむけど…
と言う傾向があるので、それを踏まえた個人的に気になった以下のパターンを確認しています。
- 1Disk-RAID0 WriteThrough
- 1Disk-RAID0 WriteBack
- 4Disk-RAID0 WT
- 4Disk-RAID0 WB
- 4Disk-RAID5 WT
- 4Disk-RAID5 WB
ディスクのストライプサイズはデフォルトの64K固定です。
1Disk-RAID0 WriteThrough
Access Specification Name | Read IOps | Write IOps |
---|
512 B; 100% Read; 0% random_QD1 | 7719.8 | 0.0 |
---|
512 B; 100% Read; 0% random_QD32 | 89650.8 | 0.0 |
---|
512 B; 50% Read; 0% random_QD1 | 1024.9 | 1033.2 |
---|
512 B; 50% Read; 0% random_QD32 | 3658.0 | 3661.1 |
---|
512 B; 0% Read; 0% random_QD1 | 0.0 | 6650.8 |
---|
512 B; 0% Read; 0% random_QD32 | 0.0 | 74875.2 |
---|
4 KiB; 100% Read; 0% random_QD1 | 6387.1 | 0.0 |
---|
4 KiB; 100% Read; 0% random_QD32 | 68688.0 | 0.0 |
---|
4 KiB; 50% Read; 0% random_QD1 | 1893.0 | 1891.0 |
---|
4 KiB; 50% Read; 0% random_QD32 | 15382.8 | 15404.2 |
---|
4 KiB; 0% Read; 0% random_QD1 | 0.0 | 6349.2 |
---|
4 KiB; 0% Read; 0% random_QD32 | 0.0 | 52811.1 |
---|
256 KiB; 100% Read; 0% random_QD1 | 1206.0 | 0.0 |
---|
256 KiB; 100% Read; 0% random_QD32 | 1714.4 | 0.0 |
---|
256 KiB; 50% Read; 0% random_QD1 | 353.4 | 346.6 |
---|
256 KiB; 50% Read; 0% random_QD32 | 515.9 | 514.8 |
---|
256 KiB; 0% Read; 0% random_QD1 | 0.0 | 1080.9 |
---|
256 KiB; 0% Read; 0% random_QD32 | 0.0 | 1218.1 |
---|
1M-Seq-100%R_QD1 | 415.6 | 0.0 |
---|
1M-Seq-100%R_QD32 | 428.7 | 0.0 |
---|
1M-Seq-50%R_QD1 | 133.6 | 137.6 |
---|
1M-Seq-50%R_QD32 | 132.6 | 131.1 |
---|
1M-Seq-100%W_QD1 | 0.0 | 307.9 |
---|
1M-Seq-100%W_QD32 | 0.0 | 304.1 |
---|
1M-rand-100%R_QD1 | 317.9 | 0.0 |
---|
1M-rand-100%R_QD32 | 410.7 | 0.0 |
---|
1M-rand-50%R_QD1 | 133.3 | 138.1 |
---|
1M-rand-50%R_QD32 | 134.9 | 134.9 |
---|
1M-rand-100%W_QD1 | 0.0 | 308.3 |
---|
1M-rand-100%W_QD32 | 0.0 | 299.8 |
---|
|
Access Specification Name | Read MBps (Decimal) | Write MBps (Decimal) |
---|
512 B; 100% Read; 0% random_QD1 | 4.0 | 0.0 |
---|
512 B; 100% Read; 0% random_QD32 | 45.9 | 0.0 |
---|
512 B; 50% Read; 0% random_QD1 | 0.5 | 0.5 |
---|
512 B; 50% Read; 0% random_QD32 | 1.9 | 1.9 |
---|
512 B; 0% Read; 0% random_QD1 | 0.0 | 3.4 |
---|
512 B; 0% Read; 0% random_QD32 | 0.0 | 38.3 |
---|
4 KiB; 100% Read; 0% random_QD1 | 26.2 | 0.0 |
---|
4 KiB; 100% Read; 0% random_QD32 | 281.3 | 0.0 |
---|
4 KiB; 50% Read; 0% random_QD1 | 7.8 | 7.7 |
---|
4 KiB; 50% Read; 0% random_QD32 | 63.0 | 63.1 |
---|
4 KiB; 0% Read; 0% random_QD1 | 0.0 | 26.0 |
---|
4 KiB; 0% Read; 0% random_QD32 | 0.0 | 216.3 |
---|
256 KiB; 100% Read; 0% random_QD1 | 316.1 | 0.0 |
---|
256 KiB; 100% Read; 0% random_QD32 | 449.4 | 0.0 |
---|
256 KiB; 50% Read; 0% random_QD1 | 92.6 | 90.9 |
---|
256 KiB; 50% Read; 0% random_QD32 | 135.2 | 134.9 |
---|
256 KiB; 0% Read; 0% random_QD1 | 0.0 | 283.4 |
---|
256 KiB; 0% Read; 0% random_QD32 | 0.0 | 319.3 |
---|
1M-Seq-100%R_QD1 | 435.8 | 0.0 |
---|
1M-Seq-100%R_QD32 | 449.5 | 0.0 |
---|
1M-Seq-50%R_QD1 | 140.1 | 144.3 |
---|
1M-Seq-50%R_QD32 | 139.1 | 137.4 |
---|
1M-Seq-100%W_QD1 | 0.0 | 322.8 |
---|
1M-Seq-100%W_QD32 | 0.0 | 318.8 |
---|
1M-rand-100%R_QD1 | 333.3 | 0.0 |
---|
1M-rand-100%R_QD32 | 430.7 | 0.0 |
---|
1M-rand-50%R_QD1 | 139.8 | 144.8 |
---|
1M-rand-50%R_QD32 | 141.5 | 141.5 |
---|
1M-rand-100%W_QD1 | 0.0 | 323.3 |
---|
1M-rand-100%W_QD32 | 0.0 | 314.4 |
---|
|
何気にAHCIよりIO性能が高い…。SSD自体に256MBのDRAMが載っているので、そもそもカード自体のDRAMが不要な可能性があります。
CDMの4G、100MBリードの参考値です。ちなみにDiskcacheを無効にするとシーケンシャルでも書き込みが45MB/s程度まで落ちました。
1Disk-RAID0 WriteBack
Access Specification Name | Read IOps | Write IOps | 512 B; 100% Read; 0% random_QD1 | 4301.6 | 0.0 | 512 B; 100% Read; 0% random_QD32 | 87637.2 | 0.0 | 512 B; 50% Read; 0% random_QD1 | 2087.8 | 2095.7 | 512 B; 50% Read; 0% random_QD32 | 10308.4 | 10368.4 | 512 B; 0% Read; 0% random_QD1 | 0.0 | 13426.3 | 512 B; 0% Read; 0% random_QD32 | 0.0 | 45188.0 | 4 KiB; 100% Read; 0% random_QD1 | 4165.8 | 0.0 | 4 KiB; 100% Read; 0% random_QD32 | 48356.3 | 0.0 | 4 KiB; 50% Read; 0% random_QD1 | 1878.2 | 1860.2 | 4 KiB; 50% Read; 0% random_QD32 | 13939.2 | 13922.0 | 4 KiB; 0% Read; 0% random_QD1 | 0.0 | 12120.9 | 4 KiB; 0% Read; 0% random_QD32 | 0.0 | 30910.1 | 256 KiB; 100% Read; 0% random_QD1 | 1191.3 | 0.0 | 256 KiB; 100% Read; 0% random_QD32 | 1780.1 | 0.0 | 256 KiB; 50% Read; 0% random_QD1 | 378.6 | 376.6 | 256 KiB; 50% Read; 0% random_QD32 | 402.7 | 402.1 | 256 KiB; 0% Read; 0% random_QD1 | 0.0 | 1218.4 | 256 KiB; 0% Read; 0% random_QD32 | 0.0 | 1218.0 | 1M-Seq-100%R_QD1 | 416.3 | 0.0 | 1M-Seq-100%R_QD32 | 447.9 | 0.0 | 1M-Seq-50%R_QD1 | 128.7 | 129.8 | 1M-Seq-50%R_QD32 | 122.3 | 120.3 | 1M-Seq-100%W_QD1 | 0.0 | 305.9 | 1M-Seq-100%W_QD32 | 0.0 | 305.4 | 1M-rand-100%R_QD1 | 292.7 | 0.0 | 1M-rand-100%R_QD32 | 305.9 | 0.0 | 1M-rand-50%R_QD1 | 119.6 | 117.5 | 1M-rand-50%R_QD32 | 110.5 | 111.5 | 1M-rand-100%W_QD1 | 0.0 | 285.2 | 1M-rand-100%W_QD32 | 0.0 | 282.1 |
|
Access Specification Name | Read MBps (Decimal) | Write MBps (Decimal) | 512 B; 100% Read; 0% random_QD1 | 2.2 | 0.0 | 512 B; 100% Read; 0% random_QD32 | 44.9 | 0.0 | 512 B; 50% Read; 0% random_QD1 | 1.1 | 1.1 | 512 B; 50% Read; 0% random_QD32 | 5.3 | 5.3 | 512 B; 0% Read; 0% random_QD1 | 0.0 | 6.9 | 512 B; 0% Read; 0% random_QD32 | 0.0 | 23.1 | 4 KiB; 100% Read; 0% random_QD1 | 17.1 | 0.0 | 4 KiB; 100% Read; 0% random_QD32 | 198.1 | 0.0 | 4 KiB; 50% Read; 0% random_QD1 | 7.7 | 7.6 | 4 KiB; 50% Read; 0% random_QD32 | 57.1 | 57.0 | 4 KiB; 0% Read; 0% random_QD1 | 0.0 | 49.6 | 4 KiB; 0% Read; 0% random_QD32 | 0.0 | 126.6 | 256 KiB; 100% Read; 0% random_QD1 | 312.3 | 0.0 | 256 KiB; 100% Read; 0% random_QD32 | 466.6 | 0.0 | 256 KiB; 50% Read; 0% random_QD1 | 99.3 | 98.7 | 256 KiB; 50% Read; 0% random_QD32 | 105.6 | 105.4 | 256 KiB; 0% Read; 0% random_QD1 | 0.0 | 319.4 | 256 KiB; 0% Read; 0% random_QD32 | 0.0 | 319.3 | 1M-Seq-100%R_QD1 | 436.6 | 0.0 | 1M-Seq-100%R_QD32 | 469.6 | 0.0 | 1M-Seq-50%R_QD1 | 134.9 | 136.1 | 1M-Seq-50%R_QD32 | 128.2 | 126.2 | 1M-Seq-100%W_QD1 | 0.0 | 320.8 | 1M-Seq-100%W_QD32 | 0.0 | 320.3 | 1M-rand-100%R_QD1 | 306.9 | 0.0 | 1M-rand-100%R_QD32 | 320.7 | 0.0 | 1M-rand-50%R_QD1 | 125.4 | 123.3 | 1M-rand-50%R_QD32 | 115.8 | 116.9 | 1M-rand-100%W_QD1 | 0.0 | 299.1 | 1M-rand-100%W_QD32 | 0.0 | 295.8 |
|
5GBというキャッシュに乗り切らないサイズのせいか、違いがぜんぜんわからん!
WTモード時とのデータの向上率の比較をしてみる
Access Specification Name | Read IOps | Write IOps | 512 B; 100% Read; 0% random_QD1 | 55.7% | 0.0% | 512 B; 100% Read; 0% random_QD32 | 97.8% | 0.0% | 512 B; 50% Read; 0% random_QD1 | 203.7% | 202.8% | 512 B; 50% Read; 0% random_QD32 | 281.8% | 283.2% | 512 B; 0% Read; 0% random_QD1 | 0.0% | 201.9% | 512 B; 0% Read; 0% random_QD32 | 0.0% | 60.4% | 4 KiB; 100% Read; 0% random_QD1 | 65.2% | 0.0% | 4 KiB; 100% Read; 0% random_QD32 | 70.4% | 0.0% | 4 KiB; 50% Read; 0% random_QD1 | 99.2% | 98.4% | 4 KiB; 50% Read; 0% random_QD32 | 90.6% | 90.4% | 4 KiB; 0% Read; 0% random_QD1 | 0.0% | 190.9% | 4 KiB; 0% Read; 0% random_QD32 | 0.0% | 58.5% | 256 KiB; 100% Read; 0% random_QD1 | 98.8% | 0.0% | 256 KiB; 100% Read; 0% random_QD32 | 103.8% | 0.0% | 256 KiB; 50% Read; 0% random_QD1 | 107.1% | 108.7% | 256 KiB; 50% Read; 0% random_QD32 | 78.0% | 78.1% | 256 KiB; 0% Read; 0% random_QD1 | 0.0% | 112.7% | 256 KiB; 0% Read; 0% random_QD32 | 0.0% | 100.0% | 1M-Seq-100%R_QD1 | 100.2% | 0.0% | 1M-Seq-100%R_QD32 | 104.5% | 0.0% | 1M-Seq-50%R_QD1 | 96.3% | 94.3% | 1M-Seq-50%R_QD32 | 92.2% | 91.8% | 1M-Seq-100%W_QD1 | 0.0% | 99.4% | 1M-Seq-100%W_QD32 | 0.0% | 100.4% | 1M-rand-100%R_QD1 | 92.1% | 0.0% | 1M-rand-100%R_QD32 | 74.5% | 0.0% | 1M-rand-50%R_QD1 | 89.7% | 85.1% | 1M-rand-50%R_QD32 | 81.9% | 82.6% | 1M-rand-100%W_QD1 | 0.0% | 92.5% | 1M-rand-100%W_QD32 | 0.0% | 94.1% |
|
分かりづらいですが、100%でキャッシュ無し時と同じなので、512 B; 100% Read; 0% random_QD1の55.7%というのは、キャッシュを有効にすると逆に性能劣化が起きてキャッシュ無しの半分の性能になっているパターンです。(コンフルマクロで1を主軸にして左右にするグラフどう作れば良いんだ…。)
512BアクセスのRead50%/Write50%時はキャッシュを有効にすると無しに比べて3倍近い性能向上を得られますが、それ以外の場合は大体性能劣化が起きているようです。
WBの効果が出ているかCDMも走らせてみましたが、キャッシュに収まる100MBでテストしたところキャッシュ速度はずいぶんと速いようです。
You may also want to use visual panels to communicate related information, tips or things users need to be aware of. |
Related articles
Related articles appear here based on the labels you select. Click to edit the macro and add or change labels.