SSDやioDriveといった高速ストレージの性能をチェック――はじめての「さくらの専用サーバ」(4)

現在多くのサーバーではストレージとして安価かつ大容量なHDDが採用されているが、さくらの専用サーバでは、ストレージとしてSSDやフラッシュメモリベースの高速ストレージと「Fusion-io ioDrive」なども選択可能だ。今回はこれらストレージの特徴と、その性能についてチェックしていこう。

フラッシュメモリ系ストレージを導入しやく

近年ではフラッシュメモリを使ったストレージであるSSDの普及が進んでいる。SSDはかつては容量が少なく、また価格も高かったが、最近では数百GB程度の容量であれば現実的な価格で入手できるようになり、また信頼性を高めたエンタープライズ向けのSSDも登場している。そのため、高性能なストレージを必要とするサーバーにおいても採用例が増えている。さくらの専用サーバではいち早くSSD搭載サーバーの提供を開始しており、信頼性と高速なアクセスで評価の高いIntel製のSSDをストレージとして利用可能になっている。

また、フラッシュメモリ自体の高速化やメモリコントローラの高性能化により、広く使われているストレージインターフェイスであるSATAの転送速度上限を超える性能を持つストレージデバイスも実現可能となってきた。そのため、接続インターフェイスとしてより転送速度の高いPCI Expressを採用したストレージも登場しており、代表的なものとしてはIntelの「Intel 910シリーズ」や、Fusion-ioの「ioDrive」シリーズ」がある(図1)。さくらの専用サーバではこれらPCI Express接続のストレージもオプションで利用可能だ。

図1 Fusion-ioの「ioDrive2」。PCI Express接続の拡張カード上にフラッシュメモリ素子が配置されている
図1 Fusion-ioの「ioDrive2」。PCI Express接続の拡張カード上にフラッシュメモリ素子が配置されている

 SSDなどのフラッシュメモリベースのストレージはまだHDDと比べると記録容量は少なく単価も高いのだが、さくらの専用サーバでは240GB×2といった構成のSSDがHDDとさほど変わらない価格で利用でき、コストパフォーマンスが高い(表1)。

表1 さくらの専用サーバでのストレージ料金(エクスプレスG2シリーズの例)
サーバー構成 月額料金
SATA HDD 1TB×2 SAS HDD 600GB×2 SSD Intel DC S3500 240GB×2 SATA 1TB×2+Fusion-io ioDrive PCIe SSD 320GB
Fujitsu RX100 S7 Xeon 4Core 3.30GHz 19,800円 20,800円 21,800円 49,800円
Fujitsu RX200 S7 Xeon 8Core 2.60GHz 27,800円 28,800円 30,800円 57,800円
Fujitsu RX200 S7 Xeon 8Core 2.60GHz 2CPU 37,800円 38,800円 40,800円 67,800円

さくらの専用サーバで利用できるSSD

さくらの専用サーバでは、Intel製のSSDが提供されている。エクスプレスシリーズおよびエクスプレスG2シリーズでは「Intel DC S3500」の240GBモデルおよび480GBモデルが、フレックスシリーズでは「Inte 320」の120GBモデルおよび600GBモデルと「Intel 520」の240GBモデル、「Intel 710」の100GBモデルが選択できる。それぞれのスペックは表2のとおりだ。

表2 Intel製SSDのスペック
製品 Intel DC S3500(240GB) Intel DC S3500(480GB) Intel 320(120GB) Intel 320(600GB) Intel 520(240GB) Intel 710(100GB)
シーケンシャル読み出し性能 500MB/秒 500MB/秒 270MB/秒 270MB/秒 550MB/秒 270MB/秒
シーケンシャル書き込み性能 260MB/秒 410MB/秒 130MB/秒 220MB/秒 520MB/秒 170MB/秒
ランダム4KB読み出し性能 75,000IOPS 75,000IOPS 38,000IOPS 39,500IOPS 50,000IOPS 38,500IOPS
ランダム4KB書き込み性能 7,500IOPS 11,000IOPS 14,000IOPS 23,000IOPS 80,000IOPS 2,300IOPS

なお、ランダム読み出し/書き込み性能の単位となっているIOPS(Input/Output Per Second)は1秒当たりに実行できる読み書きの回数を示しており、たとえば4KBのランダム読み出し性能が50,000IOPSであれば、1秒間に4KBのデータ読み出しを5万回実行できる、という意味となる。

