MySQL+ioDriveの勉強会に向けての準備運動で、2年前のメモを掘り起こしてみます。
私がioDriveの導入を決定する前に、自分で検証したり @hasegaw 氏に根掘り葉掘り質問した内容になっています。ioDriveの導入を迷っている方や、使い始めの方に参考になるかもしれません。
このメモを公開するにあたって、現在を踏まえてある程度編集していますが、基本的には2年前の内容になっているので、あくまで参考程度に留めてください。これから広まるであろう ioDrive2 になると、考え方が異なったり、無用になる知識も含んでいます
Fusion-ioの紹介なり資料を見ても、全く知らない人が見たら怪しい製品と感じるかもしれません。実際、私の初見は(別名の)製品資料でしたが、現実味が感じられなくて検討しようとすらしませんでした。そんな勿体無い想いを少しでも払拭できればと思います
Fusion-io ioDriveの概要
ioDriveとは
Fusion-io社によって開発されたioDriveは、速い・壊れない・高くない の3拍子揃った不揮発性メモリで、HDDやSSDのような記憶デバイスとして利用できます。製品名はあくまで ioDrive であり、Fusion-ioと呼ぶと怒られます。また、SSDと言っても怒られるので、不揮発性メモリと言いましょう。
会社のロゴはどこが大文字で小文字なのかは不明ですが、Fusion-io と書いておけば間違いなさそうです。
2009年からサーバの主要ベンダーにOEMを開始していて、この辺はFusion-io社のプレゼン資料で必ず紹介されますが、ベンダーの資料を見た時に製品名が異なるけど実は中身はFusion-ioだった、ということがあるので注意しましょう。
HDDの課題
サーバの性能面を台数でカバーするとこれらのデメリットも大きくなることになり、FusionIOはこの全てを解決(緩和)してくれます。
ioDriveの優れたところ
通常のSSDとは記憶素子に寿命があるという点では同じですが、物理構成の違いやソフトウェア面の工夫によって 速度や寿命を向上させています。特にソフトウェア面は他社が追随できないものであると自信を持っています。寿命にいたっては数十年と、エンジニアとどっちが先に死ぬかというくらい長く、またHDDと違って、監視によって寿命が明確にわかることも大きなメリットとなっています。
製品について
ioDrive と ioDriveDuo
基本製品であるioDriveと、高性能版であるioDriveDuoの2つがありますが、Duoは単純にioDriveを2つ合わせただけです。そのため、性能面も価格面もほぼ比例した内容となります。利用の際は、Duoの場合はOSが2つのデバイスとして認識し、それをソフトウェアRAIDでストライピングすることで倍の性能を実現します。ソフトウェアRAIDと聞くとムッと感じる方がいるかもしれませんが、まったく問題にあたったことはありません。
SLC と MLC
SLCが高性能・高価・中容量で、MLCが中性能・安価・大容量と考えてよいです。MLCはSLCよりも記憶素子に詰め込むデータ量を増やした分、安定度と速度を犠牲にしています。「SLCを入れてみたが、MLCでも十分だった」という感想も多いようで、 用途と予算次第でどちらも選択肢になり得ます。
個人的な感想としては、WEB業界だと9割以上がMLCで十分だと思っています
ioDriveOctal
ioDriveOctalというモンスターがいますが、ぶっちゃけ価格面とコストパフォーマンスから選択肢には成り得ないでしょう。というかそれ以前に取り扱っているベンダーさんが少ないです。購入したらカッコ良いスチールケースに入って届くらしいです。IOPSについて
IOPS(Input Output per Seconds)を基準にする理由
これまで様々な情報をグラフにしてきましたが、WEBサービスにおいてボトルネックになるのはDiskI/Oであり、その限界を測る値で最も正確なものがIOPSである、という結論に至っています。転送速度(MB/s)やCPU iowaitなどもある程度の指標にはなり、それはそれで利用しますが、 正確なキャパシティという点ではIOPSになります。
HDD
SATA/SAS、5400/7200/15000rpm と様々ですが、1台当り速くとも400~700 IOPS であると考えてよいです。よって6台でRAID10を組むと、3台のストライピングになるので、速ければ 2000 IOPS 出ることもあります。
SSD
こちらも様々ですが、5000~10000 IOPS となります。ただし、性能劣化や寿命というデメリットを抱えていることがほとんで、 商用で利用出来るとしたら Intel SSD くらいのようです。
ioDrive
ioDrive SLC 120,000 IOPS、MLCで 70,000 IOPS。ioDriveDuo SLC 235,000 IOPS、MLCで 140,000 IOPS。
これを見た時に思うことは、「本当にそんなに出るの?」「そんなに必要なの?」ですが、答えとしては、「そんなに出ます」「そんなに必要ありません」です。
なぜこのような回答になるかというと、ただIOPSを計測するだけなら数値は出るからです。私は ioDriveDuo SLC の検証で 200,000 IOPS 出るのを確認しました。しかし、MySQLのデータ領域としては何をどう頑張っても、せいぜい 30,000 IOPS までしか計測できませんでした。わざとIOPSを出すための実験でこれなので、実際のサービスでは 10,000 IOPS 程度がせいぜいじゃないでしょうか。
ならば、もっと少ないちょうどよいIOPS値で安価な製品はないか、と考えるかもしれません。これについては、1つはioDriveはIOPSだけではなく他の点でも優れているという点。2つ目は、製品に関わらずIOPSという長らく抱えていた問題点は大きめに解決しておくべきだと考えます。
ioDriveがべらぼうに高いならば他製品へのダウングレードを検討してもよいところですが、おそらく費用対効果でほぼ意味がないことがわかります。
故障について
寿命ではない、ioDrive本体の故障という意味では、初期不良以外は無い、ということです。そしてその初期不良もほぼ無い状態で出荷しているとのこと。SATA/SAS型はRAIDコントローラやケーブル、HDDそのもの(ヘッドなど) など故障の可能性が複数あるため総合的な故障率はかなり上がりますが、ioDriveはPCI-Express直繋ぎかつNAND型フラッシュメモリのために故障の可能性箇所がほぼないためです。
国内事例による数千台・数ヶ月以上の利用でも故障はないとのこと。実際、私の目に届く範囲のioDriveもそれなりの台数がありますが、故障は経験していません。
寿命について
書き込み容量と耐久年数
とあるSSD 160GB MLC だと、250GB/Day の書き込みで 2ヶ月、SSD 64GB SLC だと2.5TB/Day で2.2年 の寿命となるそうです。
ioDriveは 160GB MLC に 250GB/Day で 22年、
64GB SLC だと 2.5TB/Day で 33年 になるそうです。
しかもこの参考値は現在の容量よりかなり低い、古いデータであり、低く見積もられた数字です。
単純に容量が大きいほど書き込み量に対する耐久年数は上がるので、現在はもっと長くなっています
予備領域
ソフトウェアによって書き込み箇所を散らしたりすることで寿命を伸ばしていますが、記憶素子の寿命や破壊が起きた場合はその領域を予備領域と入れ替えることで長持ちさせています。どの製品も予備領域は表示容量の 25% を確保しており、320GBモデルならば 80GBの予備領域があります。この予備領域が無くなることを寿命切れとしますが、 国内事例で1年以上の利用で寿命に達した例はないそうです。
予防保守
予備領域が 10% を切るとWarningの発行、0% になると書き込み抑制、
隠し容量があれば ReadOnlyモードへ、
といった保守がされ、管理コマンドや管理画面で読み書き量や予備領域量を確認することができます。
消費電力について
HDD は1本当り 10~12W、SSD は 4~10W、
ioDrive は17~25W となります。
性能面と比較するとかなり省電力になることがわかります。
RAIDについて
ストライピング
SSDは複数枚でストライピングしてもREADしか性能が向上せず、しかも比例どころかたいして向上しません。ioDriveはかなり比例に近い傾きでRead/Write両方が向上します。ioDriveを2枚=ioDriveDuo の性能なのでこの構成は意味ないですが、ioDriveDuoを複数枚つなげるという選択肢は有効ということです。海外の好奇心旺盛な人は 14枚つなげて性能向上を喜んでいる とも聞きました。
ミラーリング
HDDだとミラーリングが当たり前に感じますが、ioDriveはそもそもRAID5のようなデータ構成になっており、 故障率もかなり低いためミラーリングは不要と考えてよいです。ミラーリングするくらいなら、MySQLレプリケーションをした方が良い、ということでした。
同時アクセスについて
HDD は物理的なヘッドがあるために並列アクセスはできませんが、SSDやioDriveは並列アクセスができます。SSDだと 8~16 チャンネルでアクセスでき、
ioDriveだと 24+1チャンネル で同時アクセスできます。
これにより、例えば仮想環境においてインスタンスを8個程度で限界だったものが、100個以上に増やすことができるようです。
アクセス速度について
HDDへのアクセス速度がミリ秒単位(ms)なのに比べて、ioDriveはマイクロ秒単位(µs)になっており、ioDriveだと26µsとなっています。これはナノ秒単位(ns)のCPUやメモリに対して、1,000,000倍差の世界から1000倍差に詰め寄ったことを意味しています。
具体的な効果としては、ディスクアクセスが必要な処理において、iowaitが激減します。普段からCPUが無駄に待つ時間が減るということで、IOPS限界によるiowaitとはまた別の話になります。
ここまででずいぶんioDrive推しに見えるかもしれませんが、推しというよりはただ事実を並べているだけであることを付け加えておきます。
推してみろと言われれば、『何も考えずとりあえず導入したらいいよ』とでも言います。ただ、企業が判断を下すのにそれを真に受けるワケはないので、その判断する時間の節約の手助けになればなーと思うわけです。それに、ちゃんと知らないと真の力も引き出せないですしね。
長くなったので切ります。次回は運用面について書きたいと思います。