OSC 2011 Tokyo/Springの活動報告

先日オープンソースカンファレンス2011 Tokyo/Springが早稲田大学で開催されました。OSCには過去に何回も参加したことはあるのですが、今回は展示&セミナーで発表する側での参加でした。初体験。色々反省点はありましたが、個人的にはいい経験ができたといえます。

続きを読む

NexentaStorインストール

の前に、ちょっと寄り道。

仮想化環境の共有ストレージとしてのOpenSolaisの活用

今日のTwitterでTL上にNexentaStorが一杯でてきたのでちょっとずつアウトプットしていきたいと思います。社内用でまとめたものを整理して出してみます。

うちの会社では以前からこのブログでも書いてるようにXenServerの仮想化のiSCSI共有ストレージとしてOpenSolaisを使用しています。なんでこの環境になったかというのはいたってシンプルです。

  1. 既存の仮想化ハイパーバイザで無償版でライブマイグレーション(XenServerではXenMotionという)ができるのはXenServerだけ
  2. XenMotionをするには複数ホストで共有できるストレージが必要(iSCSI使用)
  3. OpenSolaisのZFSではiscsiの機能をファイルシステムで持っていた(shareiscsiプロパティ)
    • 過去形なのは現在は廃止されているからです。OpenSolaisにはCOMSTARというOpenSolaisホストをiSCSIのターゲットにするカーネル空間で実装されたソフトウェアフレームワークがあり、現在はそちらのみとなっています。
  4. OpenSolaisでは強力なファイルシステムであるZFSが使える(このときはまだLinuxで動くZFSFUSE経由のものしかなかった)

こんな感じでした。ZFSについてはweb上にたくさん情報があるのでそちらを参照してください。ZFSiSCSIのボリュームを構築することで簡単にスナップショットでバックアップができたり、世代管理ができたり、別のサーバにバックアップを増分転送できたりいっぱいいいことあります。パフォーマンス出すにはそれなりの環境がいりますけど。

続きを読む

OpenIndianaでVRRPをいじった

OpenIndianaをやっといじり始めた今日この頃なわけですが、早速VRRPを試してみました。VRRPはOpenSolais b134でも使えたのでその時もさわりで試したことはあるんですが改めていじってみました。OpenSolais 2009.06には実装されていません。

VRRPとは

一応VRRPについて。VRRPVirtual Router Redundancy Protocolで仮想ルータ冗長プロトコルです。そのまま。

wikipedia:VRRP

簡単な言い方をすれば、物理NICが持っているIPアドレスとは別のIPアドレスを設定し、それを異なるルータ間で優先順位(Priority)に基づいて仮想NIC(仮想MACアドレス)でバインドするイメージ。お互いを監視しあいマスターとなっているルータが落ちたらバックアップルータがそのIPアドレスを掴むことでネットワーク上にIPアドレスが存在し続けます。(あってるよね?)
その名の通り元はルータの冗長化のためのもの?ですが、別にルータ用途でなくても使えます。LinuxにあるkeepalivedやheartbeatもVRRPの実装でサーバの冗長性を保つアプリケーションです。LVSでのロードバランサやDRBDなどで使われてます。うちの会社でも使ってます。

続きを読む

ZFSでintel SSDを使うときの手順みたいなもの

久々のエントリ。3ヶ月半ぐらい放置してしまった。ここ最近は業務が忙しいのもあってすっかりOpenSolaisもご無沙汰だったわけですが、そろそろまたストレージをいじらないといけなくなる模様。まあいじるというか試行錯誤の日々がはじまると言ったほうが適当か。

ともあれこの3ヶ月余りでOpenSolais周りもいろいろあり、ディストリビューションとしてのOpenSolaisはなくなっちゃったわけですが、今後はOpenIndianaとして継続されるようなので一安心。

うちは仮想環境の共有iSCSIストレージとしてOpenSolaisをCOMSTARで使っているので、なくなったらちょっと困る。というかだいぶ困る。iSCSI自体はLinuxでもあるけどZFSで使いたい。FreeBSDでもあるけどCOMSTARがない。というわけでIllumos Projectの方で存続してくれるようでよかったなぁというところ。
最近はNexentaStorとかも使って社内環境で実際に使ってもいるけども、OpenSolais(OpenIndiana)と比べると一長一短。まあこれはまた別の機会に。

