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接続のストレージもオプションで利用可能だ。
SSDなどのフラッシュメモリベースのストレージはまだHDDと比べると記録容量は少なく単価も高いのだが、さくらの専用サーバでは240GB×2といった構成のSSDがHDDとさほど変わらない価格で利用でき、コストパフォーマンスが高い(表1)。
サーバー構成 | 月額料金 | |||
---|---|---|---|---|
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のとおりだ。
製品 | 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の数値を見ると文字通り「桁違い」の数字が並んでいる。
製品 | 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万円以上ということを考慮すると、月額数万円で利用できるというのはリーズナブルな設定ではないだろうか。
製品 | 利用できるシリーズ | 初期費用 | 月額料金 |
---|---|---|---|
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のとおりだ。
プログラム名 | 説明 | 使用したオプション | ベンチマーク条件の説明 |
---|---|---|---|
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が測定不能になっているのは、メモリキャッシュが効いているためだと思われる。
テスト項目 | 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と比べ文字通り桁が違うレベルになっている。
テスト項目 | 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)。
テスト項目 | 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/秒 |
テスト項目 | 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万行のテーブルでテストが行われているが、この程度のデータ量ではストレージ性能の差は出にくいということのようだ。
テスト項目 | 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と比較すると少なくなってしまうのは難点だ。
メモリが潤沢に利用できる場合であれば、読み出しアクセスについてはキャッシュの効果によってそれなりのパフォーマンスが出る場合もあるので、読み出しアクセス中心で多くのストレージ容量が必要、というケースであればメモリを増設してパフォーマンスを稼ぐ、という方針も考えられる。柔軟に構成を選択できるさくらの専用サーバならさまざまなケースにも対応できるだろう。