SSDの特徴は、ランダムアクセス時に高いパフォーマンスが期待できる点だ。HDDの場合、データを読み出すためのヘッドを物理的に動かさなければならないため、どうしてもオーバーヘッドが発生する。近年のHDDでは記録密度が向上していることもあり、ヘッドの移動が少ないシーケンシャルアクセスの性能は向上しているが、ヘッドを大きく動かす必要があるランダムアクセスについてはパフォーマンス向上に限界がある。いっぽうSSDでは物理的な可動部分がないため、ランダムアクセス時でも高いパフォーマンスが期待できる。

より高いパフォーマンスを求めるならioDrive

さくらの専用サーバで利用できるもう1つのストレージが、PCI Express接続のフラッシュメモリストレージだ。エクスプレスシリーズでは「Intel 910」(400GB)が、エクスプレスG2シリーズでは「Fusion-io ioDrive2」(365GB)が、フレックスシリーズでは「Fusion-io ioDrive」(320GB)と「Fusion-io ioDriveDuo」(640GB)が利用可能になっている。

まずIntel 910だが、PCI Express接続の拡張カード上にSASインターフェイスとSAS接続のSSDが搭載されているというもので、OSからはSAS接続のドライブとして認識される。転送速度が高いPCI Expressで接続されることで、より高速なアクセスができるのが特徴だ。また、ioDriveもIntel 910と同様PCI Expressで接続されるストレージだが、こちらは専用のコントローラが採用されており、より性能が高いのが特徴だ。

それぞれのスペックをまとめたのが表3だ。ioDriveは性能の表記方法がやや異なるので単純には比較できない点には注意したいが、IOPSの数値を見ると文字通り「桁違い」の数字が並んでいる。

表3 PCI Express接続フラッシュメモリストレージのスペック
製品 Intel 910(400GB) Fusion-io ioDrive(320GB、MLC) Fusion-io ioDriveDuo(640GB、MLC) Fusion-io ioDrive2(365GB)
読み出し性能 1000MB/秒 735MB/秒 1.5GB/秒 910MB/秒
書き込み性能 750MB/秒 510MB/秒 1.0GB/秒 590MB/秒
ランダム512B読み出し性能 - - - 137,000IOPS
ランダム512書き込み性能 - - - 535,000IOPS
ランダム4KB読み出し性能 90,000IOPS - - 110,000IOPS
ランダム4KB書き込み性能 38,000IOPS - - 140,000IOPS
シーケンシャル512B読み出し性能 - 100,000IOPS 196,000IOPS -
シーケンシャル512B書き込み性能 - 141,000IOPS 285,000IOPS -

また、利用料金は表4のとおりだ。数百GBのストレージで数万円、という料金は高いようにも見えるが、ioDriveの販売価格が数十万円から100万円以上ということを考慮すると、月額数万円で利用できるというのはリーズナブルな設定ではないだろうか。

表4 PCI Express接続ストレージの利用料金
製品 利用できるシリーズ 初期費用 月額料金
Intel 910(400GB) エクスプレス 18万円 0円
Fusion-io ioDrive2(365GB) エクスプレスG2 0円 3万1,500円
Fusion-io ioDrive(320GB、MLC) フレックス 0円 3万1,500円
Fusion-io ioDriveDuo(640GB、MLC) フレックス 0円 6万3,000円

SSDやPCI Express接続フラッシュストレージが有用なシーン

SSDやPCI Express接続フラッシュストレージが有用なケースとしては、大規模なデータベースサーバーでの利用が挙げられる。大規模なデータベースサーバーはCPUよりもストレージの性能がボトルネックになることが多いためだ。特にioDriveはその高速性から大規模な環境での導入が多く、サーバー台数を数分の1に減らすことができたという実例もあるという。

また、画像や音声、動画といった大容量のコンテンツを扱うようなサーバーではSSDがその効果を発揮するだろう。さくらの専用サーバではストレージとしてSSDを選択した場合でも料金はあまり変わらないため導入もしやすい。ただし、容量はHDDと比べると多くないため、その点には注意する必要がある。

ioDriveの利用には専用のドライバが必要な点に注意

さくらの専用サーバにおいては、SSDについてはHDDとまったく同様に利用でき、とくに設定を行う必要もない。容量はHDDと比べて少なめだが、どのプランでもHDD/SDDを増設するオプションが提供されているので、容量が必要な場合はこれらを検討すると良いだろう。なお、搭載できるストレージ数はエクスプレスシリーズの場合最大4台、エクスプレスG2シリーズの場合は最大4台もしくは8台(シリーズによって異なる)、フレックスシリーズの場合は最大12台だ。