続きを読む

XeonでWindows7の静音PCを作ってみた

いろいろ試行錯誤してやっとのことでメインPCの環境移行が終わった。構成の参考になるかもというのと自分の試行錯誤の記録としてエントリとして残しておこうと思う。
といってもハイエンド/高性能バリバリなXeonではなくL3426なので特別難しいというわけでもないんですけど。。。

コンセプトとか

用途
目標

折角の自作なので、自作じゃないと手に入らない構成ということで以下のような感じ。

  • Windows7 Enterprise 64bit
  • CPUはXeon
  • 電源のACアダプタ化で静音&省電力
  • 可能な限り省スペースでいらないものは搭載しない
  • 拡張スロットは以下最低限必須
    • PCI-Ex16
    • PCI-Ex1
    • PCIx1
  • データはすべてiSCSIストレージの別鯖へ格納
    • OpenSolarisでこちらも自作。そのうち別エントリで紹介予定。

ちなみに旧構成はCore2 Quad Q9650(3.0GHz)でした。

具体的に

パーツ構成

パーツ構成はこんな感じです。
画像はめんどくさいので撮ってません。パーツ画像が観たい方はリンク先参照で。。。

パーツ名 参考単価
OS Windows7 Enterprise 64bit \15,000ぐらい
CPU intel Xeon L3426 \29,000ぐらい
マザー Gigabyte GA-P55M-UD4 \9,000ぐらい
ケース SilverStone SST-SG03B-F \11,000ぐらい
SSD PQI X25-M(intel OEM品) \18,800
グラボ Sapphire RADEON HD5450 \5,380
NIC intel Gigabit CT Desktop Adapter EXPI9301CT \3,800ぐらい
電源 picoPSU-150-XT \15,970
CPUクーラー SCYTHE MUGEN∞2(無限2) Rev.B \3,570
メモリ Corsair CM3X2G1600C9 \14,000
ケースファン SilverStone SST-AP121 \1,880
CPUファン Coolink SWiF2-120P \1,290
合計   \130,000弱

消費電力(ワットチェッカー読み、HT:有効)

  • アイドル時:42W
  • 最大負荷時(Prime95):102W

CPU温度(CoreTemp読み)

  • アイドル時:32度ぐらい
  • 最大負荷時(Prime95):55度ぐらい

Windows7 エクスペリエンスインデックス

ゲームはしないからグラフィックスコアは4超えてたら問題ないでしょう。あとはすべて7超えてますね。ちなみに2.3GHzまでOCしたらCPUのスコアは7.3になりました。

CPUとマザー

CPUは最初からXeon L3426一択。こいつは定格で1.86GHz動作なんですが、TurboBoostが効くと最大3.20GHzまで上昇(1コア)。この上がり幅が最大の魅力です。用途としてはネットと動画視聴がメインで重たい処理はたまの動画編集と動画エンコなので問題なし。4コアにフルで負荷がかかる場合はブーストしないので、そこがメインの用途だと物足りないかもしれません。

Xeon L3426は一般的なLGA1156のマザーで動作するので選択肢は多かったんですが、マザーはGigabyteのリビジョン商法による切り替わりのタイミングで在庫処分になっていたRev.1.0をチョイス。15,000円ぐらいするのが9,000円弱で手に入ったのでこれにしました。ASRockのP55、H55マザーだと正式にXeonサポート謳ってたりするんですが(流石変態マザーベンダーと言われるだけはある)、一般的には動作確認は取れててもメーカーの正式サポート対象にはならないので注意が必要です。
あとH55、H57マザーでも動作するみたいですがCPUにグラフィック機能がないのでグラボが必要です。念のため。

ケースとCPUクーラーとファン

