(57)【要約】      （修正有）【課題】システム稼動時、システムに搭載されているメモリモジュールに対して、メモリテストを実施することにより、訂正不可能なメモリエラー発生によるシステム停止を軽減する。【解決手段】システム稼動時、システムに搭載されているメモリモジュールに対し、定期的あるいは要求があったときにメモリテストを実施する。テスト対象の各ＤＩＭＭ１０１〜１０６毎にメモリテスト不可フラグを持つ。エラーが検出されたらそのメモリモジュールを使用不可とするＤＩＭＭ番号使用可否テーブルを持つ。【選択図】図１
2012103999.tif 000002
【特許請求の範囲】
【請求項１】
システム稼動時、システムに搭載されているメモリモジュールに対して、メモリテストを実施するためのメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置において、訂正不可能なメモリエラーが発生したことによるシステム停止の可能性を軽減するためのメモリ制御方法に関するものである。
【背景技術】
【０００２】
訂正不可能なメモリエラーが発生したことによるシステム停止を回避する技術として、Memory MirroringやMemory RAIDがある。しかし冗長用メモリモジュールが必要であり、コスト面で不利である。
【０００３】
また特許文献１のように、訂正可能なメモリエラーが頻発している場合、そのメモリエラー発生部位で将来的に訂正不可能なメモリエラーが発生する可能性が高いことより、そのエラー発生部位を、冗長用メモリモジュールにホットスペアすることにより、訂正不可能なメモリエラー発生を未然に防止しようとする技術があるが、これも同様に冗長用メモリモジュールが必要であり、コストの問題が発生する。
【０００４】
また定期的に全メモリをテストすることによりメモリエラーを早期に検出しようとする技術として、Memory Scrubbingがある。しかし、訂正不可能なメモリエラーが発生した場合に、システムがその化けてしまったデータを使用してしまうことを、未然に防止する効果は期待出来るが、そもそもシステム停止を回避しようとする技術ではない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１６７００１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の技術では、訂正不可能なメモリエラーが発生したときにシステムが停止することを回避するためには、冗長用メモリモジュールを搭載しておく必要があり、コスト面で不利であった。
【課題を解決するための手段】
【０００７】
本発明は、システム稼動時、システムに搭載されているメモリモジュールに対し、定期的にメモリテストを実施し、もしエラーが検出されたらそのメモリモジュールを使用不可とし縮退運転する。また、メモリモジュールに対するメモリテストを実施するとそのメモリモジュールの内容は消えてしまうため、メモリテストを実施している最中は、システムはそのメモリモジュールを使用することは出来ない。そのため本発明では、メモリテストを実施する前に、メモリテスト対象のメモリモジュールの内容を補助記憶装置に退避し、強制的にそのメモリモジュールを未使用状態にした後に、メモリテストを実施する。これにより冗長用メモリモジュールを搭載することなく、OSが訂正不可能なエラーが発生しているメモリモジュールを使用してしまうことによるシステム停止の可能性を、大幅に軽減することが出来る。
【発明の効果】
【０００８】
本発明によれば、冗長用メモリモジュールを搭載することなく、訂正不可能なメモリエラー発生によるシステム停止の可能性を大幅に軽減することが出来るため、従来技術の課題であったコスト面での不利が解消される。
【図面の簡単な説明】
【０００９】
【図１】実施形態のハードウェアブロック図。
【図２】アドレス対応レジスタ1の仕様。
【図３】メモリテストレジスタ１の仕様。
【図４】物理メモリページ対応テーブルの例。
【図５】アドレス対応レジスタ１の設定例。
【図６】メモリ番号使用可否テーブルの例。
【図７】DIMM１のメモリテスト実行時の、OSのメモリテスト用プロセスの処理フロー。
【図８】システムブロック図。
【発明を実施するための形態】
【００１０】
以下、発明を実施するための最良の形態を図面と共に説明する。
【実施例１】
【００１１】
図１に本発明の実施形態のハードウェアブロック図を示す。メモリモジュールとして複数枚のDIMM(１０１、１０２、１０３、・・・)と、それらのDIMMを制御するためのメモリ制御装置(１１０)と、ファームウェア(１４１)が格納されたROM(１４０)と、補助記憶装置(１５０)がある。それぞれのDIMMには一意の番号が割り当てられており、DIMM１(１０１)、DIMM２(１０２)、DIMM３(１０３)、・・・と呼び、区別する。
【００１２】
メモリ制御装置(１１０)は、物理メモリアドレスとDIMM番号の対応情報を示すアドレス対応レジスタ群(１２０)を持つ。アドレス対応レジスタ群(１２０)は、複数個のアドレス対応レジスタで構成され、それぞれ、アドレス対応レジスタ１、アドレス対応レジスタ２、アドレス対応レジスタ３、・・・と呼び区別する。図２にアドレス対応レジスタ1の仕様を示す。アドレス対応レジスタ1の開始アドレスレジスタ(２００)は物理メモリ空間の開始アドレスを保持し、レングスレジスタ(２０１)は開始アドレスレジスタ(２００)からの長さを保持し、DIMM番号レジスタ(２０２)は開始アドレスレジスタ(２００)で示される物理メモリ空間のアドレスから、レングスレジスタ(２０１)で示される長さの物理メモリ領域がマッピングされているDIMM番号を保持する。アドレス対応レジスタ2、アドレス対応レジスタ3、アドレス対応レジスタ4、・・・も、アドレス対応レジスタ1 と同様の仕様である。アドレス対応レジスタ群(１２０)の各レジスタは、ハードウェア的に値が固定されているのではなく、ソフトウェアからライト出来るようになっている。これは、搭載されるDIMM数が可変であるシステム装置にも柔軟に対応出来るようにするためである。本実施例では、ファームウェア(１４１)がシステム装置起動時に、システム装置に搭載されているDIMMをチェックし、アドレス対応レジスタ群(１２０)の各レジスタに値を設定する。
メモリ制御装置(１１０)は、各DIMM(１０１、１０２、１０３、・・・)に対し、各DIMM(１０１、１０２、１０３、・・・)毎にハードウェア的なメモリテストを実行する機能を持ち、その機能はメモリテストレジスタ群(１３０)で制御される。メモリテストレジスタ群(１３０)は、複数個のメモリテストレジスタで構成され、それぞれ、メモリテストレジスタ１、メモリテストレジスタ２、メモリテストレジスタ３、・・・と呼び区別する。図３にメモリテストレジスタ1の仕様を示す。メモリテストレジスタ1のメモリテスト開始ビット(３００)は、DIMM１(１０１) のメモリテスト開始を指示するためのコントロールビットであり、’１’ がライトされるとDIMM1(１０１)のメモリテストが開始される。メモリテスト中ビット(３０１)は、DIMM１(１０１)がメモリテスト中かどうかを示すステータスビットであり、メモリテスト開始ビット(３００)に’１’がライトされると、メモリ制御装置(１１０)により’０’から’１’に値変更され、メモリテストが終了すると、メモリ制御装置(１１０)により’１’から’０’に値変更される。メモリエラー発生ビット(３０２)は、DIMM１(１０１)でのメモリテスト終了後に、DIMM１(１０１)でエラーが発生したかどうかを示すステータスビットであり、メモリテスト終了後にメモリ制御装置(１１０)により、エラーが発生していれば’１’が設定され、エラーが発生していなければ’０’が設定される。メモリテストレジスタ２、メモリテストレジスタ３、メモリテストレジスタ４、・・・も、DIMM２(１０２)、DIMM３(１０３)、DIMM４(１０４)に対し、メモリテストレジスタ１と同様の機能を持つ。メモリテストレジスタ群(１３０)は、OSからリードアクセス及びライトアクセス可能となっている。また本実施例では、メモリテストレジスタ群(１３０)は、本システム装置に物理的に搭載可能なDIMMの数と同数のメモリテストレジスタを持つ。
【００１３】
本発明のOSはメモリ管理方法として、仮想記憶のページング方式を採用している。ページング方式では、仮想アドレス空間及び物理メモリアドレス空間をページと呼ばれる一定サイズの領域に分割し、ページテーブルと呼ばれるテーブルで、仮想アドレスと物理メモリアドレスの対応や、それぞれの仮想アドレス、物理メモリアドレスが、プロセスにより使用中かどうかなどの情報を管理している。
【００１４】
本発明では、ページング方式での物理メモリページ番号と、その物理メモリページ番号が割り当てられている物理メモリアドレスと、その物理メモリページ番号がマッピングされているDIMM番号の対応をテーブル化し、保持している。そのテーブルを物理メモリページ対応テーブルと呼び、図４に例を示す。図４の例では、本システムが採用している仮想記憶のページング方式の仕様として、物理メモリアドレス0x00000000から0xFFFFFFFFをサポートしており、物理メモリアドレス空間を１６個のページに分割し、低位の物理メモリアドレスから順に、物理メモリページ番号を１から順に割り振っている。物理メモリページ対応テーブルの物理メモリページ番号(４００)、物理メモリアドレス(４０１)は、物理メモリページ番号と物理メモリアドレスの対応を示している。物理メモリページ対応テーブルのDIMM番号(４０２)は、該当する物理メモリアドレスが、どのDIMM番号にマッピングされているかを示す。例えば図４の最上行のレコードは、物理メモリページ番号１は、物理メモリアドレス0x00000000から0x0FFFFFFFが割り当てられており、DIMM１にマッピングされていることを示している。物理メモリページ対応テーブルは、OSが起動時に作成、初期化する。OSは起動時、物理メモリページ番号(４００)、物理メモリアドレス(４０１)に設定すべき値を、本システムが採用している仮想記憶のページング方式の仕様から決定し、その値を設定する。次にOSは、メモリ制御装置(１１０)のアドレス対応レジスタ群(１２０)をリードすることにより、アドレス対応レジスタ群(１２０)の値を取得し、物理メモリページ対応テーブルのDIMM番号(４０２)に設定すべき値を決定し、その値を設定する。図５にアドレス対応レジスタ１の設定例を示し、OSが物理メモリページ対応テーブルのDIMM番号(４０２)に設定すべき値を決定する手順を説明する。OSは、アドレス対応レジスタ１の開始アドレスレジスタの値(５００)と、レングスレジスタの値(５０１)と、DIMM番号レジスタの値(５０２)より、物理メモリページ対応テーブルの物理メモリアドレス(４０１)が"0x00000000 - 0x0FFFFFFF"であるレコードのDIMM番号(４０２)を’１’に設定し、物理メモリページ対応テーブルの物理メモリアドレス(４０１)が"0x10000000 - 0x1FFFFFFF"であるレコードのDIMM番号(４０２)も同様に’１’に設定する。OSは続いて、アドレス対応レジスタ２の値を取得し、同様に物理メモリページ対応テーブルのDIMM番号(４０２)に設定すべき値を決定し、設定する。OSは、全てのアドレス対応レジスタの値を取得するまでこの処理を繰り返す。物理メモリページ対応テーブルのメモリテスト不可フラグ(４０３)は、該当する物理メモリアドレス(４０１)に対するメモリテストが不可能かどうかを示すフラグであり、’１’であれば不可能、’０’であれば可能であることを示す。本発明では、物理メモリ上に常駐していなければならないプロセスがマッピングされているDIMMに対するメモリテストは実施出来ない。OSは物理メモリページ対応テーブルの初期化時、物理メモリ上に常駐していなければならないプロセスがマッピングされている物理メモリアドレス(４０１)のレコードのメモリテスト不可フラグ(４０３)を’１’に設定し、その他のレコードのメモリテスト不可フラグ(４０３)を’０’に設定する。
【００１５】
本発明では、DIMM番号と、そのDIMM番号のDIMMが使用可能かどうかの情報をテーブル化し保持している。そのテーブルをDIMM番号使用可否テーブルと呼び、図６に例を示す。DIMM番号使用可否テーブルの使用可能フラグ(６０１)は、’１’であれば該当するDIMM番号(６００)が使用可能であることを示し、’０’であれば使用不可能であることを示す。初期値は’１’であり、メモリテストにてエラーが検出された場合は、OSにより’０’に設定される。図６の例では、DIMM２が使用不可能に設定されており、その他の、DIMM１、DIMM３、DIMM４、DIMM５、DIMM６は使用可能に設定されている。DIMM番号使用可否テーブルは、OSが起動時に作成、初期化する。OSは起動時、メモリ制御装置(１１０)のアドレス対応レジスタ群(１２０)をリードすることにより、アドレス対応レジスタ群(１２０)の値を取得し、システム装置に存在するDIMMが、DIMM１、DIMM２、DIMM３、・・・、DIMM６であることを知り、DIMM番号使用可否テーブルに、DIMM番号(６００)が１、２、３、・・・、６であるエントリを作成する。次にOSは、全てのエントリの使用可能フラグ(６０１)を、使用可能であることを示す”1”に初期化する。
【００１６】
仮想記憶のOSは、プロセスに物理メモリを割り当てるとき、どの物理メモリページ番号を割り当てるかを決定するが、本発明のOSは、物理メモリページ対応テーブル及びDIMM番号使用可否テーブルをチェックすることにより、使用不可能なDIMM番号に該当する物理メモリページ番号を、どの物理メモリページ番号を割り当てるかの選択肢から除外するようになっている。図４の物理メモリページ対応テーブルの例と、図６のDIMM番号使用可否テーブルの例の場合は、DIMM番号使用可否テーブルよりDIMM２が使用不可能であるので、物理メモリページ対応テーブルより、物理メモリページ番号３、物理メモリページ番号４を、どの物理メモリページ番号を割り当てるかの選択肢から除外する。
【００１７】
本発明のOSはマルチプロセスに対応しており、プロセスの１つとしてメモリテストを実行するためのプロセスを持ち、そのプロセスはメモリ制御装置(１１０)のメモリテスト機能を使って、一定時間間隔でDIMM番号の若い順にメモリテストを実行する。図７に、DIMM1に対しメモリテスト処理を実行するときの、OSのメモリテスト用プロセスの処理フローを示し、説明する。まず、どのメモリをテストするかを示す変数ｉに’１’を設定する(７０２)。次に、DIMM番号使用可否テーブルにて、DIMM番号ｉの使用可能フラグが’１’であるかどうかをチェックする（７０３）。’０’であれば、過去に実施されたメモリテストにてエラーが発生しており、既に使用不可能になっているため、再度のメモリテストは不要と判断し、DIMMｉのメモリテストは実施せず終了する(７１２)。Dimmiの使用可能フラグが’１’であれば、物理メモリページ対応テーブルの中から、DIMM番号がｉであるレコードを抽出する(７０４)。抽出された全レコードの物理メモリアドレス(４０１)がメモリテスト可能かどうか、即ち補助記憶装置(１５０)への退避が可能かどうかを、抽出されたレコードのメモリテスト不可フラグ(４０３)を参照することによりチェックする(７０５)。抽出されたレコードのうち、１つでもメモリテスト不可フラグ(４０３)が’１’のレコードがあれば、DIMMｉのメモリテストは不可能と判断し、DIMMｉのメモリテストは実施せず終了する(７１２)。処理(７０４)で抽出された全レコードのテスト不可フラグ(４０３)が’０’であれば、DIMMｉのメモリテスト中はDIMMｉを使用出来ないようにするため、DIMM番号使用可否テーブルのDIMM番号iの使用可能フラグを’１’から’０’に設定変更する(７０６)。次に処理(７０４)で抽出されたレコードの物理メモリページ番号(４００)が、プロセスにより使用中かどうかを、ページテーブルを参照することによりチェックする(７０７)。プロセスにより使用中の場合は、抽出された物理メモリページ番号を使用しているプロセスを、補助記憶装置(１５０)にページアウトし(７１３)、その後処理(７０８)を実行する。処理(７０７)のチェックで、プロセスにより使用中でなければ、メモリ制御装置(１１０)のメモリテストレジスタiのメモリテスト開始ビットに’１’をライトすることにより、DiMMiのメモリテストの実行を開始する(７０８)。このライトにより、メモリテストレジスタiのメモリテスト中ビットが、’０’から’１’に変更される。OSは、このメモリテスト中ビットが’０’になる、即ちメモリテストが終了するのを待つ(７０９)。メモリテスト中ビットが’０’になった後OSは、メモリテストレジスタiのメモリエラー発生ビットが’０’であるかをチェックし(７１０)、’０’である即ちエラーが発生しなかった場合は、処理(７０６)で設定変更したDIMM番号使用可否テーブルのDIMM番号iの使用可能フラグを’０’から’１’に戻し(７１１)、DIMMiのメモリテストを終了する(７１２)。メモリテストレジスタiのメモリエラー発生ビットが’１’であった場合、処理(７１１)は実施せず終了する(７１２)。前述した通り本発明のOSは、DIMM番号使用可否テーブルの使用可能フラグが’０’であるDIMM番号は、物理メモリとしてプロセスに割り当てないようになっているため、メモリエラーが発生したDIMMがOSにより使用さ��ることはない。
【００１８】
DIMM1に対するメモリテスト処理実行から一定時間経過後、OSはDIMM2のメモリテスト処理実行を開始する。図７の(７０２)で、どのメモリをテストするかを示す変数iに’２’を設定する以外は、DIMM1に対する処理と同様である。以下、DIMM３、DIMM４、・・・の順に、一定時間置きにメモリテスト処理を実行し、アドレス対応レジスタ群に登録されている一番大きい番号のDIMMのメモリテストが終了したら、次は再度、DIMM１のメモリテストを実行する。以下、DIMM２、DIMM３、・・・の順に、一定時間置きにメモリテスト処理を実行していく。
【実施例２】
【００１９】
実施例１では、メモリテストを実行する時間間隔はOSが一意に決めているが、ユーザが指定出来るようにしても良い。図８に実施形態のシステム構成を示す。アプリケーションプログラム(８０１)はOS(８０２)上で動作するソフトウェアであり、ユーザインターフェースを持っており、ユーザ(８００)から指示されたメモリテスト実行時間間隔を、OSに対し設定する機能を持つ。ユーザ(８００)はアプリケーションプログラム(８０１)を起動しメモリテスト実行時間間隔を設定し、アプリケーションプログラム(８０１)はユーザ(８００)により設定されたメモリテスト実行時間間隔をOS(８０２)に設定し、OS(８０２)はアプリケーションプログラム(８０１)により設定されたメモリテスト時間間隔に従って、メモリテストを実行する。メモリテストの実行方法は実施例１と同じである。
【符号の説明】
【００２０】
１０１…DIMM、１０２…DIMM、１０３…DIMM、１０４…DIMM、１０５…DIMM、１０６…DIMM、１１０…メモリ制御装置、１２０…アドレス対応レジスタ群、１３０…メモリテストレジスタ群、１４０…ROM、１４１…ファームウェア、１５０…補助記憶装置、１６０…バス、１７０…CPU、２００…アドレス対応レジスタ１のアドレス開始レジスタ、２０１…アドレス対応レジスタ１のレングスレジスタ、２０２…アドレス対応レジスタ１のDIMM番号レジスタ、３００…メモリテストレジスタ１のメモリテスト開始ビット、３０１…メモリテストレジスタ１のメモリテスト中ビット、３０２…メモリテストレジスタ１のメモリエラー発生ビット、４００…物理メモリページ対応テーブルの物理メモリページ番号項目、４０１…物理メモリページ対応テーブルの物理メモリアドレス項目、４０２…物理メモリページ対応テーブルのDIMM番号項目、４０３…物理メモリページ対応テーブルのメモリテスト不可フラグ項目、５００…アドレス対応レジスタ１の開始アドレスレジスタの設定例、５０１…アドレス対応レジスタ１のレングスレジスタの設定例、５０２…アドレス対応レジスタ１のDIMM番号レジスタの設定例、６００…DIMM番号使用可否テーブルのDIMM番号項目の設定例、６０１…DIMM番号使用可否テーブルの使用可能フラグ項目の設定例、７０１…処理、７０２…処理、７０３…処理、７０４…処理、７０５…処理、７０６…処理、７０７…処理、７０８…処理、７０９…処理、７１０…処理、７１１…処理、７１２…処理、７１３…処理、８００…ユーザ、８０１…アプリケーションプログラム、８０２…OS。
【図１】
2012103999.tif 000003
【図２】
2012103999.tif 000004
【図３】
2012103999.tif 000005
【図４】
2012103999.tif 000006
【図５】
2012103999.tif 000007
【図６】
2012103999.tif 000008
【図７】
2012103999.tif 000009
【図８】
2012103999.tif 000010