いっぽうのioDriveについては、一般的なHDDやSSDとは異なり、利用には専用のドライバが必要となる。コントロールパネルのOSインストール機能からOSをインストールした場合はこれらドライバが自動的にインストールされるが、それ以外のOSを利用する場合は別途自分でドライバをインストールする必要があるので注意したい。また、さくらの専用サーバでioDriveを利用する際は、必ずHDDもしくはSSDとセットで提供されるため、通常はHDDもしくはSSDにOSをインストールし、ioDriveはデータ専用のストレージとして利用する形になる。

ioDriveの設定方法についてはさくらインターネットの技術ドキュメントにまとめられているのでそちらを参照してほしいが、初期設定ではioDriveはOS側から認識されてはいるものの、マウントはされていない。接続されているioDriveの情報は、fio-statusコマンドで確認できる。たとえば次の実行例では、320GBのioDriveが接続されており、/dev/fct0および/dev/fioaというデバイスファイル経由でアクセスできるということが分かる。/dev/fct0はioDrive自体をコントロールするためのデバイスファイルで、/dev/fioaはストレージとして利用するためのデバイスファイルだ。フォーマットやマウントといったストレージに対する操作は/dev/fioaに対して実行する。

# fio-status

Found 1 ioMemory device in this system
Driver version: 3.2.6 build 1212

Adapter: Single Adapter
        HP 320GB MLC PCIe ioDrive for ProLiant Servers, Product Number:600279-B21, SN:908961
        External Power: NOT connected
        PCIe Power limit threshold: 24.75W
        Connected ioMemory modules:
          fct0: Product Number:600279-B21, SN:491019

fct0    Attached
        HP ioDIMM 320GB, SN:491019
        Located in slot 0 Center of Low-Profile ioDIMM Adapter SN:908961
        PCI:01:00.0, Slot Number:3
        Firmware v7.1.15, rev 110356 Public
        320.00 GBytes device size
        Internal temperature: 59.55 degC, max 59.55 degC
        Reserve space status: Healthy; Reserves: 100.00%, warn at 10.00%
        Contained VSUs:
          fioa: ID:0, UUID:df6c54d2-f962-433a-930b-d402f902aafa

fioa    State: Online, Type: block device
        ID:0, UUID:df6c54d2-f962-433a-930b-d402f902aafa
        320.00 GBytes device size

初期状態ではioDriveは未フォーマットなので、パーティションの作成およびフォーマットを行った上でマウントする必要がある。パーティションについては、一般的なストレージと同様fdiskコマンドで確認および作成を行える。

# fdisk -l /dev/fioa  ←現在のパーティション設定を確認する

Disk /dev/fioa: 320.0 GB, 320000000000 bytes
255 heads, 63 sectors/track, 38904 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 32768 bytes
Disk identifier: 0x00000000

# fdisk /dev/fioa  ←パーティションを作成する
  
  
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-38904, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-38904, default 38904):
Using default value 38904

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

# fdisk -l /dev/fioa  ←作成後のパーティション設定を確認する

Disk /dev/fioa: 320.0 GB, 320000000000 bytes
255 heads, 63 sectors/track, 38904 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 32768 bytes
Disk identifier: 0xe6aaeb67

    Device Boot      Start         End      Blocks   Id  System
/dev/fioa1               1       38904   312496348+  83  Linux

以上でioDrive上にパーティションが作成され、それに対し/dev/fioa1というデバイスファイル経由でアクセス可能になる。続いてフォーマットを行い、マウントすればストレージとして利用可能になる。

# mkfs.ext4 /dev/fioa1  ←ext4形式でファイルシステムを作成
mke2fs 1.41.12 (17-May-2010)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=8 blocks
19537920 inodes, 78124087 blocks
3906204 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
2385 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

# mkdir /fioa1  ←マウント先ディレクトリを作成
# mount -t ext4 /dev/fioa1 /fioa1  ←マウントを実行

SSDやioDriveのパフォーマンスをチェック

さて、ここまでSSDやioDriveといったストレージの特徴について述べてきたが、実際にどの程度のパフォーマンスなのか、気になる人も多いだろう。そこで、簡単にベンチマークテストを実行した結果を紹介していこう。

