(57)【要約】【課題】ハードウェアによるメモリ切り替え機能と、カーネルによるページオフライン機能とを連動させ、効率よくメモリエラーへ対処するシステムを提供する。【解決手段】メモリ障害対処システムは、メモリエラーの発生をファームウェアまたはソフトウェアへ通知するメモリコントローラと、メモリエラー発生の通知を受けるとエラーが発生したメモリから予備メモリへの切り替えを指示するファームウェアと、メモリエラー発生の通知を受けると、エラーが発生したメモリに対応するページの無効化を指示するソフトウェアと、を含む。ファームウェアは、メモリエラー発生の通知先をメモリコントローラへ設定する。【選択図】図３
2020154591.tif 000002
【特許請求の範囲】
【請求項１】
メモリコントローラと、
ファームウェアと、
ソフトウェアと、
を含み、
前記メモリコントローラは、
メモリエラーの発生を検出すると、前記メモリエラーの発生を通知先の設定に基づいて、前記ファームウェアまたは前記ソフトウェアへ通知するエラー発生通知部、を有し、
前記ファームウェアは、
前記通知先を前記メモリコントローラへ設定する通知先設定部と、
前記メモリコントローラから前記メモリエラーの発生の通知を受けると、前記メモリエラーが発生したメモリから予備メモリへの切り替えを指示する予備メモリ切替指示部と、を有し、
前記ソフトウェアは、
前記メモリコントローラから前記メモリエラーの発生の通知を受けると、前記メモリエラーが発生したメモリに対応するページを無効化する指示を行う無効化指示部、を有する、
メモリ障害対処システム。
【請求項２】
前記通知先設定部は、前記予備メモリへの切り替え前においては、前記通知先を前記ファームウェアに設定し、前記予備メモリへの切り替え後には、前記通知先を前記ソフトウェアに設定する、
請求項１に記載のメモリ障害対処システム。
【請求項３】
前記ファームウェアは、前記メモリコントローラが管理する全てのメモリについて、前記予備メモリへ切り替え済みか否かを示す情報を登録するメモリエラー管理テーブルを、前記ファームウェアから更新可能、且つ、前記ソフトウェアから参照可能に記憶する、
請求項１または請求項２に記載のメモリ障害対処システム。
【請求項４】
前記ファームウェアは、前記予備メモリへの切り替えを指示すると、前記メモリエラー管理テーブルにおける切り替え対象の前記メモリについて、前記予備メモリへ切り替え済みであること示す情報を登録する、
請求項３に記載のメモリ障害対処システム。
【請求項５】
前記ソフトウェアは、前記メモリエラー管理テーブルを参照して、前記メモリエラーが発生したメモリについて、前記切り替え済みであること示す情報が登録されている場合に限り、前記ページの無効化を指示する、
請求項３または請求項４に記載のメモリ障害対処システム。
【請求項６】
前記ソフトウェアは、前記メモリエラー管理テーブルに登録された前記メモリの位置に基づいて、その位置に対応する前記ページの無効化を指示する、
請求項３から請求項５の何れか１項に記載のメモリ障害対処システム。
【請求項７】
請求項１から請求項６の何れか１項に記載のメモリ障害対処システムを含む、
情報処理装置。
【請求項８】
ファームウェアが、メモリエラーが発生した場合の通知先をメモリコントローラへ設定するステップと、
前記メモリコントローラが、メモリエラーの発生を検出すると、前記通知先の設定に基づいて、前記メモリエラーの発生を前記ファームウェアまたはソフトウェアへ通知するステップと、
前記ファームウェアが、前記メモリコントローラから前記メモリエラーの発生の通知を受け取った場合、前記メモリエラーが発生したメモリから予備メモリへの切り替えを指示するステップと、
前記ソフトウェアが、前記メモリコントローラから前記メモリエラーの発生の通知を受け取った場合、前記メモリエラーが発生したメモリに対応するページを無効化する指示を行うステップと
を有する、メモリ障害対処方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ障害対処システム、情報処理装置及びメモリ障害対処方法に関する。
【背景技術】
【０００２】
近年、ＤＲＡＭの価格の低下、大容量化により、サーバ装置に数十テラバイトのメモリを搭載して、計算に必要なデータをメモリ上に置くことで計算処理を圧倒的に高速化するインメモリ・コンピューティングという技術が利用されている。インメモリ・コンピューティングでは、メモリ上のデータの保全性が重要である。一方、ＤＩＭＭ（Dual Inline Memory Module）の高集積化、大容量化に伴ってエラーの発生頻度も増加している。メモリエラーにはＥＣＣで訂正されるCorrectable Error（以下、ＣＥと記載する。）とＥＣＣで訂正できないUncorrectable Error（以下、ＵＣＥと記載する。）がある。ＣＥが複数のデータで同時に発生するとＥＣＣで訂正できないためＵＣＥとなる。ＵＣＥが発生するとシステムダウンが生じる。
【０００３】
これに対し、近年のコンピュータシステムでは、ハードウェア（以下、ＨＷと記載する。）とソフトウェア（以下、ＳＷと記載する。）のそれぞれが、ＣＥが発生した場合の対処機能を装備している。
ＨＷは、あるＤＲＡＭでＣＥの発生回数が閾値に到達した場合、故障と判断して予備のＤＲＡＭへデータを移す機能（以下、ＨＷ機能と記載する場合がある。）を備えている。一方、ＳＷは、ページオフラインという機能を装備している。ＳＷは、メモリ上でのＣＥ発生の通知を受けると、ページ単位で回数をカウントして、あるページで発生したＣＥの発生回数が閾値に到達した場合、そのページを無効化するようカーネルへ指示する。カーネルは、そのページに有効なデータがあるがその時点で未使用であれば、別の物理ページへデータを移して、元のページを使用しないように制御する。これをページオフライン機能（以下、ＳＷ機能と記載する場合がある。）と呼ぶ。
【０００４】
しかし、一般にＨＷ機能とＳＷ機能は連携して動作しておらず、非効率な動作を行うことがある。例えば、ＳＷが管理対象としているページには、メモリのインターリーブによって、複数のＤＲＡＭがマッピングされている。そのため、例えば３つのＤＲＡＭでＣＥが発生した場合、ＳＷは、そのページでＣＥが３回発生したとカウントする。すると、そのページについてＳＷが管理するＣＥの発生回数は、ＨＷが個々のＤＲＡＭについて管理しているＣＥの発生回数よりも先に閾値に到達することがある。すると、ＨＷ機能（予備ＤＲＡＭへのデータコピー）が実行可能であるにも関わらず、ＳＷ機能（ページオフライン）が先に動作してしまう。ページオフライン機能が動作すると、（１）ユーザが利用できるメモリページが減る、（２）カーネルによるデータの移動というオーバーヘッドが生じる、といった影響がある。一方、ＨＷ側の機能は、予備のＤＲＡＭを使い、ＨＷが有するＣＯＰＹエンジンを使ってデータを移すため、ＳＷへの影響は無い。従って、まずＨＷ側の機能を動作させ、それでもなお、メモリＣＥが発生する場合に、最後の手段として、ＳＷ側のページオフラインを動作すべきである。
【０００５】
特許文献１には、このような方針に沿って、ＨＷ機能とＳＷ機能とを連動させる仕組みが開示されている。特許文献１は、上記のＨＷの機能に相当する予備メモリ切替と、上記のＳＷの機能に相当するページ閉塞とを連携させてシステムダウンを防止するメモリ障害処理システムを開示している。このメモリ障害処理システムは、メモリＣＥの発生回数が閾値に達すると、まず予備メモリに切り替え、その後、メモリＣＥの発生回数が閾値に達すると、ページ閉塞を行うという制御によって、予備メモリ切替とページ閉塞とを連動させている。ページ閉塞を行うときの動作をより具体的に説明すると、ファームウェア（以下、ＦＷと記載する。）に実装される障害ページ通知部６２が、障害が発生した箇所に対応するメモリページを、ＯＳに実装されるページ閉塞部６３に通知し、ページ閉塞部６３が通知されたページを検索してページ閉塞を行っている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１５０４６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の方法には、（Ａ）障害ページ通知部６２は、ＢＩＯＳと呼ばれるＦＷに実装されており、ＢＩＯＳがエラーが発生したページをテーブルに登録、ページ毎に発生回数をカウントし、閾値を越えた場合、閾値を越えたページをページ閉塞部６３に通知し、ページ閉塞部６３は、通知されたページに対してページ閉塞を行う、という動作を行うが、ＢＩＯＳというＦＷがテーブルの検索、登録、発生回数のカウントを行うため、その間、ＯＳはＣＰＵを使えないため、一時的にＯＳのＣＰＵ利用率が下がってしまうという課題がある。（Ｂ）ＢＩＯＳやＯＳに上記の機能を実装する以上、無制限にエラーが発生した全てのページを通知するように実装することはできないため、通知するページ数に上限値を設ける必要がある。つまり、障害ページ通知部６２は、エラーが発生した全てのページを通知することができず、ページ閉塞部６３はエラーが発生した全てのページを閉塞することができないという制約がある。
【０００８】
メモリの大容量化に伴いエラーの発生頻度が増加する可能性のあるインメモリ・コンピューティングに特許文献１の方法を適用すると、上記のような点が制約となってメモリの障害対処ができず、システムダウン等を招く可能性がある。
【０００９】
そこでこの発明は、上述の課題を解決するメモリ障害対処システム、情報処理装置及びメモリ障害対処方法を提供することを目的としている。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、メモリ障害対処システムは、メモリコントローラと、ファームウェアと、ソフトウェアと、を含み、前記メモリコントローラは、メモリエラーの発生を検出すると、前記メモリエラーの発生を通知先の設定に基づいて、前記ファームウェアまたは前記ソフトウェアへ通知するエラー発生通知部を有し、前記ファームウェアは、前記通知先を前記メモリコントローラへ設定する通知先設定部と、前記メモリコントローラから前記メモリエラーの発生の通知を受けると、前記メモリエラーが発生したメモリから予備メモリへの切り替えを指示する予備メモリ切替指示部と、を有し、前記ソフトウェアは、前記メモリコントローラから前記メモリエラー発生の通知を受けると、前記メモリエラーが発生したメモリに対応するページを無効化する指示を行う無効化指示部、を有する。
【００１１】
また、本発明の他の一態様によれば、情報処理装置は、上記のメモリ障害対処システムを備える。
【００１２】
また、本発明の他の一態様によれば、メモリ障害対処方法は、ファームウェアが、メモリエラーが発生した場合の通知先をメモリコントローラへ設定するステップと、前記メモリコントローラが、メモリエラーの発生を検出すると、前記通知先の設定に基づいて、前記メモリエラーの発生を前記ファームウェアまたはソフトウェアへ通知するステップと、前記ファームウェアが、前記メモリコントローラから前記メモリエラー発生の通知を受け取った場合、前記メモリエラーが発生したメモリから予備メモリへの切り替えを指示するステップと、前記ソフトウェアが、前記メモリコントローラから前記メモリエラー発生の通知を受け取った場合、前記メモリエラーが発生したメモリに対応するページを無効化する指示を行うステップと、を有する。
【発明の効果】
【００１３】
本発明によれば、ＨＷによる予備メモリ切り替え機能とＳＷによるページオフライン機能を連動させて、効果的にメモリＣＥの発生に対処することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態に係るコンピュータシステムの一例を示す図である。
【図２】本発明の一実施形態に係るメモリおよびメモリコントローラの一例を示す図である。
【図３】本発明の一実施形態に係るメモリエラーに関するソフトウェア群の一例を示す図である。
【図４】本発明の一実施形態に係るメモリエラー管理テーブルの一例を示す図である。
【図５】本発明の一実施形態に係る制御の一例を示す第１のフローチャートである。
【図６】本発明の一実施形態に係る制御の一例を示す第２のフローチャートである。
【図７】本発明の一実施形態に係る制御の一例を示す第３のフローチャートである。
【図８】本発明の一実施形態に係る制御の一例を示す第４のフローチャートである。
【図９】本発明の一実施形態に係る制御の一例を示す第５のフローチャートである。
【図１０】本発明の一実施形態に係る制御の一例を示す第６のフローチャートである。
【図１１】本発明の一実施形態に係るメモリ障害対処システムの最小構成を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の一実施形態に係るメモリエラー発生時の制御について図面を参照して説明する。
（構成）
図１は、本発明の一実施形態に係るコンピュータシステムの一例を示す図である。
図１に示すように、コンピュータシステム４００は、ＨＷ（ハードウェア）３００と、ＦＷ（ファームウェア）２００と、ＯＳ（オペレーティングシステム）１００と、ＳＷ（ソフトウェア）０００と、を備えている。
【００１６】
ＨＷ３００は、ＣＰＵ（Central Processing Unit）３１０と、メモリコントローラ３２０と、１つ以上のＤＩＭＭ３３０と、を含む。メモリコントローラ３２０は、１または複数のチャネル（以降、ＣＨと記載する。）を備えていて、ＤＩＭＭ３３０は何れかのＣＨに接続されている。ＤＩＭＭ３３０は、メモリモジュールである。メモリコントローラ３２０は、ＤＩＭＭ３３０におけるメモリＣＥの発生を検出する機能と、ＨＷ機能（予備ＤＲＡＭへのデータコピー機能）を有している。
【００１７】
ＦＷ２００は、ＢＩＯＳ（Basic Input/Output System）２１０を含んでいる。ＢＩＯＳ２１０は、ＨＷ３００とＯＳ１００の間で、ＨＷ機能とＳＷ機能を効果的に連携させるための機能を有している。
【００１８】
ＯＳ１００は、Ｋｅｒｎｅｌ（カーネル）１１０を含んでいる。Ｋｅｒｎｅｌ１１０は、上記のＳＷ機能を有している。
ＳＷ０００は、メモリエラー監視ソフトウェア０１０を含んでいる。メモリエラー監視ソフトウェア０１０は、ＳＷ機能の実行を指示する。
【００１９】
コンピュータシステム４００において、ＤＩＭＭ３３０にＥＣが発生すると、ＯＳ１００と、ＦＷ２００と、ＨＷ３００とは、連携してメモリエラーへの対処を行う。
【００２０】
図２は、本発明の一実施形態に係るメモリおよびメモリコントローラの一例を示す図である。
図２（ａ）にＤＩＭＭ３３０の構成例を示す。ＤＩＭＭ３３０は、ランク１、ランク２を含む。ランクは、メモリモジュールのブロックを示し、メモリコントローラ３２０は、ランク単位でメモリモジュールを管理する。ランク１は、複数のＤＲＡＭ３３１１ａ〜３３１１ｃと、少なくとも１つの予備ＤＲＡＭ３３１２を備えている。ランク２は、複数のＤＲＡＭ３３２１ａ〜３３２１ｃと、少なくとも１つの予備ＤＲＡＭ３３２２を備えている。なお、ＤＲＡＭ３３１１ａ〜３３１１ｃの区別が必要ないときには、ＤＲＡＭ３３１１と記載する。ＤＲＡＭ３３２１ａ〜３３２１ｃの区別が必要ないときには、ＤＲＡＭ３３２１と記載する。また、ランクの区別も必要なくＤＩＭＭ３３０に含まれるＤＲＡＭを指すときには、ＤＲＡＭ３３０１、予備ＤＲＡＭを指すときには予備ＤＲＡＭ３３０２と記載する。なお、ランクの数やＤＲＡＭの数は、図示するものに限定されない。
【００２１】
図２（ｂ）にメモリコントローラ３２０の構成例を示す。メモリコントローラ３２０は、ＣＥ回数カウント機能３２１と、ＥＣＣ訂正機能３２２と、ＤＲＡＭコピー機能３２３と、ＢＩＯＳ通知機能３２４と、ＳＷ通知機能３２５を備えている。
ＣＥ回数カウント機能３２１は、ＤＲＡＭ３３０１ごとにメモリＣＥの発生回数をカウントする。
ＥＣＣ訂正機能３２２は、ＤＲＡＭ３３０１でメモリＣＥが発生するとＥＣＣ訂正を行う。
ＤＲＡＭコピー機能３２３は、例えば、ＤＲＡＭ３３０１から予備ＤＡＲＭ３３０２に切り替えるときに、切り替え対象のＤＲＡＭ３３０１から予備ＤＡＲＭ３３０２へデータのコピーを行う。例えば、ＤＲＡＭ３３１１ａに閾値回数以上のメモリＣＥが発生した場合、ＤＲＡＭ３３１１ａから、同じランク１の予備ＤＲＡＭ３３１２へデータのコピーが実行される。
ＢＩＯＳ通知機能３２４は、予備ＤＡＲＭ３３０２への切り替え前にメモリＣＥの発生回数が所定の閾値を上回った場合、メモリＣＥの発生をＦＷ２００へ通知する。
ＳＷ通知機能３２５は、予備ＤＡＲＭ３３０２へ切り替えた後に、さらにメモリＣＥが発生した場合、メモリＣＥの発生をＳＷ０００（メモリエラー監視ソフトウェア０１０）へ通知する。
【００２２】
図３は、本発明の一実施形態に係るメモリエラーに関するソフトウェア群の一例を示す図である。
図３（ａ）にメモリエラー監視ソフトウェア０１０の構成例を示す。メモリエラー監視ソフトウェア０１０は、ＣＥ発生箇所特定手段０１１と、メモリエラー管理テーブル参照手段０１２と、ＣＥ発生回数カウント手段０１３と、ページオフライン指示手段０１４とを有している。
ＣＥ発生箇所特定手段０１１は、メモリＣＥが発生したＤＲＡＭ３３０１を特定する。
メモリエラー管理テーブル参照手段０１２は、後述するメモリエラー管理テーブル５００を参照して、メモリＣＥが発生したＤＲＡＭ３３０１について、予備ＤＲＡＭ３３０２へのデータコピーが実行済みか否かを示す情報を取得する。
ＣＥ発生回数カウント手段０１３は、メモリコントローラ３２０から通知されたメモリＣＥの回数をページ単位でカウントする。
ページオフライン指示手段０１４は、ＣＥ発生回数カウント手段０１３がカウントしたＣＥの発生回数が閾値を超えると、メモリＣＥの発生回数が閾値を超えたページを無効化するようにＫｅｒｎｅｌ１１０へ指示する。
【００２３】
図３（ｂ）にＫｅｒｎｅｌ１１０の構成例を示す。Ｋｅｒｎｅｌ１１０は、ページデータコピー手段１１１と、ページ無効化手段１１２とを有している。
ページデータコピー手段１１１は、ページ無効化の前に無効化対象のページから有効なページへデータをコピーする。
ページ無効化手段１１２は、メモリエラー監視ソフトウェア０１０（ページオフライン指示手段０１４）から指定されたページを無効化する。
【００２４】
図３（ｃ）にＢＩＯＳ２１０の構成例を示す。ＢＩＯＳ２１０は、ＣＥ発生箇所特定手段２１１と、メモリエラー管理テーブル更新手段２１２と、ＤＲＡＭコピー指示手段２１３と、ＢＩＯＳ通知有効無効手段２１４と、ＳＷ通知有効無効手段２１５と、を有している。
ＣＥ発生箇所特定手段２１１は、メモリＣＥが発生したＤＲＡＭ３３０１を特定する。
メモリエラー管理テーブル更新手段２１２は、後述するメモリエラー管理テーブル５００のデータコピーを行ったＤＲＡＭ３３０１の位置に対応するデータへ、ＨＷ機能が実行済みであることを示す情報を登録する。
ＤＲＡＭコピー指示手段２１３は、メモリＣＥの発生回数が閾値を超えたＤＲＡＭ３３０１について、そのＤＲＡＭ３３０１のデータを予備ＤＲＡＭ３３０２へコピーするようメモリコントローラ３２０へ指示する。これは、ＨＷ機能の実行指示である。
ＢＩＯＳ通知有効無効手段２１４は、ＤＲＡＭ３３０１でメモリＣＥが発生した場合、ＢＩＯＳ２１０にメモリＣＥの発生を通知するか否かを設定する。
ＳＷ通知有効無効手段２１５は、ＤＲＡＭ３３０１でメモリＣＥが発生した場合、メモリエラー監視ソフトウェア０１０にメモリＣＥの発生を通知するか否かを設定する。
【００２５】
図４は、本発明の一実施形態に係るメモリエラー管理テーブルの一例を示す図である。
図４に示すようにメモリエラー管理テーブル５００は、ＣＰＵテーブル５０１を含む。ＣＰＵテーブル５０１は、メモリコントローラテーブル５０２を含む。メモリコントローラテーブル５０２は、チャネルテーブル５０３を含む。チャネルテーブル５０３は、ランクテーブル５０４を含む。
【００２６】
図４には一例として、ＣＰＵ３０１が４つ、各ＣＰＵ３０１に対してメモリコントローラ３０２が２つ、各メモリコントローラ３０２に対してＣＨが３つ、各ＣＨに対してランクが７つ設けられたコンピュータシステム４００の場合のメモリエラー管理テーブル５００を例示する。
コンピュータシステム４００がこのような構成の場合、図示するように、メモリエラー管理テーブル５００は、ＣＰＵ１〜ＣＰＵ４に対応するＣＰＵテーブル５０１−１〜５０１−４を含む。また、例えば、ＣＰＵ１に対応するＣＰＵテーブル５０１は、メモリコントローラテーブル５０２−１〜５０２−２を含む。また、例えば、メモリコントローラテーブル５０２−１は、チャネルテーブル５０３−１〜５０３−３を含む。また、例えば、チャネルテーブル５０３−１は、ランクテーブル５０４−１〜５０４−７を含む。
そして、ランクテーブル５０４−１〜５０４−７の各々には、ＨＷ機能が実行済みであることを示す値（例えば、０ｘＦＦ）、又は、ＨＷ機能が未実行であることを示す値（例えば、０ｘ００）が格納される。初期状態では、ランクテーブル５０４−１〜５０４−７の各々には、「０ｘ００」の値が格納されている。そして、ＢＩＯＳ２１０は、メモリコントローラ３２０にＨＷ機能の実行を指示すると、当該ＤＲＡＭ３３０１を含むランクに対応するランクテーブル５０４（例えば、ランクテーブル５０４−１）に「０ｘＦＦ」を書き込む。メモリエラー監視ソフトウェア０１０は、「０ｘＦＦ」が格納されていることを確認してから、ページ無効化の指示を行う。これにより、まず、ＨＷ機能を動作し、その後、ＳＷ機能を動作させるという処理の順序が確保される。
【００２７】
メモリエラー管理テーブル５００は、ＢＩＯＳ２１０が、メモリエラー管理テーブル更新手段２１２を使って書き込みを行い、メモリエラー監視ソフトウェア０１０がメモリエラー管理テーブル参照手段０１２を使って読み込みを行う。従って、メモリエラー管理テーブル５００は、ＢＩＯＳ２１０とメモリエラー監視ソフトウェア０１０が、アクセス可能な共有メモリ等に配置される。
【００２８】
（動作）
次にメモリＣＥ発生時の動作について説明する。
図５は、本発明の一実施形態に係る制御の一例を示す第１のフローチャートである。
図５にＣＥ発生時の通知先の初期設定を行う処理を示す。
ＢＩＯＳ２１０は、ＢＩＯＳ通知有効無効手段２１４を使ってメモリコントローラ３２０に対してメモリＣＥの発生をＢＩＯＳ２１０へ通知するよう設定しておく（ステップＳ１）。また、ＢＩＯＳ２１０は、ＳＷ通知有効無効手段２１５を使ってメモリコントローラ３２０に対してメモリＣＥの発生をＳＷ０００へ通知しないように設定しておく（ステップＳ２）。メモリコントローラ３２０は、この設定を受け取って、ＢＩＯＳ通知機能３２４とＳＷ通知機能３２５の有効、無効設定を行う。これらの初期設定により、ＥＣＣで訂正されたメモリＣＥが閾値を越えて発生した場合、その通知は、ＢＩＯＳ通知機能３２４により、ＢＩＯＳ２１０へ通知される。次に初期設定がされた状態でメモリＣＥが発生したときの動作を、図６を参照して説明する。
【００２９】
図６は、本発明の一実施形態に係る制御の一例を示す第２のフローチャートである。
メモリＣＥが発生したメモリコントローラ３２０は、ＥＣＣ訂正機能３２２を使ってメモリＣＥを訂正する（ステップＳ１１）。次にメモリコントローラ３２０は、ＣＥ回数カウント機能３２１を使ってメモリＣＥの発生回数をカウントする（ステップＳ１２）。メモリコントローラ３２０は、メモリＣＥの発生回数が閾値に到達したか否かを確認する（ステップＳ１３）。閾値に到達していない場合、図６に示す処理を終了する。閾値に到達した場合、メモリコントローラ３２０は、ＢＩＯＳ通知機能３２４を使って、メモリＣＥの発生をＢＩＯＳ２１０へ通知する（ステップＳ１４）。
メモリＣＥの発生がＢＩＯＳ２１０へ通知されると、始めにＨＷ機能を使ってエラーが発生したＤＲＡＭのデータを予備ＤＲＡＭへ移す。次に図７を参照してこの処理を説明する。
【００３０】
図７は、本発明の一実施形態に係る制御の一例を示す第３のフローチャートである。
メモリＣＥ発生の通知を受信したＢＩＯＳ２１０は、ＤＲＡＭコピー指示手段２１３を使ってメモリコントローラ３２０に対して、メモリＣＥが発生したＤＲＡＭ３３０１のデータを予備ＤＲＡＭ３３０２へコピーするよう指示する（ステップＳ２１）。メモリコントローラ３２０は、この指示を受けて、ＤＲＡＭコピー機能３２３を使って、指定されたＤＲＡＭ３３０１から同じランクの予備ＤＲＡＭ３３０２へのデータのコピーを行って、ＨＷ機能を動作させる。次にＢＩＯＳ２１０は、ＣＥ発生箇所特定手段２１１を使ってメモリＣＥが発生したＤＲＡＭ３３０１を特定する（ステップＳ２２）。次にＢＩＯＳ２１０は、メモリエラー管理テーブル更新手段２１２を使ってメモリＣＥが発生したＤＲＡＭ３３０１の位置をメモリエラー管理テーブル５００に登録する（ステップＳ２３）。例えば、メモリＣＥが発生したＤＲＡＭの位置が、「ＣＰＵ１−メモリコントローラ１−チャネル１−ランク１」であった場合、図４に例示で示されるメモリエラー管理テーブル５００の「ＣＰＵ１−メモリコントローラ１−チャネル１−ランク１」に該当する箇所にＨＷ機能動作済み（ステップ１動作済み）を示す値（例えば、「０ｘＦＦ」）を登録する。次に、ＢＩＯＳ２１０は、ＢＩＯＳ通知有効無効手段２１４を使ってメモリコントローラ３２０に対して、ＨＷ機能動作済みのランクで発生したメモリＣＥをＢＩＯＳ２１０へ通知しないよう設定する（ステップＳ２４）。最後に、ＢＩＯＳ２１０は、ＳＷ通知有効無効手段２１５を使って、メモリコントローラ３２０に対して、ＨＷ機能動作済みのランクに属する何れかのＤＲＡＭ３３０１におけるメモリＣＥの発生をＳＷ０００（メモリエラー監視ソフトウェア０１０）へ通知するよう設定する（ステップＳ２５）。これにより、ＨＷ機能を動作させたランクで、その後、他のＤＲＡＭ３３０１等でメモリＣＥが発生すると、そのメモリＣＥの発生はメモリエラー監視ソフトウェア０１０へ通知される。これは、ＨＷ機能が既に動作済みの場合、予備ＤＲＡＭ３３０２が無いため、ＳＷ機能で対処する必要があるためである。メモリＣＥの発生回数は、メモリエラー監視ソフトウェア０１０でカウントされ、閾値を上回るようになると、ＳＷ機能を使って、エラーが発生したページのデータを別のページに移す。その場合の処理の流れを図８に示す。
【００３１】
図８は、本発明の一実施形態に係る制御の一例を示す第４のフローチャートである。
メモリコントローラ３２０は、メモリＣＥの発生を検出すると、ＥＣＣ訂正機能３２２を使ってメモリＣＥ訂正する（ステップＳ３１）。次にメモリコントローラ３２０は、ＨＷ機能動作済みであることに基づいて（ＣＥ回数をカウントせずに）、ＳＷ通知機能３２５を使ってメモリＣＥの発生をメモリエラー監視ソフトウェア０１０へ通知する（ステップＳ３２）。メモリＣＥの発生が通知されたメモリエラー監視ソフトウェア０１０の動作を、図９を参照して説明する。
【００３２】
図９は、本発明の一実施形態に係る制御の一例を示す第５のフローチャートである。
メモリエラー監視ソフトウェア０１０は、ＣＥ発生箇所特定手段０１１を使ってＣＥが発生したＤＲＡＭ３３０１を特定する（ステップＳ４１）。次にメモリエラー監視ソフトウェア０１０は、メモリエラー管理テーブル参照手段０１２を使って、ステップＳ４１で特定したメモリＣＥが発生したＤＲＡＭ３３０１の位置をキーにして、メモリエラー管理テーブル５００を検索して、ＨＷ機能が既に動作済みか否かを調べる（ステップ４２及びステップＳ４３）。ＨＷ機能がまだ動作していない場合は、図９の処理を終了する。ＨＷ機能が既に動作済みの場合、メモリエラー監視ソフトウェア０１０は、ＣＥ発生回数カウント手段０１３を使ってＣＥ発生回数をページ単位でカウントする（ステップＳ４４）。ＣＥ発生回数カウント手段０１３は、ステップＳ４１で特定されたＤＲＡＭ３３０１に対応する（マッピングされた）ページについてＣＥ発生回数をカウントする。メモリエラー監視ソフトウェア０１０は、ＣＥ発生回数が閾値に到達したか否かを確認する（ステップＳ４５）。閾値に到達していない場合、図９の処理を終了する。閾値に到達した場合、メモリエラー監視ソフトウェア０１０は、ページオフライン指示手段０１４を使って、無効化するページを指定して、Ｋｅｒｎｅｌ１１０に対して、ページオフラインを指示する（ステップＳ４６）。
【００３３】
図１０は、本発明の一実施形態に係る制御の一例を示す第６のフローチャートである。
図１０を参照して、ページオフラインを指示されたＫｅｒｎｅｌ１１０の動作を説明する。Ｋｅｒｎｅｌ１１０は、ページデータコピー手段１１１を使って、メモリエラー監視ソフトウェア０１０から指定されたページ上のデータを別のページへコピーする（ステップＳ５１）。次にＫｅｒｎｅｌ１１０は、ページ無効化手段１１２を使って、メモリエラー監視ソフトウェア０１０から指定されたメモリＣＥが発生したページを使わないよう無効化する（ステップＳ５２）。これにより、ＳＷ機能が実行済みとなる。
【００３４】
次にメモリエラー管理テーブル５００の登録と参照について具体例を交えて説明する。
例えば、図７のステップＳ２２において、ＢＩＯＳ２１０は、メモリＣＥが発生したＤＲＡＭの位置が、「ＣＰＵ１−メモリコントローラ１−チャネル１−ランク１」であると特定すると、ステップＳ２３において、ＢＩＯＳ２１０は、図４に例示するメモリエラー管理テーブル５００の「ＣＰＵ１−メモリコントローラ１−チャネル１−ランク１」に該当する箇所にＨＷ機能（予備ＤＲＡＭへのデータコピー）が動作済みであることを示す値を登録する。そして、図９の処理のステップＳ４１において、メモリエラー監視ソフトウェア０１０は、メモリＣＥが発生したＤＲＡＭの位置が、「ＣＰＵ１−メモリコントローラ１−チャネル１−ランク１」であると特定すると、メモリエラー管理テーブル５００の「ＣＰＵ１−メモリコントローラ１−チャネル１−ランク１」に該当する箇所を参照して、ＨＷ機能が動作済みであることを確認する。そして、メモリエラー監視ソフトウェア０１０は、ステップＳ４４においてＣＥ発生回数をカウントし、閾値に到達していた場合、ステップＳ４６においてＳＷ機能（ページオフライン）を動作させる。このように本実施形態では、メモリエラー管理テーブル５００に基づいて、ＨＷ機能が実行済みであることが確認されてから、ＳＷ機能を動作させる。
【００３５】
本実施形態によれば、ＨＷ３００とＳＷ０００の中間に位置するＦＷ２００にメモリエラー管理テーブル５００を作成しておく。また、メモリＣＥが発生すると最初はＦＷ２００に通知が行き、ＦＷ２００がＨＷ機能を動作させる。さらにＦＷ２００はＨＷ機能を動作させたＤＲＡＭの位置をメモリエラー管理テーブル５００に登録する。そして、ＦＷ２００は、次にメモリＣＥが発生した場合、ＳＷ０００に通知が行くように設定する。さらにメモリＣＥが発生するとＳＷ０００に通知が行き、ＳＷ０００がメモリＣＥを認識すると、メモリＣＥが発生したＤＲＡＭを特定し、メモリエラー管理テーブル５００を参照して、特定したＤＲＡＭに対してＨＷ機能が動作済みなのかを確認する。ＨＷ機能が動作済みの場合、ＳＷ０００はページオフライン機能を動作させる。これにより、まずＨＷ機能を動作させ、それでもなお、メモリＣＥが発生する場合にＳＷ機能を動作させるという制御を実現することができる。
【００３６】
また、上記したように、本実施形態によれば、ＢＩＯＳ２１０によるメモリＣＥエラーの通知先の設定処理（図５）により、必ず先にＨＷ機能が動作する。そのため、ＨＷの機能によってメモリＣＥの発生が収まれば、ＳＷ機能（ページオフライン）が動作することはない。その場合、（１）ユーザが利用できるメモリページが減る、（２）カーネルによるデータの移動というオーバーヘッドが生じる、といった影響を受けることなく、コンピュータシステム４００の運用を継続することができる。
さらにメモリＣＥが発生した場合には、その時点で、ＳＷ機能を動作させることで、メモリＣＥが複数個所で同時に発生しＵＣＥとなり、コンピュータシステム４００がシステムダウンすることを防止できる。
【００３７】
また、本実施形態では、ＢＩＯＳ２１０のＢＩＯＳ通知有効無効手段２１４、ＳＷ通知有効無効手段２１５の設定に基づいて、ＨＷ機能実行前であれば、メモリコントローラ３２０からＢＩＯＳ２１０へ、ＨＷ機能実行後であれば、メモリコントローラ３２０からメモリエラー監視ソフトウェア０１０へメモリＣＥ発生の通知を行う。また、無効化が必要なページに対応するＤＲＡＭ３３０１の位置は、メモリエラー管理テーブル５００を介してメモリエラー監視ソフトウェア０１０に通知される。そのため、ＢＩＯＳが無効化（閉塞）すべきページを通知する必要が無く効率的である。
また、メモリエラー監視ソフトウェア０１０は、メモリエラー管理テーブル５００でＤＲＡＭ３３０１の位置を確認して、そのメモリ位置に対応するページを無効化するので、無効化対象のページを検索する必要が無く効率的である。
従って、メモリの大容量化に伴いエラーの発生頻度が増加する可能性のあるインメモリ・コンピューティング環境においても、滞りなく、メモリ障害への対処を行うことができる。
【００３８】
また、メモリエラー管理テーブル５００には、コンピュータシステム４００が実際に搭載する（有限の）ＤＲＡＭ３３０１の情報を登録しておけば、メモリエラー管理テーブル５００に基づいて、どのＤＲＡＭ３３０１でメモリＣＥが発生しても上記処理により対処することができる。従って、無効化できるページ数に上限値を設ける等の制約が生じることが無い。
【００３９】
図１１は、本発明の一実施形態に係るメモリ障害対処システムの最小構成を示す図である。
図１１に示すようにメモリ障害対処システム１０は、少なくともソフトウェア２０と、ファームウェア３０と、メモリコントローラ４０とを含む。
メモリコントローラ４０は、メモリエラー（ＣＥ）の発生を検出すると、メモリエラーの発生をファームウェア３０またはソフトウェア２０へ通知するエラー発生通知部４１を有する。
ソフトウェア２０は、メモリコントローラ３２０からメモリエラー発生の通知を受けると、メモリエラーが発生したメモリに対応するページを無効化するようカーネルに指示するページ無効化指示部２１を有する。
ファームウェア３０は、メモリコントローラ４０がメモリエラーの発生を検出した時のメモリエラー発生の通知先（ソフトウェア２０またはファームウェア３０）をメモリコントローラ４０へ設定する通知先設定部３２と、メモリコントローラ４０からメモリエラー発生の通知を受けると、メモリエラーが発生したメモリから予備メモリへの切り替えをメモリコントローラ４０へ指示する予備メモリ切替指示部３１と、を有する。
上記の実施形態の構成と対比すると、ソフトウェア２０はメモリエラー監視ソフトウェア０１０に対応し、ファームウェア３０はＢＩＯＳ２１０に対応し、メモリコントローラ４０はメモリコントローラ２３０に対応する。
また、エラー発生通知部４１はＢＩＯＳ通知機能３２４およびＳＷ通知機能３２５に対応し、ページ無効化指示部２１はページオフライン指示手段０１４に対応し、予備メモリ切替指示部３１はＤＲＡＭコピー指示手段２１３に対応し、通知先設定部３２はＢＩＯＳ通知有効無効手段２１４およびＳＷ通知有効無効手段２１５に対応する。
【００４０】
なお、メモリエラー監視ソフトウェア０１０の各手段、Ｋｅｒｎｅｌ１１０の各手段、ＢＩＯＳ２１０の各手段による各処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムを、ＣＰＵ３１０が読み出して実行することによって、上記処理が行われる。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしてもよい。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００４１】
その他、本発明の趣旨を逸脱しない範囲で、上記した実施の形態における構成要素を周知の構成要素に置き換えることは適宜可能である。また、この発明の技術範囲は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲において種々の変更を加えることが可能である。コンピュータシステム４００は、情報処理装置の一例である。
【符号の説明】
【００４２】
０００・・・ＳＷ
０１０・・・メモリエラー監視ソフトウェア
０１１・・・ＣＥ発生箇所特定手段
０１２・・・メモリエラー管理テーブル参照手段
０１３・・・ＣＥ発生回数カウント手段
０１４・・・ページオフライン指示手段
１００・・・ＯＳ
１１０・・・Ｋｅｒｎｅｌ
１１１・・・ページデータコピー手段
１１２・・・ページ無効化手段
２００・・・ＦＷ
２１０・・・ＢＩＯＳ
２１１・・・ＣＥ発生箇所特定手段
２１２・・・メモリエラー管理テーブル更新手段
２１３・・・ＤＲＡＭコピー指示手段
２１４・・・ＢＩＯＳ通知有効無効手段
２１５・・・ＳＷ通知有効無効手段
３００・・・ＨＷ
３１０・・・ＣＰＵ
３２０・・・メモリコントローラ
３２１・・・ＣＥ回数カウント機能
３２２・・・ＥＣＣ訂正機能
３２３・・・ＤＲＡＭコピー機能
３２４・・・ＢＩＯＳ通知機能
３２５・・・ＳＷ通知機能
３３０・・・ＤＩＭＭ
３３１１、３３２１・・・ＤＲＡＭ
４００・・・コンピュータシステム
５００・・・メモリエラー管理テーブル
５０１・・・ＣＰＵテーブル
５０２・・・メモリコントローラテーブル
５０３・・・チャネルテーブル
５０４・・・ランクテーブル
【図１】
2020154591.tif 000003
【図２】
2020154591.tif 000004
【図３】
2020154591.tif 000005
【図４】
2020154591.tif 000006
【図５】
2020154591.tif 000007
【図６】
2020154591.tif 000008
【図７】
2020154591.tif 000009
【図８】
2020154591.tif 000010
【図９】
2020154591.tif 000011
【図１０】
2020154591.tif 000012
【図１１】
2020154591.tif 000013