ケースはMicro-ATXでなるべく省スペースということでSST-SG03B-Fをチョイス。外寸は(W)200×(H)360×(D)312mm。Micro-ATXケースとしては定番ぽくなってるようで、あれこれ試行錯誤する人には人気が高いようです。
実は今回一番悩みまくったのがケース選びで、他にもスリムケースなども候補として考えたんですが排熱のことを考えると省スペースを狙いすぎるよりはある程度エアフローに余裕のある構成にした方が静音化はしやすいだろうと結論づけました。当たり前なんですけどね。どのあたりに妥協点を持ってくるかでアキバでケースを見て回り、ネットを徘徊した挙句の結論がこのケースでした。
このケースのポイントは奥行きの短さと幅の厚みです。言ってしまえばずんぐりむっくりな感じなんですがこの幅がポイントです。通常のATX電源を搭載する場合マザーの手前にくるので、CPUクーラーの高さがかなり制限されます(80mmぐらい)。ところが電源をpicoPSU化するとこの電源スペースが完全に空くことになるので160mmぐらいのCPUクーラーが装着できるようになります。これは静音化を考える上で非常に重要です。放熱部分を大きく取れればそれだけCPUファンの回転数を抑えることが可能になるわけです。
今回は無限2が安く手に入ったのでこれにしました。冷やすことにこだわるならハイエンドのCPUクーラーを選択することになりますが、今回はTDP45WのCPUなのでこれで十分です。
さらにこのケースは12cmケースファンを前面に2個搭載できます。標準で2個ついてます。ただ今回はケースファンをSST-AP121に換装しました。このファンは徹甲弾ファンと言われ、指向性を持ったエアフローが可能になります。風が拡散せずに直進するので、風量を抑えめにしても今回の構成には十分なエアフローが得られました。販売開始時の記事で存在は知ってはいたんですが疑ってました。でも実際にアキバのソフマップのデモを見て、本当に風が直進していたのでびっくり。即決しました。
今回の構成ではCPUファンだけで上段部のエアフローが十分なので、ケースファンはSST-AP121を下段にのみ装着して上段は取り外しました。

ただこのケースファンは12Vで通常動作させると結構うるさいです。今回は静音重視で5Vで動作させています。これでも今回の構成では十分なエアフローをつくれます。ファン自体は静音設計になっているわけではないのでこの点は注意です。

SSD

静音かつ低消費電力で考えるならSSDしかないわけです。じゃあ800GB近いデータをどうするのかということになるわけですが、これは以前のエントリでもちょろっと触れた通り別途OpenSolarisiSCSIサーバへ格納しました。1000BASE-Tなネットワークであれば十分な速度が出ます。ストレージ側はZFSで構成してあるので

となります。
このあたりは別エントリでそのうち紹介します。

というわけで、メインPC本体はシステム領域のみでOKなので80GBのSSDで十分です。intelコントローラは性能劣化も激しいですが、Windowsで使用する限りはtrimのツールもあります。なので予備領域をあえて作る必要もないのでフルに使えます。
また今回はPQIOEM品を特価で入手しました。PQIと言っても中身はそのままintel X25-Mなのでお買い得です。当然trimにも対応してます。
発熱も問題ないので、自分はSSD光学ドライブの後ろのスペースのPCIスロットスペースにマウントしてあります。ここが今回のケースの面白い部分で、背面上部にPCIスロットのスペースがあります。ここに2.5インチディスクマウンタを使ってSSDを固定することで光学ドライブと配線を1本化することができました。配線的にもスッキリです。

グラボ

RADEON 5450のファンレスモデルをチョイス。ゲームしないのでローエンドのもので問題ありませんでした。ローエンドでも出力はD-sub、DVI、HDMIの3つがありDirectX11にも対応してます。Flash Player10.1からハードウェア再生支援に対応したのでその部分でどうかと思ったんですが問題ありませんでした。
ファンレスモデルなので排熱が心配でしたが、先述したケースファンでこの部分は解消出来ていると思います。ケースファン下段の風はちょうど拡張スロット部分に当たるようになっています。

CPUファン

静音化を目指す上で静音ファンはかかせません。クーラーにはファンが付属していましたが当然交換。今回選んだのはPWMのファンだったんですが、結論としてはPWMは不要でした。可変回転数にしなくても800RPMで十分な冷却が得られました。100%フルロードしてもcoretempで60度ぐらいなので問題ないでしょう。
このファンは最大で1700RPMぐらいまで回転数があがりますが、MAXで回転すると結構うるさく静音とはとても言えません。ただ最低速で回転させてるうちは非常に静かです。

電源

