パリティメモリとは何か?仕組み・利点・限界・ECCとの違いを徹底解説

はじめに — パリティメモリの意義

コンピュータのメモリにおける誤り検出・訂正は、システムの信頼性を左右する重要な要素です。その中で「パリティメモリ(parity memory)」は、単純で低コストな誤り検出手法として長く用いられてきました。本コラムでは、パリティメモリの原理、実装形態、メリット・デメリット、近年主流のECC(エラー訂正符号)との違い、運用上の注意点までを深掘りします。

パリティの基本原理

パリティは、データビット列に追加される1ビットの「検査ビット(パリティビット)」を用いて、ビット反転などの誤りを検出する最も単純な方式です。構成は次の通りです。

  • 偶数パリティ(Even parity):データとパリティビットを合わせた1の数が偶数になるようにパリティビットを設定する。
  • 奇数パリティ(Odd parity):合計の1の数が奇数になるように設定する。

技術的にはパリティビットはデータビットのXOR(排他的論理和)で計算できます。読み出し時にメモリコントローラがデータのXORと保存されているパリティビットを比較し、不一致であればエラー(パリティエラー)として検出します。

ハードウェア実装の概観

パリティを実現するためにはデータ幅に応じて追加のビット幅が必要になります。典型的には1バイト単位(8ビット)ごとに1ビットのパリティを付ける方式が多く、これにより8ビット単位の誤りを検出できます。モジュールレベルでは、パリティ対応のメモリモジュール(パリティDIMM)には、データ用ビットに加えてパリティ用のチップや配線が追加されています。

歴史的に、個人向けPCではパリティ対応メモリが一時期存在しましたが、近年はコストと性能面で劣ることから一般PCではほとんど使われません。一方、サーバやワークステーションではECCメモリが主流となっています。

パリティが検出できる誤り・できない誤り

パリティは「奇数個のビットが反転した場合」に必ず検出できます。例えば単一ビット誤り(single-bit error)は検出可能です。しかし、次のような制限があります。

  • 偶数個(2、4…)のビット反転が同じ単位内で発生した場合、パリティは変わらず誤りを検出できない(偽陽性を出さない一方、偽陰性が存在する)。
  • 検出は可能でも訂正はできない。したがって、エラーが検出された時点でブロックやシステムを停止して原因を調査するか、再試行で回避を試みる必要がある。

パリティとECC(エラー訂正符号)の違い

ECCはパリティの機能を拡張したもので、典型的にはHamming符号などを用いて単一ビットの訂正(SEC:Single Error Correct)と二重ビットの検出(DED:Double Error Detect)を同時に実現するSECDED方式が広く使われています。主な相違点は次の通りです。

  • 検出能力:パリティは奇数個の反転のみ検出。ECCは多くの場合、単一ビットの訂正と二重ビットの検出が可能。
  • 訂正機能:パリティは訂正不能。ECCは単一ビットを自動修正し、システムの停止を回避できる。
  • オーバーヘッド:どちらも追加ビットを必要とするが、ECCはより複雑な符号化・復号処理が必要でメモリコントローラの処理が増える。物理的には64ビット幅のデータに対して典型的に8ビットの検査/訂正情報を持つ(72ビット幅など)実装が一般的で、パリティ実装と比べて若干コスト高。
  • 運用影響:ECC搭載システムはソフトエラー(一次的/ソフト)を自動で訂正できるため、長時間稼働するサーバや重要システムで好まれる。

実際の挙動とOS対応

パリティエラーが発生した場合、実装と設定によって挙動は異なります。古典的なPCではパリティエラーが発生するとBIOSやCPUがNMI(ノンマスク割り込み)を発生させ、OSは「マシンチェック」や「パリティエラー」としてログに記録し、重大な場合はシステム停止(カーネルパニック)することがあります。サーバ向けのECCでは、コントローラがエラーを訂正し、ログとして記録した上で処理を継続することが一般的です。

LinuxやWindowsにはメモリエラーを報告・監視する仕組みがあります。Linuxではedacドライバやdmesg/udev経由でECCやパリティエラーの情報を取得できます。Windowsではイベントログやマザーボードベンダー提供のユーティリティが利用されます(BIOSのエラー報告機能と連携)。

用途と採用判断

どのような環境でパリティを採用するべきかは、次の観点で判断されます。

  • 重要度:データの整合性が極めて重要(金融・医療・ミッションクリティカル)ならECCを優先。
  • コスト:パリティはECCより安価で実装が簡単なことがある。但し現代の市場ではECCのコスト差は縮小しており、サーバ用途ではECCが標準化されていることが多い。
  • 許容できる復旧方式:エラー検出のみで良ければパリティでも可。自動訂正や長時間の無停止稼働を求められるならECCが有利。
  • 既存ハードウェアとの互換性:古いシステムや組込み機器でパリティのみを想定している場合がある。

誤り発生の原因と現代的なリスク

物理的なメモリエラーの原因は、宇宙線の影響(シングルイベントアップセット)、半導体製造プロセスの微小な欠陥、温度や電源ノイズなど多岐にわたります。DRAM密度が上がるほど、ソフトエラーの発生確率は相対的に上昇するため、データセンターや長時間稼働システムではECCの採用が推奨されます。パリティは単純だが検出できないケースがあることを前提に運用規定を用意する必要があります。

運用上の具体的なチェック方法

システムがパリティかECCかを確認する方法の例を示します(代表的な方法であり、システムやOSによって差があります)。

  • BIOS/UEFI:メモリに関する設定で「Error Checking」や「Memory ECC」等の項目を確認する。
  • Linux:lshwやdmidecodeでMemoryのError Correction Typeを確認。edac-utilやdmesgでエラー記録を確認する。
  • Windows:システム情報(msinfo32)やイベントビューアを確認。製造元のユーティリティで詳細を確認可能。

導入時の注意点と障害対応

パリティメモリを使う際の実務的な注意点を挙げます。

  • BIOS設定やマザーボードのサポートを必ず確認する。パリティ/DIMMの種類が混在すると正しく機能しない場合がある。
  • エラー検出時のアクションを決めておく(ログ収集 → 再起動/メモリ診断 → 交換)。自動で停止する設定の場合、重要業務への影響を考慮した運用手順が必要。
  • 定期的なメモリ診断(memtest86+等)を実施し、ハードウェア故障の早期検出に努める。
  • 大規模インフラでは単なる検出に留まらない自動訂正のメリットが大きいため、ECCを検討することが多い。

まとめ

パリティメモリは、実装と理解が容易な誤り検出手段であり、単一ビット誤りの検出に有効です。しかし偶数個のビット誤りを検出できないこと、訂正不可能なことから、今日の高信頼性が求められる運用環境ではECCが優先される傾向にあります。組込み系やコスト重視のレガシー環境では依然有用な場合もあるため、用途とリスクに応じてパリティとECCのどちらが適切かを判断することが重要です。

参考文献