RAS機能の原理 ─ マシンチェック・メモリミラーリング・ページリタイア
なぜサーバーは1ビット化けで止まらず故障部位を切り離せるのか。マシンチェックアーキテクチャ・メモリミラー・ページリタイアの原理を押さえ、可用性設計の勘所を掴めます。
- 1.MCA(マシンチェックアーキテクチャ)はハードが検出したエラーをバンクごとのMSRに記録し、訂正可能エラーは継続・訂正不能エラーは例外で通知する役割分担で可用性を保つ。
- 2.メモリミラーリングは同一データを2チャネルに二重化して訂正不能エラーを健全側で吸収し、ランクスペアリングは劣化したランクを予備ランクへ無停止でコピー退避する。
- 3.ページリタイアはエラーが頻発する物理ページをOSがソフトオフラインで使用停止リストに退避し、訂正不能エラーへ悪化する前に二度と割り当てないようにする。
RASとは何を保証する仕組みか
RAS は Reliability(信頼性)・Availability(可用性)・Serviceability(保守性)の頭字語で、サーバーが部品故障に直面しても「止まらない・データを壊さない・停止せず直せる」ことを狙う一連のハード/ファーム/OS連携機能の総称です。
エンタープライズ機の前提は、メモリやリンクのビット化けが例外ではなく日常的に起きることです。大容量DRAMでは宇宙線由来のソフトエラーが統計的に避けられず、セル劣化による恒久故障も蓄積します。ここで効くのがECCメモリによる検出訂正ですが、ECCは「直せた/直せない」を判定するだけで、その結果をどう処理し、劣化部位をどう切り離すかは上位の枠組みが担います。RASとは、ECCの判定を起点にエラーを分類し、可用性を保ったまま故障を局所化する仕組みだと言えます。
RASの責務の分担
ECC/CRC : ビット単位の検出・訂正(直す)
MCA : エラーの記録・分類・通知(伝える)
ミラー/スペア : 冗長資源への切り替え(隠す)
ページリタイア: 劣化部位の恒久退避(捨てる)
マシンチェックアーキテクチャ(MCA)
CPUがメモリ・キャッシュ・リンクで検出したハードウェアエラーを記録・通知する標準枠組みが MCA(Machine Check Architecture) です。x86では、エラー源をバンクという単位に分け、各バンクが専用のMSR(モデル固有レジスタ)群を持ちます。
バンクごとのレジスタ(IA32_MCi_*)
MCi_STATUS : エラーの有無・種別・訂正可否を示すステータス
MCi_ADDR : エラーが起きた物理アドレス
MCi_MISC : 補足情報(どのDIMM・ランク・列か等)
MCi_CTL : このバンクの報告を有効化するマスク
エラーが起きると、ハードが該当バンクの MCi_STATUS に種別とアドレスを書き込みます。STATUS の中の UC ビット(Uncorrected) が立っているかどうかが分岐点です。
- 訂正可能エラー(CE: Corrected Error): ECCが既に直したので処理は継続。ステータスだけ残し、割り込み(CMCI)やポーリングでファーム/OSへ集計させます。
- 訂正不能エラー(UC: Uncorrected Error): 直せなかったため、マシンチェック例外(#MC, ベクタ18) を発生させて即座にハンドラへ制御を移します。
UCの中でもさらに段階があります。誤った値がCPUコアに読み込まれて即破綻するなら緊急停止しかありませんが、近年の MCA Recovery(SRAO/SRAR) では、訂正不能でも「まだ消費されていない(待機中)」エラーと「今まさに消費した」エラーを区別します。前者は該当ページを退避するだけで継続でき、後者も該当プロセスだけをkillしてOSは生き残れる場合があります。全システム停止を最後の手段に追いやるのがMCA Recoveryの狙いです。
訂正可能エラーをただ無視しないのが重要です。同一アドレスでCEが繰り返し増えていく状況は、そのセルが恒久故障へ向かう前兆だからです。MCAはCEの発生頻度を可視化し、後述のページリタイアやスペアリングを発動する判断材料を上位に渡します。
メモリミラーリングとランクスペアリング
ECCは1ワード内の1ビット(チップキルならチップ1個)までしか直せません。これを超える訂正不能エラーでも可用性を保つには、メモリ自体を冗長化します。代表が2方式です。
メモリミラーリングは、同一データを2つのチャネル(または2組のDIMM)に二重に書き、読み出しは片側(プライマリ)から行います。プライマリで訂正不能エラーが出た瞬間、ミラー側の健全なコピーへ透過的に切り替えて読み直します。RAID 1のメモリ版で、利点は訂正不能エラーすら隠せること、代償は実効容量が半分になることです。
ランクスペアリングは、予備のランク(DIMM上の独立した記憶単位群)を1つ確保しておき、稼働中のあるランクでCEがしきい値を超えたら、その内容を予備ランクへ無停止でコピー(フェイルオーバー)して以後そちらを使います。劣化したランクが訂正不能エラーへ悪化する前に丸ごと退避する予防的手法で、容量の犠牲はミラーより小さい(予備ランク1つ分)代わりに、守れるのは劣化の前兆を捉えられた場合に限られます。
| 方式 | 冗長の単位 | 容量コスト | 防げるもの | 発動契機 |
|---|---|---|---|---|
| ECC(SECDED) | 符号内ビット | 約12.5% | 1ビット訂正・2ビット検出 | 毎アクセス |
| メモリミラー | チャネル全体 | 実効50% | 訂正不能エラーを即吸収 | UC発生の瞬間 |
| ランクスペア | 予備ランク1つ | ランク1つ分 | 劣化ランクの恒久退避 | CEがしきい値超過 |
| ページリタイア | 物理ページ | 数ページ分 | 不良ページの再利用阻止 | CE頻発・UC待機 |
ミラーは故障の瞬間に反応できますが、スペアリングはCEの蓄積という前兆があって初めてコピーを開始できます。突発的な訂正不能エラーには間に合いません。だからミラーは「事後の吸収」、スペアリングは「事前の予防」と役割が異なり、可用性要件に応じて使い分けます。両者はBIOS/ファーム設定でメモリモードとして選択するのが一般的です。
ページリタイア ─ 不良ページのソフトオフライン
ハードの冗長機構が物理層で守る一方、OS側でも劣化メモリを切り離せます。それが ページリタイア(メモリページのソフトオフライン) です。MCAが報告した物理アドレスから不良のページを特定し、そのページを二度と割り当てないよう退避します。
鍵は「ソフトオフライン」という退避の作法です。訂正不能エラーで今まさに破綻したのでなく、CEが頻発する/UCだが値がまだ消費されていない、というまだ救える段階では、ページの中身を別の健全なページへ移してから元ページを使用停止リストへ送れます。
ソフトオフラインの流れ(Linuxの例)
1. MCA/CMCI が不良物理アドレスを報告
2. アドレスを含む物理ページを特定
3. 使用中なら内容を健全な別ページへ移送(migrate)
ファイル裏付けページは書き戻し or 破棄
4. 元ページをフリーリストから外し HWPoison として隔離
5. 以後そのページフレームは二度と割り当てない
これに対し、訂正不能エラーで既に汚れた値を読んでしまった緊急時は移送する余裕がなく、ハード(ハードオフライン)が即座にそのページを毒(poison)扱いし、触れたプロセスを巻き込んで隔離します。ソフトオフラインが「悪化前の予防退避」、ハードオフラインが「事後の被害局所化」という関係です。
リタイアは恒久的で、退避済みページは再起動をまたいでファームが記憶し続ける実装もあります(PPR: Post Package Repair など、行単位の恒久修復をDRAM内で行う機構と連携)。1ページ(典型的に4KiB)を捨てる代償は数GBのメモリから見れば無視できる一方、放置すれば訂正不能エラーで割り込み・例外経由のクラッシュに至り得る不良ページを、静かに使用圏外へ追い出せます。
ページリタイアが効くのは「特定の少数ページに劣化が局在する」場合です。DIMM全体が劣化したりアドレスデコーダ側が壊れたりすると、リタイア候補が際限なく増え、最終的にメモリ容量を食いつぶします。リタイア件数の急増はDIMM交換のサインであり、リタイアはあくまで保守の時間を稼ぐ延命策だと理解すべきです。RASの最終目的は無停止での部品交換(保守性)にあります。
機能はどう連携して可用性を生むか
各機能は独立ではなく、エラーの「重さ」と「時間軸」に沿って連携します。
時間軸でのエスカレーション
軽 CE散発 -> ECCが訂正・MCAが記録(無対応)
CE頻発 -> ページリタイア / ランクスペアへフェイルオーバー
UC(待機) -> ソフトオフラインで該当ページ退避・継続
UC(消費) -> MCA Recoveryで該当プロセスkill or ミラー切替
重 致命的 -> マシンチェック例外で安全に停止
下流のECCがビットを直し、MCAがそれを分類・記録し、頻度が前兆に達すればスペアリングやページリタイアが部位を切り離し、それでも訂正不能エラーが来ればミラーやMCA Recoveryが吸収する——この多層防御により、単一部品の劣化をシステム停止に到達させないのがRASの設計思想です。各層はECCの符号理論という土台の上に積まれ、メモリ階層全体の信頼性を底上げします。
「MCAはバンクごとのMSRにエラーを記録し、UCビットで訂正可能(継続)/訂正不能(#MC例外)を分岐」「メモリミラーは二重化で訂正不能エラーを即吸収・実効容量半減」「ランクスペアはCEしきい値超過を契機に予備ランクへ無停止退避」「ページリタイア=ソフトオフラインで不良ページを移送して恒久隔離」の対応を押さえましょう。CE=corrected(継続)とUC=uncorrected(例外)の違いが分岐の核心です。
まとめ
- RAS はECC/MCA/冗長資源/OS退避を連携させ、部品劣化をシステム停止に至らせない多層防御の総称である。
- MCA はバンクごとのMSRにエラーを記録し、UCビットで訂正可能(継続)と訂正不能(マシンチェック例外)を分岐、CEの頻度を前兆として上位へ渡す。
- メモリミラーは二重化で訂正不能エラーを即時吸収(実効容量半減)、ランクスペアはCEのしきい値超過を契機に予備ランクへ無停止退避する。
- ページリタイアは不良ページをソフトオフラインで移送・恒久隔離し、訂正不能エラーへの悪化を防いで部品交換までの時間を稼ぐ。
ビット化けの源と訂正の数理はECCメモリの章が、エラー通知が乗る割り込み・例外の経路はその専用記事が掘り下げます。
CPU/メモリ/ディスク Article
RAS機能の原理 ─ マシンチェック・メモリミラーリング・ページリタイアを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
RAS
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 6
導入後に効く点
メモリミラーリングは同一データを2チャネルに二重化して訂正不能エラーを健全側で吸収し、ランクスペアリングは劣化したランクを予備ランクへ無停止でコピー退避する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「RAS / MCA」に近いか確認する。
- 強みである「MCA(マシンチェックアーキテクチャ)はハードが検出したエラーをバンクごとのMSRに記録し、訂正可能エラーは継続・訂正不能エラーは例外で通知する役割分担で可用性を保つ。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。