picoPSUでACアダプタ化しました。これが今回の一番のポイントです。先述した通り、これによりCPUクーラーを最大化→静音化が可能になります。また電源もファンレスになるのでこの部分でも有利ですし、熱源がPC内からなくなり冷却面でも有利になります。ATX電源部分はATX電源用ブランクパネルを装着してファン部分にメッシュを付けて通気性も確保してあります(参考記事)。
このpicoPSUは今回150WACアダプタで使用しています。最大変換効率95%をうたっています。ACアダプタは基本的に変換効率が高いんですが、これはアイドル時でも90%超えなので省電力です。通常のATX電源が80 PLUS GOLDで90%なので、構成的に消費電力が150W以下におさまるのならATX電源よりACアダプタがおすすめです。

まとめ

メイン環境を移行して1週間以上経過しましたが、すこぶる順調です。デスクトップで自分のほぼ真横に置いていますが非常に静かです。耳を近づけるとさすがにファンの音はしますが、50cmも離れればほとんど音は聞こえません。

システムもSSDで非常に快適です。データドライブのiSCSIサーバも静音&省電力にしているので今までより静かになりました。iSCSIのストレージサーバは常時起動させっぱなしですが就寝時も音は聞こえないので問題ありません。現在のところ稼働させてませんが*1、PT1による2チャンネル同時録画&同時再生も問題ありません。

微妙にオーバークロックとかも試しましたが最大負荷165Wぐらいで落ちました。2.4GHZぐらいまでなら設定詰めればOCも出来るかもしれません。
また今回別で検討していたアーキサイトのI-T Power ACアダプターを使えばグラボのアップグレードとOCも可能だと思います。このACアダプタセットは2個接続することで最大300Wまでパワーアップできます。最初これで検討していて購入もしたんですがメインPCでの使用は断念しました。*2
参考までにですが、このアダプタをこのケースで使用する場合は電源部分にコンバータを設置する必要があるのでCPUクーラーを選びます。おすすめは鎌アングルです。ちょうど出っ張り部分を回避して装着できるのでぴったり収まると思います。

64bit環境も今のところ問題ありません。アプリもすべて互換モードで動作しますし、常用していたものはすべて動いています。乗換でここが一番の懸念点だったんですが杞憂でした。

そのうちストレージの方もまとめ書きます。

*1:64bit版で動かす場合はドライバの署名の問題でテストモードにしないといけないようです。これによりBD再生に支障が出る場合があるらしいのでPT1鯖は別で用意することにしました

*2:iSCSIストレージ側で稼働中です

Windows7をOpenSolaris ZFSストレージからiSCSIブートする

自作erだとRAIDカードでハードウェアRAIDしてる人も多いんじゃないかと思いますが、2010年代には流行らない。時代はiSCSIブートでストレージ側でデータ冗長化ですよ。


・・・などとは言い過ぎかもしれませんが、ZFS使えばそれなりのものはできるかもしれません。
前々から[twitter:@satokaz]さんが「ファーム書き換えでEXPI9301CTがiSCSIブートのHBAになる」と言っていたので、できるというのは知ってはいたんですが手を出してませんでした。NIC持ってるのに。。。
しかしお休みだった今日、Twitterで[twitter:@team_eririn]さんがつぶやいているのを見てこのことを思い出し、環境あるし時間あるしやってみるかというわけでチャレンジ。

  • HDDの障害には強いがRAIDカードが死んだらデータも死ぬ
    • 予備で持っておく必要がある
  • それなりの性能出すにはそれなりの金額が必要

自作PCRAIDカードを使ったことはないのでそれにはそれのメリットあるのかもしれません。業務のサーバではRAIDカードを使ってますけど。

どうせハードウェアにお金かけるなら

NICとストレージにお金かけてみるのもいいのではと思ったり。ストレージはZFSで、RAIDカードなくてもそこそこのCPU(AMDだと低電圧クアッドコアとかでも1万ちょい)とメモリ4Gもあれば十分実用的に使えます。
NICiSCSIブート可能なギガビットのものが、安いものだと4000円しないであります(intel EXPI9301CT)。
ZFSストレージ側でスナップショットによる世代管理もできるし、差分スナップショットで容量も節約できます。圧縮や重複排除で更に容量節約もできます。オートスナップショットもあります。ああ、素晴らしきかなZFS
こんだけあればWinodws側でバックアップの設定やソフトは必要なくなるはず。さらにストレージ自体のバックアップもZFSのsend/receiveで簡単にできるのでより保守性を高めることもできます。

