自作PCサーバーの消費電力を約40W削減した話 #5 HDDを交換するその2

自作PCなど
スポンサーリンク
スポンサーリンク

自作PCサーバーで利用のNAS用RAID5のHDDを8TBx3から16TBx3のものに交換して、大容量化・高速化・省電力化を実現しました。

はじめに

自作PCサーバー上のVMにNAS(Network Attached Storage)を構築している。
NASのOSには、VMにOMV(OpenMediaVault: https://www.openmediavault.org/)をインストールして利用している。
NASはネットワークの先のストレージとのことで、PCIeの拡張SATAカード経由でHDDを3台接続し、VMにはこの拡張SATAカードをパススルー接続することで、できるだけESXiの管理下から切り離すようにしている。
また、SATAコントローラーが、M/Bのものと拡張SATAカードのものと分けることで処理の分散も意図しています。
なお、PCIeの拡張SATAカードは普通のものであり、RAID5は専用のハードを利用しないソフトウェアRAIDでの構築となっています。
ご参考:RAIDとは?
今回、拡張SATAカードとHDDを交換して、大容量化・高速化・省電力化を実現しました。

なお、「自作PCサーバーの消費電力を約40W削減した話」記事の投稿順は、作業順とは違いますのでご了承ください。

旧環境と新環境

  • 旧環境
    VM上のNAS用OSとして、OMV(https://www.openmediavault.org/)を利用しており、PCIe Gen2 x1,SATA3x4ポートの拡張SATAカード経由で、NAS用HDDのWestern Digital WD80EFAX x3で構築していました。
    拡張SATAカードのPCIeのGen2は5GT/sで、約4Gbps=約500MB/sの帯域であり、一方、SATA3は6Gbps=約600MB/s x4ポート=約2,400MB/s とアンバランスであり、構築当時にGen3のものや、x4のものなどを探しましたが、手頃な価格のものが見つからず、HDDは3台のため600×3=1,800M/s必要ですが、それほどフルにHDDアクセスすることもないだろうとのことで妥協しました。
    NAS用HDDは、購入後に気が付いたのですが、データシート(https://images-fe.ssl-images-amazon.com/images/I/91pEdV-5eBL.pdf)の稼働時(Read/Write)の消費電力が、このモデルの中で一番高い8.8Wになっており、これが3台のため26.4Wと結構大きいです。
    利用可能な容量は8TBx3台で、RAID5のパリティ分を除いて、14.95TB(正しくは14.95TiB)となりますが、構築後に分散していたファイルを集約したところ、使用率が85%を超えていました。
    OMVは、RAID5の使用率が85%を超えると警告のメールを送信してくれます。
    構築当初から、ファイルの精査が必要となる事態になっていました。
    当然ながら頻繁にできるはずもなく、新環境に移行する前には100%使い切ってしまうことが度々発生する状態になっていました。
  • 新環境
    手頃な価格のPCIe Gen3 x4,SATA3x6ポートの拡張カードを見つけたので、今回これに交換しました。
    PCIeのGen3は8GT/sで、約8Gbps=約1,000MB/sであり、これの x4=約4,000MB/sとなります。
    SATA3は600MB/s x6ポート=3,600MB/sとすべての6ポートを利用しても余裕のあるものです。
    NAS用HDDは、Western Digital WD161KFGX x3台を利用します。
    データシート(https://documents.westerndigital.com/content/dam/doc-library/ja_jp/assets/public/western-digital/product/internal-drives/wd-red-pro-hdd/product-brief-western-digital-wd-red-pro-hdd.pdf)の稼働時(Read/Write)の消費電力が、6.1Wで、3台でも18.3Wと消費電力の低減が見込めます。
    ただし、PCIeのGen2x1とGen3x4では、後者の方の消費電力が高いと推測できるため、トータルでどうなるかは未知数でした。
    容量は、16TBx3台で、RAID5のパリティ分を除いて、28.99TB(正しくは28.99TiB)となり、旧環境からデータ移行しても、約50%の使用率となります。
  • PCIe Gen2とGen3についての補足
    Gen2が5GT/s,約4Gbps=約500MB/sであるのに対して、Gen3が8GT/s,約8Gbps=約1,000MB/sと、これだけ見ると計算違いしているように見えるかもしれませんが、これは、高速シリアル転送時のデータのエンコーディングの違いによるものです。
    Gen2の高速シリアル転送は通信のレーンが1本の時、データを1Byte=8bitとして扱いますが、例えば4Byte転送するとき32bitとして転送してしまうと、データの区切りが分からなくなることがあります。
    これを防ぐために、8bit/10bitエンコーディングを利用し、データの区切りを分かりやすくするためにクロックデータを加味したものに変換することで、通信時の同期不良を低減しています。
    Gen3以降は、これを128bit/130bitエンコーディングに変更することで、通信効率が向上しているため、上記の数値になります。

旧環境でRAID5のデータ移行でトラブル発生

RAID5のHDDの中身はコピーするしかありません。
新環境は一部、旧環境から流用するパーツがあるため、新旧の環境を同時に動作させることできません。
また、検証環境と旧環境を同時に動作させることは可能ですが、LANが1Gbit(約125MB/s)のため、これがボトルネックとなりコピーに時間がかかりすぎてしまいます。
このため、旧環境に、SATAの拡張カードを2枚挿してコピーすることにしました。

なお、PCIe x16のスロットに、x4のカードを挿していますが、これはPCIeの正しい使い方です。

PCケースにHDDを6台格納するスペースは無かったので、マウンターとしてアクリル製のものを購入しました。
HDDはトータルで6台あるので、いざという時のために、6 Floorのものを選択しました。

HDDを3台搭載したときの前後の写真ですが、左側のものだと分かり安いですが、8cmのFANを2台搭載することが可能です。
今回は、ケーブルの引き回しなどの関係で、USBの小型扇風機を利用しましたが、送風しないとHDDの温度が50℃を超えてしまったので何かしらの送風が必要です。

ここまでは良かったのですが、実際にESXi(旧環境なので6.7)で、2枚のSATA拡張カードをパススルー設定して、OMVのVMを起動しようとするとBIOS画面すら出ずに終了してしまいます
B450 Pro4のUEFI-BIOSの設定画面でPCIeをx16x1からx8x2に変更したり、その他関係のありそうな設定を変更したりしました(旧環境なので、CPUに近い方いにはdGPUを搭載)が、状況は変わりません。
B450 Pro4のUEFI-BIOSは利用していたものより1つ新しい更新のものが公開されていましたが、それを試すより、新環境で試した方が速いと思い、B550 Pro4&ESXi7他に移行したら問題なくOMVのVMが起動しました

OMVでのRAID5の作成方法は、画面の指示に従えば難しくないためここでは省略しますが、新RAID5のビルドには約24時間かかりました。

OMVを長時間アクセス不可状態とするわけにもいかないので、コピーは、自作PCサーバーの消費電力を約40W削減した話 #3 HDDを交換するその1 のコピーで行った方法と同じで、旧RAID5から新RAID5へコピー(cp -drpu)し、OMVからの見え方を入れ替えてから、先のコピー中に発生した変更を適用するために、再度旧RAID5から新RAID5へコピーしました。

約15TBのコピーに約27時間40分かかりましたが、自作PCサーバーの消費電力を約40W削減した話 #3 HDDを交換するその1 のコピーの時の容量に対する速度は圧倒的に速いため、HDDが2並列(ストライピング)であると共にSATA拡張カード(SATAコントローラー)を分けているからだと推測しています。

また、OMVはディスクアクセスのログをグラフ化してくれます。
次が、コピー時の新RAID5側のグラフです。

文字の書かれた紙

中程度の精度で自動的に生成された説明

これを見ると前半は150~330MB/sぐらい、後半の落ち込んでいる部分は10~80MB/sぐらいと明確に差があります。

前半のデータは、数100MBから数10GBぐらいまでファイルサイズが大きいものが多いですが、後半のデータは、自作PCサーバーの消費電力を約40W削減した話 #3 HDDを交換するその1 のコピーのときのrsyncによるバックアップ部分であり数KBから数10MBぐらいまで比較的ファイルサイズが小さいものが多いため、そのオーバーヘッドの影響がかなり大きいことがわかります。

なお、各データシートから、8TB(WD80EFAX)の内部転送速度が210MB/sで、16TB(WD161KFGX)の内部転送速度が259MB/sの仕様です。

新旧RAID5のベンチマーク

今回は、ESXi7.0上のVLAN(仮想LAN:表記上は1Gbps)経由で、Windows10(VM)から、OMV(VM)の各RAID5に対して、Crystal Disk Mark 8.0.4 で計測(「フォルダー選択」でUNC形式のパス[\\machine\folder の形式]を指定)した結果を示します。

旧環境

グラフィカル ユーザー インターフェイス, アプリケーション, テーブル, Excel

自動的に生成された説明

SEQ1MのQ8T1やQ1T1のReadが、約1300MB/sと、10Gbps以上の性能が出ていることになっています。
Crystal Disk Markは、Readのテストをする前に、指定のサイズ(図では1GiB)のデータを作って(Writeして)から、Readを行うため、ESXi側のVLANにキャッシュされていたためでは無いかと推測しています。
ESXiのマシンには64GBのメモリを搭載しており、そのすべてをVMに割り当ててないため、キャッシュとして利用されたと推測しています。
なお、VLANの設定などはデフォルトで詳細は調べていません。

2022/11/18追記
OMVのVMに割り当ててある4GB(4GiB)のメモリの大部分がファイルキャッシュとして動作しており、Crystal Disk Markは、Readのテストをする前に、指定のサイズ(図では1GiB)のデータを作って(Writeして)から、Readを行うため、このファイルキャッシュにヒットしたものと推測できます。

新環境

旧環境と同様に、Readはキャッシュが効いている可能性があるので、Writeのみでの評価になります。

SEQ1M(シーケンシャルアクセス)では約2倍の性能が出ています。
RAID5の3台構成ですが、帯域は2並列(ストライピング)になりますので、データシートの「16TB(WD161KFGX)の内部転送速度が259MB/s」の2倍の518MB/sの約80~90%とVLANとは言えネットワーク越しの実効性能としては十分です。
旧環境と比べて、データシート上は旧RAID5が210×2=420MB/s、新RAID5が518MB/sと、旧RAID5では、拡張SATAカードのPCIe Gen2x1がボトルネックになっていたであろうことが分かります。

RND4K(ランダムアクセス)の性能はネットワーク越しのため良い悪いがあるようですが、ランダムアクセスとなる数KBから数10MBぐらいまでの比較的ファイルサイズが小さいものはrsyncによるバックアップ(ミラー)分であり、週に1回同期する設定であり、頻繁に発生しないため、気にする必要は無いと考えています。

消費電力の低減

RAID5用HDD交換前後の消費電力は次となりました。

HDD交換前消費電力:79~85W
HDD交換後消費電力:72~79W

6W程度の省電力化を確認しました。

ご参考:RAIDとは?

RAIDとは、Redundant Arrays of Independent Disksの略で、複数台のHDD(SDDでも利用可能)で冗長性を持たせてHDDの信頼性を向上させる技術です。
HDDは、ディスクをモーターで回転させ、その回転により発生する浮力により磁気ヘッドを浮上させると言う仕組みであり、振動(衝撃)に弱く、駆動部の経年劣化などにより、PCのパーツの中でも壊れやすいものの代表格です。
その壊れやすいものを出来るだけ安心して利用できるようにする仕組みがRAIDです。
なお、SSDなどでもRAIDは利用可能ですが、HDDより振動に強く/駆動部もありませんが、書き換え回数が少ない(HDDが100万~1,000万回ぐらい、SSDはSLCやQLCなどにもよりますが1,000~10万回ぐらい)ため、RAID化(1,5,6)する意味はあります(少ない部分を回避する仕組みが組み込まれていますがここでは説明しません)。
以下、HDDやSSDなどを含めてストレージと表します。

RAIDにはレベルがあり、その一部を以下に簡単に紹介します。
各レベルは単体だけでなく、組み合わせても構成可能ですが、ここでは説明しません。

RAID0

ストレージの最小構成数は、2台です。
ストライピングとも呼ばれ、データを縦縞のように分けて、別々のストレージにアクセス(読み書き)します。
ストレージと接続する経路には、SATA3の約6GbpsやNVMeのPCIe Gen3(x1)が約8Gbpsのように帯域限界があります。
もちろんストレージそのもののRead/Write(内部転送速度)性能の限界もありますが、以降はこれも含めて”帯域制限”とします。
データを分けるので、個別の帯域制限を緩和することと、利用可能な容量が台数分すべてを合算した分を利用可能となります。
ただし、構成したストレージのどれか1つが壊れた時点で、すべてのデータにアクセスできなくなるため、冗長性も信頼性も下がるため、厳密にはRAIDとは呼べません。
そのため、RAID0と、”0″レベルで呼ばれています。

RAID1

ストレージの最小構成数は、2台です。
ミラーリングとも呼ばれ、データを同時に複数のストレージにアクセス(読み書き)します。
同じデータを複数で持つため冗長性が高く、すべてのストレージが同時(リビルド前)に壊れない限り運用可能なため信頼性が高いです。
ただし、ストレージ2台で構成した場合の利用可能な容量は1台分となり、帯域の制限も変わりません

RAID5

ストレージの最小構成数は、3台です。
データそのものはストライピングでアクセスしますが、追加でデータからエラー訂正可能なパリティデータを作成しそれを分散記録します。
これにより、ストレージのどれか1台まで壊れても運用可能です。
ストレージ3台で構成した場合、2台がストライピング、1台がパリティデータですが、ブロック毎に記録する対象のストレージを入れ替えることで冗長性と信頼性を向上するとともに、帯域制限を緩和しています。
3台で構成した場合、利用可能な容量は2台分となります。
ただし、ストレージのアクセスタイミングや頻度はほぼすべて同じで、また、ストレージの調達の関係から同じ製造ロットであったりするため、多少のずれはありますが、ほぼ同時期に複数壊れる可能性が高くなります。
1台壊れたので交換後のリビルド中に他のストレージが壊れて、すべてがダメになると言うことが度々発生します
そのため、作られたのがRAID6です。

ちなみに、以前勤めていた会社でも昔(15~20年ぐらい前)、RAID5,6対応の拡張カードを作っていて、その開発のサポートをしたことがありますが、その時に聞いた話では、パリティデータ作成に、XOR(排他的論理和:EORとも呼ばれる)命令を多用するそうで、当時、x86のCPUが1GHz超えいてたりしましたが、拡張カードにそのようなものは贅沢(利用しない機能が多い)であり、専用のチップを買ってきていたと思います。
専用のチップの仕様は覚えていませんが、100~200MHzぐらいだったと思います。
現在の私のRAID5環境で利用のRyzen 5 5600Gなら基本3.9GHz、ブースト最大4.4GHzで動作するため、VM上のOMVのソフトウェアRAIDでも性能的に不足することは無いと考えています。

RAID6

ストレージの最小構成数は、4台です。
RAID5に比べて、パリティデータが2重化(冗長化)されていて、ストレージのどれかが同時に2台まで壊れても運用可能です。
ストレージ4台で構成した場合、2台がストライピング、2台がパリティデータで、RAID5と同様にブロック毎に記録する対象のストレージを入れ替えることで冗長性と信頼性を向上するとともに、帯域制限を緩和しています。
4台で構成した場合、利用可能な容量は2台分となります。
ただし、RAID5と同様にストレージのアクセスタイミングや頻度はほぼすべて同じで、また、ストレージの調達の関係から同じ製造ロットであったりするため、多少のずれはありますが、ほぼ同時期に複数壊れる可能性が高いため、1台壊れたら速やかに交換してリビルドすることが推奨されます。

最後に

旧環境の反省点から、新環境で利用する環境は、HDDのデータシートで消費電力を調べたり、PCIeとSATAの帯域のバランスを考慮したりしてボトルネックを解消をすることで、大容量化・高速化・省電力化を実現しました。

何かの参考になれば幸いです。

ご意見、ご要望、不具合などのご連絡

ご意見、ご要望、不具合などのご連絡は次からお願いします。

  • コメント
    本投稿へ下部の コメントを書き込む からご連絡ください。
    コメントは承認方式となっており、当方が承認しないと公開表示されません。
    公開表示を希望されない方はその旨コメントに記述ください。
  • Twitter
    ご連絡は @dratech2020 https://twitter.com/dratech2020 の該当ツイートに返信するか、ハッシュタグ「#プログラミングの深淵を求めて」を付けてツイートしてください。 (すぐに気が付かない場合がありますので、ご了承ください)

関連投稿

コメント

タイトルとURLをコピーしました