今回検証に使用したのは、さくらの専用サーバ・エクスプレスG2シリーズのサーバー(Fujitsu RX100 S7 Xeon 4Core 3.30GHz)だ。ストレージとしてSATA接続のHDDを搭載したものとSSDを搭載したもの、そしてioDriveを搭載したもの3台を使用し、それぞれでストレージおよびMySQLのベンチマークプログラムを実行している。

実行したベンチマークプログラムは表5のとおりだ。

表5 テストに使用したベンチマークプログラム
プログラム名 説明 使用したオプション ベンチマーク条件の説明
Bonnie++ ストレージのRead/Write性能の測定 なし -
tiobench 複数スレッドから同時にI/Oを実行した際の性能を測定 -t 8 -f 128 -b 4096 -r 32768 8スレッドで各スレッド128MBのI/Oを実行(合計1GBのI/Oを実行)
sql-bench MySQLにおいて基本的なテーブル作成やクエリ処理を実行した際の性能を測定 なし -

これらのうち、Bonnie++およびtiobenchは以前ネットワーク/ストレージの処理能力をチェックするためのベンチマークツールという記事で紹介しているので、詳しくはそちらを参照していただきたい。また、sql-benchはMySQLの開発者らが配布しているベンチマークツールだ(MySQLのドキュメント)。

ベンチマークテストを実行させる際は、Linuxカーネルによるファイルシステムキャッシュの影響を極力減らすため、起動時にカーネルオプションとして「mem=512M」を指定し、メモリを512MBのみ認識させた状態で行っている。また、参考としてHDD搭載サーバーについてはこのメモリ制限を行わず、搭載されている16GBすべてを認識させた状態でもベンチマークテストを実行させている。

なお、今回テストに使用したサーバーのSSDにはIntel 330(180GB×2)が搭載されているが、現行のサービスではより新しいモデルであるデータセンター向けのIntel DC S3500(240GB)に変更されている。そのため、今回のテスト結果よりも現行モデルのほうがより高い性能になっている可能性がある点には留意したい。

ストレージ性能の比較

それでは、ベンチマークテスト結果を見ていこう。まずはBonnie++によるストレージ性能調査だが、Bonnie++では1バイト/1ブロック(1024KB)単位でのシーケンシャルWriteおよび書き換え、1バイト/1ブロック(1024KB)単位でのシーケンシャルRead、そしてランダムSeekを行って1秒当たりにどれだけの処理を実行できたかを測定している。この結果(表6)を見ると、1バイト単位でのアクセスについてはどれも大差はないものの、ブロック単位でのアクセスや書き換え処理に関してはSSDはHDDの2~3倍程度、ioDriveは5~7倍程度ののパフォーマンスが確認できる。ちなみに、「測定不能」となっているのは処理時間が短すぎて測定できなかったものだ。メモリ16GB搭載時のシーケンシャルReadが測定不能になっているのは、メモリキャッシュが効いているためだと思われる。

表6 Bonnie++ベンチマーク結果(速度)
テスト項目 SATA SSD ioDrive SATA(メモリ16GB)
シーケンシャルWrite Per Chr 1,214KB/秒 1,238KB/秒 1,221KB/秒 1,234KB/秒
Block 101,934KB/秒 258,506KB/秒 578,389KB/秒 106,982KB/秒
Rewrite 43,441KB/秒 124,805KB/秒 260,766KB/秒 52,700KB/秒
シーケンシャルRead Per Chr 5,793KB/秒 5,963KB/秒 5,425KB/秒 (測定不能)
Block 141,667KB/秒 300,527KB/秒 824,549KB/秒 154,720KB/秒
ランダム Seek 489KB/秒 15,958KB/秒 (測定不能) 445.8KB/秒

また、Bonnie++では遅延についても測定されるが、SSDやioDriveは遅延についてもHDDと比べ文字通り桁が違うレベルになっている。

表7 Bonnie++ベンチマーク結果(遅延)
テスト項目 SATA SSD ioDrive SATA(16GB)
シーケンシャルWrite Per Chr 6,778マイクロ秒 8,928マイクロ秒 15,134マイクロ秒 13,619マイクロ秒
Block 558ミリ秒 82,634マイクロ秒 39,102マイクロ秒 326ミリ秒
Rewrite 160ミリ秒 69,490マイクロ秒 30,426マイクロ秒 293ミリ秒
シーケンシャルRead Per Chr 6,729マイクロ秒 2,647マイクロ秒 2,598マイクロ秒 15,629マイクロ秒
Block 40,779マイクロ秒 1,463マイクロ秒 1,965マイクロ秒 72,092マイクロ秒
ランダム Seek 1,517ミリ秒 1,691マイクロ秒 1,250マイクロ秒 287ミリ秒