というわけでWinodws7でEXPI9301CT使ってiSCSIブートするための手順のメモ

NICファームウェア書き換え

EXPI9301CTのカードはデフォルトではPXEブート対応になってます。このままではiSCSIブートのHBAとしては使えないので、こいつをiSCSI用のファームに書き換えてしまう。もちろん不要なら元に戻すことも可能です。

書き換え手順
  1. ダウンロード・センターIntel® iSCSI Remote Boot Setup Utilityのダウンロード。2010/06時点の最新は15.​​2。
  2. exeを展開したフォルダをまるごとDOS起動できるUSBメモリの任意の場所にコピー
  3. USBメモリDOS起動
  4. iscsiutl.exeを以下のコマンドで実行(デフォルトだとIntel15.2\iSCSIUtl\DOS\iscsiutl.exeにある)。コマンド実行後、バックアップの確認と実行確認の後で書き換えが始まります。複数ある場合、すべてのNICをが対象になるので注意。−NICで指定できるらしいけどエラーになります(オプションの組み合わせに問題があるかも)。コマンドの詳細はREADME参照。
iscsiutl -ALL -UP

以上でBoot ROM Typeの部分がiSCSI EnabledになればOK。

設定

書き換え後再起動して

  1. バイス認識の部分でCtrl+Dで設定画面へ
  2. イニシエータとしてのIPアドレスの設定とOpenSolarisZFSストレージ側のIPアドレスiSCSIターゲット名の設定
  3. LUNの設定もあるので、ストレージ側のLUNをセットすれば任意のディスクを選べるはず(LUN 0でしか試してない)
  4. 起動対象のNICをPRIMARY状態にする
    • Pキーでセット。Dキーで無効化。

これできちんと認識できていれば起動時にZFSストレージ側のディスクを認識しにいきます。認識できればただのブロックデバイスになるので、当然OSのインストールが可能です。

感想

試しに入れた感じとしては、ローカルデバイス(SSD)には劣るけど、問題なく使えるのではというところです。
というのもWindows7導入にあたって今回はローカルデバイスで普通にX25-Mを使うつもりなのであくまで検証どまりなので。。。
複数枚のNICがあってストレージ接続専用のNICにしておけば十分使えるのではないでしょうか。個人的にはローカルのSSDの快適さにはまだ勝てないのでメイン環境への投入は見送りますが、10Gのネットワーク環境を導入する段階で再検証してみたいと思います。

PXEブート用のファームウェアに戻す

基本的にiSCSIファームウェアへの書き換えと同じ

  1. ダウンロード・センターIntel® Boot Agent for Intel® Network Adaptersをダウンロード。
  2. exeを展開したフォルダをまるごとDOS起動できるUSBメモリの任意の場所にコピー
  3. USBメモリDOS起動
  4. IBAUtil.exeを実行(デフォルトだとPROBOOT\IBAUtil.exe)。コマンド実行後、バックアップの確認と実行確認の後で書き換えが始まります。複数ある場合、すべてのNICをが対象になるので注意。−NICで指定できるらしいけどエラーになります(オプションの組み合わせに問題があるかも)。コマンドの詳細はREADME参照。
iscsiutl -ALL -UP

以上でPXEブート用のファームウェアに戻せます。

注意点

試しにメインマシン(ASUSマザー P5Q-E)で試したらうまくできたけど、別マシン(GIGABYTEマザー P55M-UD4)だとNICの認識の段階で止まったまま進まなくなった。ハードウェアの相性があるかもしれない。
この場合ファームの書き換えのUSBブートまですら行けないのでどうにもならない。。。別のマシンで書き戻すと普通に認識して使えるので謎。試す場合は注意。

まとめ

Winodwsに限らずLinuxでも普通にできるので、サーバはすべてiSCSIブートにしてストレージへデータを集約というのもできます。なんで今まで試さなかったんだろうと小一時間(ry
まあ実際にはメリット・デメリットを見極めて試した方がいいですね

WindowsiSCSIブートについてはハードウェアRAIDの対比から入りましたが、そのあたりは正直両方試したわけではないのであくまでも推測の範囲内なのであしからず。実際にハードウェアRAIDで運用してる人はそれなりのメリットがあるでしょう。ただ素のHDDへのインストールとであればIOPS的にもiSCSIの方が勝ると思います。連続読み書きは負けますが、ランダムのIOPSでは優秀だと思います。
しかしそもそもストレージが動いてないとメインが稼働できないですし、ストレージが飛んだらすべてが死に絶えます。なので一般的にはとても敷居が高いですが、サーバ触れる人には面白いんじゃないでしょうか。

自分的には10GのNIC導入したらZFSストレージに一本化したいところです。スイッチは高いので1対1接続ですけど。


参考リンク

次の展開とか

以前のNAS(というかiSCSIのDAS)関係のエントリに思ったよりアクセスがあったので、その後の展開も書きたいと思ってます。ずっとハードウェアの構成を試行錯誤していて、やっと実作業に乗り出した段階です。
Twitterでも色々助言をもらったりしてます。ハードウェアについては選定にかなり悩みました。そのあたりの顛末も追々エントリとしてまとめていきたいと思っているので、何か気づいた点とかアドバイスとかあればお願いします。

OpenSolarisでintel SSDを使う場合に未使用領域を作る理由

Trimが無いorデバイスに対応していない場合についての考察なんですが、以前から考えていた部分について書いてみたいと思います。OpenSolarisに限った話ではないんですが、とりあえず今はSSDを使う環境がWindows7以外ではOpenSolarisが多いのでそっちの方向で書きたいと思います。
今日のTwitterのTLで@kohjuさんがiSCSISSDをZILに使うかL2ARCに使うかについて述べられていたんですが、その流れで自分もあれこれSSDについてツイートしたり教えてもらったりしたので、新たに調べてことも含めてまとめたいと思います。まあ自分のはほとんど質問込みのツイートなんですが(;・∀・)
どこまで正しいのか分からない部分があるので、情報をお持ちの方はツッコミをいただけると助かります。自作ネタですね。



[2010-11-10追記]
intel SSDで予備領域を確保する手順についてのエントリを追加しました



[2011-07-03追記]
intel SSDにおけるHPAの効果とZFS のZIL(slog) on intel SSD についてのエントリを追加しました


L2ARCとZILについて

ZFSについては以下を参照してください。

ZFSには非同期にディスクに書き込みをするためにZILという機構があります。またreadキャッシュとしてARC/L2ARCというものが存在します。
以下ご存じない方に向けて簡単に書いておきます。

ARC
物理メモリでreadキャッシュとして使われます。write時にも使われます。
L2ARC
ZFSからのreadが発生した場合、まず物理メモリにキャッシュされ(ARC)あふれたものはあればL2ARCデバイスにキャッシュすることができます。L2ARCにSSDを設定することでread性能を上げることが可能になります。
ZIL
ZFSはwriteをトランザクションとして扱います。このトランザクションのログがZIL(ZFS Intent Log)。同期書き込みの場合にはwrite性能が落ちる。ZILはデフォルトでプール内に形成されるが別のデバイスを指定することができます。このデバイスSSDを用いることでwrite性能を向上させることが可能になります。ZILが使われるのは同期書き込みの要求時のみです。非同期書き込み時には使われません。

iSCSIの場合

SSDiSCSIで使うことについては上記のまとめの@kohjuさんのツイートが参考になります。実際にサービスで使われている部分からの考察です。

自分が前からやっていることは、intel SSD(X25-E/M/V)を使う場合に未使用領域を作成するということです。これはZILでもL2ARCでもやっています。具体的には容量の20%ぐらいを未使用領域でパーテションをきってます。これについては以下。

OpensolarisSSDを使う場合

intel SSDの特性

intelSSDはランダムのI/Oの性能が他のSSDより圧倒的に勝ってます。特にwrite時は他のものの倍以上の性能が出る場合もあります。まあFusion-ioのような高価なものやSATA3.0 6Gbpsに対応したものは別として。。。なのでintel SSDを用いているわけですが、パフォーマンスの劣化も他製品に比べて大きかったりします。これは以前からいわれている部分でそのためWindows環境ではtrimコマンドに対応しています。intelSSDはこのTrimコマンドによるパフォーマンスの回復が大きいです。
一方東芝やIndilinxのコントローラの製品はそもそものパフォーマンスはintelより劣るものの、何もしなくても劣化がゆるやかです。このあたりは最近でた以下の記事が参考になります。

未使用領域を作っておく理由

SSDでは予め使用不可能な予備領域が用意されていますが、未使用領域をとっておくことでSSDのコントローラが未使用と判断する領域が増えるとされています。この未使用領域というのはSSDのコントローラからみた未使用領域のことでOSが一度でもファイルシステムの作成/書き込み消去を行って開放されたブロックは該当しません。これはOSが未使用としている部分でもSSDのコントローラ側としてはそのデータがいらないものかどうかわからないということです。OS側からSSDのコントローラ側に「未使用ですよ、消していいですよ」と通知してあげないとコントローラは完全に削除していいものかどうか知る由がありません。この通知をおこなうのがTrimコマンドです。
OpenSolarisではTrimコマンドは現在のところ対応していません。なのでintel SSDを使っていると当然劣化していきTrimが無いので回復させることができません。なので未使用領域をとって長寿化とI/Oパフォーマンスの劣化対策としています。

このintel SSDの劣化対策についてはinetlの天野氏も言及しています。また昨年のIDFや今年のIDFでもこの件については言及されていました。

簡単にいうと、

  • 書き込みが早い未使用の領域は使うごとに減っていく
  • ガベージコレクションやスタティックウェアレベリング頻繁に起こるとデータの書き込み時以外にも書き込みが発生し寿命が縮む
  • 書き込み時の未使用領域確保確保のためのコピーや消去の処理を挟まなくて済むので余分なオーバーヘッドが無い分write性能の劣化を防ぐことができる

といった感じです。

MLCタイプのX25-Mでは予め用意されている予備領域は7%、SLCタイプでは27%とされています。なので自分はMLCタイプのSSDを使う場合は最低20%の空き領域を作っています。X25-M 80Gだと16Gを未使用とするということです。7%とあわせるとトータルで27%以上の領域になります。正確に27%に合わせてるわけではなく、わかりやすいので1/5としているだけです。

ZILに用いる場合はこの割合をもっと大きく取っていいと思います。というのもZILは最大で物理メモリの半分が有効サイズとなるので、これ以上領域が大きくても意味が無いからです。なので物理メモリが32Gとかなら16Gあれば足りる計算になります。

尚、未使用領域を取ってあるからと言っても内部的には全体の劣化が進んでいます。未使用領域の部分を使ってガベージコレクションやウェアレベリングを行っているからです。なので、未使用領域を次にまっさらな状態で使えるということにはならないので注意が必要です。

結果は?

で、実際に効果が出てるのかといわれると・・・わかりません(;・∀・)まだ数ヶ月しか使っておらず、そんなにI/Oが限界まで発生してるわけでもないので・・・。
ZILの書き込み/削除の仕組みもTwitterで色々教えていただいたものの詳細を把握してないので、こういったデスクトップ環境向けの考え方が当てはまるのかどうか。ただ、ZFSSSD使うのに未使用領域、未使用領域と言い続けていたのはこういうことを考えていたからでしたということで。今日のTwitterで色々教えて頂いたということもあったのでいい機会だと思いまとめてみました。

何か情報お持ちの方や間違いのご指摘などはTwitterやコメントで教えていただけると助かります。


以下参考

余談

うちのストレージではX25-MとX25-VがZILで稼働しています。これはイニシャルコスト的な要因です。容量というより性能と耐久性が重要なのでintel SSDで選ぶなら最適なのはSLCタイプのX25-E(32G)だと思います。容量自体が必要なL2ARCはX25-M(80G/160G)がいいと思います。
iSCSIベンチマーク的にはZILに用いるデバイスX25-EX25-MもX25-Vもあまり変わらないんですが、NCQ(Queue Depth)ことを考えるならばX25-Eが最適だと思います。ベンチマーク的にもはっきりE>M>Vの傾向がでます。

またデフラグについてですが、空き領域のデフラグができるツール(Defragglerなど)ではSSDも効果があるとされています。