続いてtiobenchによるベンチマーク結果だが、こちらもBonnie++とほぼ同様の傾向となり、特にランダムアクセスについてはSSDやioDriveのパフォーマンスの高さがうかがえるものになっている(表8、表9)。

表8 tiobenchベンチマーク結果(速度)
テスト項目 SATA SSD ioDrive SATA(16GB)
シーケンシャルWrite 83.826MB/秒 251.427MB/秒 535.675MB/秒 92.085MB/秒
ランダムWrite 4.727MB/秒 170.547MB/秒 593.659MB/秒 22.201MB/秒
シーケンシャルRead 158.834MB/秒 712.450MB/秒 437.936MB/秒 19339.364MB/秒
ランダムWrite 2.264MB/秒 98.142MB/秒 120.311MB/秒 18175.686MB/秒
表9 tiobenchベンチマーク結果(遅延)
テスト項目 SATA SSD ioDrive SATA(16GB)
シーケンシャルWrite 平均 0.326ミリ秒 0.108ミリ秒 0.052ミリ秒 0.004ミリ秒
最大 1,427.121ミリ秒 1,026.949ミリ秒 726.300ミリ秒 0.464ミリ秒
ランダムWrite 平均 5.722ミリ秒 0.150ミリ秒 0.049ミリ秒 0.003ミリ秒
最大 19,829.566ミリ秒 660.457ミリ秒 100.269ミリ秒 0.046ミリ秒
シーケンシャルRead 平均 0.166ミリ秒 0.042ミリ秒 0.071ミリ秒 0.002ミリ秒
最大 1,506.043ミリ秒 5.169ミリ秒 6.984ミリ秒 0.039ミリ秒
ランダムRead 平均 12.931ミリ秒 0.305ミリ秒 0.258ミリ秒 0.002ミリ秒
最大 431.807ミリ秒 3.576ミリ秒 100.640ミリ秒 0.036ミリ秒
合計 平均 4.786ミリ秒 0.151ミリ秒 0.108ミリ秒 0.003ミリ秒
最大 19,829.566ミリ秒 1,026.949ミリ秒 726.300ミリ秒 0.464ミリ秒

MySQLのベンチマーク結果

続いてsql-benchによるMySQLのベンチマークテストだが、結果は表10のようになった。sql-benchでは「ATIS」や「alter-table」など8種類のテストが用意されているが、大きな差が出たのは「create」テストのみだった。このテストはテーブルを作成したり、キーを作成する、といった処理を行うもので、頻繁にディスクアクセスを行うことから差が出たようだ。いっぽう、それ以外のテストでは大きな差はなかった。sql-benchのベンチマークテストではフィールド数が1000、insert関連のベンチマークでは10万件、select関連のベンチマークでは1万行のテーブルでテストが行われているが、この程度のデータ量ではストレージ性能の差は出にくいということのようだ。

表10 sql-benchベンチマーク結果(各テストの実行に要した時間)
テスト項目 SATA SSD ioDrive SATA(メモリ16GB)
ATIS 9秒 9秒 10秒 8秒
alter-table 2秒 11秒 10秒 3秒
big-tables 6秒 7秒 7秒 7秒
connect 61秒 61秒 55秒 61秒
create 34秒 1060秒 1031秒 53秒
insert 410秒 411秒 426秒 444秒
select 146秒 143秒 142秒 140秒
wisconsin 2秒 4秒 5秒 3秒

大容量を求めないならSSDがおすすめ。よりパフォーマンスが必要ならioDriveの検討も

以上、非常に簡単なベンチマークテスト結果レポートだったが、比較的手軽に導入できるSSDでもHDDと比較して大幅にパフォーマンス向上が見込めることが分かる。また、それ以上のパフォーマンスが必要だったり、ランダムアクセス性能が必要となる用途であれば、より性能の高いioDriveを検討しても良いだろう。ただ、どちらもストレージ容量はHDDと比較すると少なくなってしまうのは難点だ。

メモリが潤沢に利用できる場合であれば、読み出しアクセスについてはキャッシュの効果によってそれなりのパフォーマンスが出る場合もあるので、読み出しアクセス中心で多くのストレージ容量が必要、というケースであればメモリを増設してパフォーマンスを稼ぐ、という方針も考えられる。柔軟に構成を選択できるさくらの専用サーバならさまざまなケースにも対応できるだろう。

おしらせ

banner_ioDrive

banner_2zone