説明

メモリ冗長化装置、メモリ冗長化方法、及びプログラム

【課題】メモリミラーを行う際、メインメモリと同じ容量のミラーメモリを持たない限り、全てのデータを保証することはできない。
【解決手段】メモリ冗長化装置は、データを格納するためのメインメモリと、メインメモリと同じ容量を必要とせず、メインメモリの冗長データを保持するための部分的なミラーメモリと、メインメモリに最後に書き込んだデータをミラーメモリに格納する擬似LRUアルゴリズムを採用し、比較的アクセス頻度の高いデータとマスクアドレスとをミラーメモリに残すコントローラとを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ冗長化装置に関し、特に部分的メモリミラーを行うメモリ冗長化装置に関する。
【背景技術】
【0002】
メモリの冗長性・信頼性を高める技術の1つとして、「ECC」(Error Checking and Correcting:エラー検出訂正)という技術が知られている。
【0003】
ECCに対応したメモリは、本来のデータとは別に付加された冗長データを持つ。この冗長データを「ECCコード」(Error Correcting Code:誤り訂正符号)と呼ぶ。一般的には、ECCに対応したメモリには、64ビットのデータにECCコードが付加されて書き込まれている。ECCコードは、予め64ビットのデータの並びを8ビットで定義しておいたものである。
【0004】
メモリにアクセス可能なコントローラは、メモリからデータを読み出す際、64ビットのデータから8ビットのECCコードを生成して、元のECCコードと比較する。ECCコードの値が同じである場合、データにエラーがなく読み出せたと判断する。反対に、ECCコードの値が異なる場合、データエラーが発生していると判断し、ECCコードから正しいデータを算出して、データを訂正する。
【0005】
しかし、ECCでは、シングルビット(1ビット)のエラーの訂正可能であるが、マルチビット(2ビット以上)のエラーは検出できても訂正はできない。
【0006】
マルチビットエラーを訂正するための技術として、「拡張ECC」(アドバンストECC)という技術も知られている。
【0007】
しかし、拡張ECCは、例えば、4ビットのメモリの場合、各メモリの4ビットのデータを、それぞれ分割して4つのコントローラに入力することで、仮にメモリ全体が障害を起こしたとしても、各コントローラでは、1ビットのエラーとして処理でき、データの訂正を行うことができるというものである。すなわち、メモリのビット数分だけコントローラを用意する必要がある。
【0008】
現在、メモリの二重化によりデータを保護する「メモリミラー」という技術が知られている。
【0009】
メモリミラーでは、ミラー化した構成を実現し、メモリ保護を行う。メモリミラーを行うことで、コントローラが1つでも、マルチビットエラーのようなECCでは訂正不可能なエラーからデータを保護することが可能になる。
【0010】
メモリミラーのために、メインメモリと対になるミラーメモリ(冗長メモリ)を構成した場合、データはミラー化した2つのメモリ(メインメモリとミラーメモリ)に同時に書き込まれる。
【0011】
しかし、現在の技術では、メモリミラーを行う際、メインメモリと同じ容量のミラーメモリを持たない限り、全てのデータを保証することはできない。
【0012】
したがって、メモリミラーを実現するためには、必要容量の2倍の物理メモリ容量を必要としていた。このため、メモリ価格も必要容量の2倍となってしまうという問題があった。また、1つのメモリモジュールを2分してミラー化した場合、実際に使用可能なメモリ容量は、全体容量のうちの半分となってしまうという問題もあった。
【0013】
Intel(登録商標)社のマルチコア・プロセッサ「Westmere−EX」には、これを削減する目的で、部分的メモリミラー(Partial Memory Mirror)機能が搭載されている。
【0014】
しかし、この機能を活用するためには、OS(Operating System)側の対応も必要なため、実際にはOS側が非対応で活用できないケースが多い。
【0015】
そのため、メモリミラーを実現する際、最低限の冗長HW(ハードウェア:hardware)リソース量の追加で投資(リソース投入量)以上の救済率を図りたいという要望が高まっている。
【0016】
関連する技術として、特許文献1(特開2009−199478号公報)にメモリミラーリング自動構成制御方式が開示されている。この関連技術では、計算機は、ユーザが設定したメモリ使用率の閾値情報を保有している。OSは、常に現在使用しているメモリ使用率と、計算機が保有しているメモリ使用率の閾値を比較し監視する。OSは、現在使用しているメモリの使用率が、メモリ使用率の閾値以上になったことを検出したとき、F/W(FirmWare)に対してメモリ使用率が閾値を超えたことを報告する。報告を受け取った計算機のF/Wは、メモリミラーリングによって、OSが参照できないメモリをHot−Removeする。その後F/Wはメモリミラーリング機能を解除し、このメモリを再びHot−Addする。更にF/Wは、Hot−Addしたメモリを、OSが新たに参照できるメモリアドレス空間に配置し、OSに対して作業完了の報告を行う。
【0017】
また、特許文献2(特開2011−048742号公報)にミラーリング制御装置、ミラーリング制御回路、ミラーリング制御方法およびそのプログラムが開示されている。この関連技術では、第1記憶部は、対象データの分割により生成された第1分割後データと第2分割後データのうちの第1分割後データと、第2分割後データのコピーデータとを所定の間隔の各アドレスに記憶する。第2記憶部は、第2分割後データと、第1分割後データのコピーデータとを所定の間隔の各アドレスに記憶する。そして、対象データの読み出し要求に基づいて、当該読み出し要求が示すアドレスとそのアドレスを基準とする所定の間隔の他のアドレスから第1分割後データと第2分割後データのコピーデータとを第1記憶部から読み出す。また、対象データの読み出し要求に基づいて、当該読み出し要求が示すアドレスとそのアドレスを基準とする所定の間隔の他のアドレスから第2分割後データと第1分割後データのコピーデータとを第2記憶部から読み出す。
【先行技術文献】
【特許文献】
【0018】
【特許文献1】特開2009−199478号公報
【特許文献2】特開2011−048742号公報
【発明の概要】
【発明が解決しようとする課題】
【0019】
本発明の目的は、HW制御のみで、部分的なメモリミラーを実現し、擬似LRU(Least Recently Used)により投資したHWリソース量以上の効果(救済率)を実現するメモリ冗長化装置を提供することである。
【課題を解決するための手段】
【0020】
本発明に係るメモリ冗長化装置は、データを格納するためのメインメモリと、該メインメモリと同じ容量を必要とせず、該メインメモリの冗長データを保持するための部分的なミラーメモリと、該メインメモリに最後に書き込んだデータを該ミラーメモリに格納する擬似LRUアルゴリズムを採用し、比較的アクセス頻度の高いデータとマスクアドレスとを該ミラーメモリに残すコントローラとを具備する。
【0021】
本発明に係るメモリ冗長化方法は、計算機により実施されるメモリ冗長化方法であって、メインメモリにデータを格納することと、該メインメモリと同じ容量を必要とせず該メインメモリの冗長データを保持するための部分的なミラーメモリに、該メインメモリに最後に書き込んだデータを格納する擬似LRUアルゴリズムを採用し、比較的アクセス頻度の高いデータとマスクアドレスとを該ミラーメモリに残すこととを含む。
【0022】
本発明に係るプログラムは、上記のメモリ冗長化方法における処理を、計算機に実行させるためのプログラムである。なお、本発明に係るプログラムは、記憶装置や記憶媒体に格納することが可能である。
【発明の効果】
【0023】
最低限の冗長HWリソース量の追加で投資以上の救済率を図ることが可能になる。
【図面の簡単な説明】
【0024】
【図1】本発明に係るメモリ冗長化装置の構成例を示す概念図である。
【図2】本発明に係るメモリ冗長化装置の構成要素であるコントローラの構成例を示すブロック図である。
【図3】本発明に係るメモリ冗長化装置の動作概要を示す図である。
【図4】本発明に係るメモリ冗長化装置の実施例を示す図である。
【発明を実施するための形態】
【0025】
<第1実施形態>
以下に、本発明の第1実施形態について添付図面を参照して説明する。
【0026】
[基本構成]
図1に示すように、本発明に係るメモリ冗長化装置は、メインメモリ(Main Memory)10と、ミラーメモリ(Mirror Memory)20と、コントローラ(Controller)30を含む。
【0027】
メインメモリ(Main Memory)10は、データ(Data)を記憶するための半導体記憶装置である。
【0028】
ミラーメモリ(Mirror Memory)20は、メインメモリ(Main Memory)10のデータの複製を保存するための冗長メモリである。
【0029】
コントローラ(Controller)30は、メインメモリ(Main Memory)10とミラーメモリ(Mirror Memory)20との間のメモリミラーを制御するためのメモリアクセスコントローラである。
【0030】
[データの書き込み(Write)]
コントローラ(Controller)30は、メモリにデータを書き込む際は、メインメモリ(Main Memory)10とミラーメモリ(Mirror Memory)20に同時に書き込む。
【0031】
[データの読み出し(Read)]
コントローラ(Controller)30は、メモリからデータを読み出す際は、ECC(Error Checking and Correcting)により、データからECCコードを生成して、元のECCコードと比較することで、データエラーが発生していないか確認する。エラーが発生していない場合、コントローラ(Controller)30は、更にメインメモリ(Main Memory)10とミラーメモリ(Mirror Memory)20の両方のデータを比較して、値が同じであることを確認する。もし、メインメモリ(Main Memory)10で訂正不可能なエラーが検出された場合、コントローラ(Controller)30は、メインメモリ(Main Memory)10のデータの代わりに、ミラーメモリ(Mirror Memory)20のデータを使用して業務を継続することが可能である。
【0032】
なお、コントローラ(Controller)30は、メモリでエラーが発生していないか事前に検査を行い、エラーを事前に検出するメモリパトロールを行う機能を有していても良い。この場合、コントローラ(Controller)30は、メモリパトロールを行い、OS(Operating System)やアプリケーションソフトウェア(Application Software)がメモリを使用する前にエラー発生を検出し、エラー訂正や縮退を行う。
【0033】
図1においては、コントローラ(Controller)30は、「(a=一致)and(b=error)and(c=normal)」の条件を満たすとき、メインメモリ(Main Memory)10のデータの代わりに、ミラーメモリ(Mirror Memory)20のデータを選択する。詳細については、以下に説明する。
【0034】
[コントローラの構成]
図2を参照して、コントローラの構成の詳細について説明する。
【0035】
コントローラ(Controller)30は、索引処理部31と、書き込み処理部32と、マスクアドレス格納処理部33と、メモリ制御部34を備える。
【0036】
索引処理部31は、メインメモリ(Main Memory)10の冗長データを保持するための部分的なミラーメモリ(Mirror Memory)20に対して、本来のアドレス(Address)を一部分マスクしたアドレス情報(マスクアドレス)で索引する。
【0037】
書き込み処理部32は、メインメモリ(Main Memory)10と同じデータをミラーメモリ(Mirror Memory)20に書き込む。
【0038】
マスクアドレス格納処理部33は、ミラーメモリ(Mirror Memory)20のマスクアドレス格納領域にマスクアドレスを格納する。
【0039】
メモリ制御部34は、メインメモリ(Main Memory)10のデータが破壊されていた場合、ミラーメモリ(Mirror Memory)20に、目的とする正常なデータが格納されているか判断し、正常なデータが格納されている場合、メインメモリ(Main Memory)10のデータ(破壊されたデータ)の代わりに、ミラーメモリ(Mirror Memory)20のデータ(正常なデータ)を選択・採用する。
【0040】
[ハードウェアの例示]
以下に、本発明に係るメモリ冗長化装置を実現するための具体的なハードウェアの例について説明する。
【0041】
メモリ冗長化装置の例として、PC(パソコン)、アプライアンス(appliance)、シンクライアントサーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。他にも、メモリ冗長化装置の例として、携帯電話機、スマートフォン、スマートブック、カーナビ(カーナビゲーションシステム)、携帯型ゲーム機、家庭用ゲーム機、携帯型音楽プレーヤー、ハンディターミナル、ガジェット(電子機器)、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電(information home appliance)、POS(Point of Sale)端末、OA(Office Automation)機器、店頭端末・高機能コピー機、デジタルサイネージ(Digital Signage:電子看板)等も考えられる。メモリ冗長化装置は、車両や船舶、航空機等の移動体に搭載されていても良い。なお、メモリ冗長化装置は、端末やサーバに限らず、中継機器や周辺機器でも良い。また、メモリ冗長化装置は、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシン(VM:Virtual Machine)でも良い。
【0042】
図示しないが、上記のようなメモリ冗長化装置は、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。
【0043】
上記のプロセッサの例として、CPU(Central Processing Unit)、ネットワークプロセッサ(NP:Network Processor)、マイクロプロセッサ(microprocessor)、マイクロコントローラ、或いは、専用の機能を有する半導体集積回路(IC:Integrated Circuit)等が考えられる。
【0044】
上記のメモリの例として、RAM(Random Access Memory)、ROM(Read Only Memory)、EEPROM(Electrically Erasable and Programmable Read Only Memory)やフラッシュメモリ等の半導体記憶装置を想定している。現在の市場で使用されているメモリの殆どは、DRAM(Dynamic Random Access Memory)である。DRAMは、駆動方式の違いにより、「SDRAM」(Synchronous DRAM)、「DDR SDRAM」(Double Data Rate SDRAM)、「DDR2 SDRAM」(Double Data Rate 2 SDRAM)、「DDR3 SDRAM」(Double Data Rate 3 SDRAM)等に分類することができる。他にも、メモリの例として、HDD(Hard Disk Drive)やSSD(Solid State Drive)等の補助記憶装置、又は、DVD(Digital Versatile Disk)等のリムーバブルディスクや、SDメモリカード(Secure Digital memory card)等の記憶媒体(メディア)等が考えられる。或いは、DAS(Direct Attached Storage)、FC−SAN(Fibre Channel − Storage Area Network)、NAS(Network Attached Storage)、IP−SAN(IP − Storage Area Network)等を用いたストレージ装置でも良い。また、バッファ(buffer)やレジスタ(register)でも良い。
【0045】
なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の1チップ化が進んでいる。したがって、メモリ冗長化装置に搭載される1チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例が考えられる。
【0046】
上記のインターフェースの例として、ネットワーク通信に対応した基板(マザーボード、I/Oボード)やチップ等の半導体集積回路、NIC(Network Interface Card)等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口(コネクタ)等の通信ポート等が考えられる。
【0047】
また、ネットワークの例として、インターネット、LAN(Local Area Network)、無線LAN(Wireless LAN)、WAN(Wide Area Network)、バックボーン(Backbone)、ケーブルテレビ(CATV)回線、固定電話網、携帯電話網、WiMAX(IEEE 802.16a)、3G(3rd Generation)、専用線(lease line)、IrDA(Infrared Data Association)、Bluetooth(登録商標)、シリアル通信回線、データバス等が考えられる。
【0048】
例えば、メインメモリ(Main Memory)10及びミラーメモリ(Mirror Memory)20は、上記のメモリにより実現される。コントローラ(Controller)30は、上記のプロセッサにより実現される。
【0049】
なお、コントローラ(Controller)30内の各部(内部構成)は、モジュール(module)、コンポーネント(component)、或いは専用デバイス、又はこれらの起動(呼出)プログラムでも良い。
【0050】
但し、実際には、これらの例に限定されない。
【0051】
[動作概要]
図3を参照して、本発明に係るメモリ冗長化装置の動作概要について説明する。
【0052】
(1)ステップS1
コントローラ(Controller)30は、データの書き込み時、メインメモリ(Main Memory)10にデータを書き込むと同時に、ミラーメモリ(Mirror Memory)20にも、マスクアドレスと共にデータを書き込む。結果として、ミラーメモリ(Mirror Memory)20には、最近書き込みが発生したデータが格納されていることになる。
【0053】
(2)ステップS2
コントローラ(Controller)30は、データの読み出し時、メインメモリ(Main Memory)10に訂正不可エラーが発生した場合、ミラーメモリ(Mirror Memory)20のマスクアドレスを調べ、該当アドレスのデータであった場合、そのデータのみ、ミラーメモリ(Mirror Memory)20側から取り出す。
【0054】
(3)ステップS3
コントローラ(Controller)30は、該当アドレス以外のデータ(他のデータ)であった場合、擬似LRU制御を行い、最後に書き込み(Write)されたデータを優先して格納する。
【0055】
これにより、データを救済できる確率が高まる。
【0056】
[実施例]
図4を参照して、本発明に係るメモリ冗長化装置の実施例について説明する。
【0057】
(1)アドレス「0x0000」に対し、データ「Data#0000」の書き込み(Write)が発生。
【0058】
コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x0000」に対し、データ「Data#0000」の書き込み(Write)を行う。
【0059】
コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に対し、データ「Data#0000」の書き込み(Write)を行う。また、コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に対するマスクアドレスとして「0」を格納する(マスクアドレス=0)。
【0060】
(2)アドレス「0x0001」に対し、データ「Data#0001」の書き込み(Write)が発生。
【0061】
コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x0001」に対し、データ「Data#0001」の書き込み(Write)を行う。
【0062】
コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0001」に対し、データ「Data#0001」の書き込み(Write)を行う。また、コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0001」に対するマスクアドレスとして「0」を格納する(マスクアドレス=0)。
【0063】
(3)アドレス「0x8000」に対し、データ「Data#8000」の書き込み(Write)が発生。
【0064】
コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x8000」に対し、データ「Data#8000」の書き込み(Write)を行う。
【0065】
コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に対し、データ「Data#8000」の書き込み(Write)を行う。既に書き込まれているデータ「Data#0000」は消去される。すなわち、コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に格納されているデータ「Data#0000」を、データ「Data#8000」に上書き/更新する。また、コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に対するマスクアドレスを、「0」から「1」に上書き/更新する(マスクアドレス0→1)。
【0066】
(4)アドレス「0x8000」のデータ「Data#8000」の破壊が発生。
【0067】
ここで、メインメモリ(Main Memory)10のアドレス「0x8000」に格納されているデータ「Data#8000」が、データ「Data#8002」に変化したとする(データ破壊発生)。メインメモリ(Main Memory)10のアドレス「0x8000」には、破壊されたデータ「Data#8002」が格納されていることになる。
【0068】
ミラーメモリ(Mirror Memory)20のアドレス「0x0000」には、正常なデータ「Data#8000」が格納されている。このとき、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に対するマスクアドレスは、「1」のままである(マスクアドレス=1)。
【0069】
(5)アドレス「0x8000」に対するデータ読み出しが発生。
【0070】
コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x8000」からデータ「Data#8002」の読み出し(Read)を行う。このとき、ECC(Error Checking and Correcting)エラーが検出され、メインメモリ(Main Memory)10のデータが不正であることが判明する。すなわち、コントローラ(Controller)30は、ECC(Error Checking and Correcting)エラーが検出されるため、メインメモリ(Main Memory)10のアドレス「0x8000」のデータが不正であると判断する。
【0071】
一方、コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」からデータ「Data#8000」の読み出し(Read)を行う。このデータは、ECC(Error Checking and Correcting)エラーが検出されないため、正常なデータであることが判る。また、マスクアドレスが「1」であるため、アドレス「0x8000」のデータであることが判る。すなわち、コントローラ(Controller)30は、ECC(Error Checking and Correcting)エラーが検出されず、マスクアドレスが「1」であるため、ミラーメモリ(Mirror Memory)20のアドレス「0x8000」のデータが正常であると判断する。
【0072】
これにより、メインメモリ(Main Memory)10ではなく、ミラーメモリ(Mirror Memory)20のアドレス「0x8000」に格納されているデータ「Data#8000」が採用される。
【0073】
ここでは、コントローラ(Controller)30は、所定のアドレスに対するデータ読み出しが発生した際、メインメモリ(Main Memory)10とミラーメモリ(Mirror Memory)20から、同時にデータの読み出し(Read)を行う。
【0074】
或いは、コントローラ(Controller)30は、メインメモリ(Main Memory)10のデータが不正であることが判明した場合にのみ、ミラーメモリ(Mirror Memory)20のデータの読み出し(Read)を行うようにしても良い。
【0075】
(6)アドレス「0x0000」に対するデータ読み出しが発生。
【0076】
この後、仮に、アドレス「0x0000」のデータ「Data#0000」を読み出す必要が発生し、メインメモリ(Main Memory)10のデータ「Data#0000」が破壊されていた場合には、このミラーメモリ(Mirror Memory)20では救済できない。
【0077】
しかし、アドレス「0x0000」よりも、後からアクセスされたアドレス「0x8000」の方が、確率的には、次の読み出し(Read)でアクセスされる確率が高い。すなわち、擬似的なLRU制御が実現される。
【0078】
したがって、ミラーメモリ(Mirror Memory)20のHWリソース量がメインメモリ(Main Memory)10の50%でありながら、データ破壊時の救済率は50%より高くなるということが期待できる。
【0079】
なお、実際には、ミラーメモリ(Mirror Memory)20のHWリソース量がメインメモリ(Main Memory)10の50%以外の場合でも、搭載した冗長HWリソース量以上の救済率を期待できる。
【0080】
<第2実施形態>
以下に、本発明の第2実施形態について説明する。
【0081】
本実施形態では、データ破壊が発生したメインメモリ(Main Memory)10のアドレス「0x8000」に対し、正常なデータ「Data#8000」を書き戻すことで、データの正常性を回復させる。
【0082】
例えば、コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x8000」からデータ「Data#8002」の読み出し(Read)を行う。このとき、ECC(Error Checking and Correcting)エラーが検出され、メインメモリ(Main Memory)10のデータが不正であることが判明したとする。
【0083】
この場合、コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」からデータ「Data#8000」の読み出し(Read)を行う。このとき、ECC(Error Checking and Correcting)エラーが検出されないため、正常なデータであることが判明する。また、マスクアドレスが「1」であるため、アドレス「0x8000」のデータであることが判明する。
【0084】
コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20のアドレス「0x8000」から読み出されたデータ「Data#8000」を選択・採用する。
【0085】
コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x8000」に対し、ミラーメモリ(Mirror Memory)20のアドレス「0x8000」から読み出されたデータ「Data#8000」の書き込み(Write)を行う。
【0086】
これにより、メインメモリ(Main Memory)10のアドレス「0x8000」の破壊されたデータ「Data#8002」が、正常なデータ「Data#8000」に書き戻される。
【0087】
以降、コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x8000」から、正常なデータ「Data#8000」を読み出すことが可能になる。
【0088】
[補足]
本実施形態において、メインメモリ(Main Memory)10とミラーメモリ(Mirror Memory)20とを、互いに読み替えても良い。実際には、メインメモリ(Main Memory)10側のデータが正常で、ミラーメモリ(Mirror Memory)20側にデータの破壊が発生する場合も考えられる。ミラーメモリ(Mirror Memory)20側のデータの破壊を放置することは好ましくないため、このような場合、コントローラ(Controller)30は、ミラーメモリ(Mirror Memory)20の破壊されたデータを、メインメモリ(Main Memory)10の正常なデータ「Data#8000」に書き戻す。
【0089】
<第3実施形態>
以下に、本発明の第3実施形態について説明する。
【0090】
本実施形態では、メインメモリ(Main Memory)10側に固定故障(permanent fault)が発生した場合、ミラーメモリ(Mirror Memory)20側で冗長化するアドレスを固定する。
【0091】
固定故障とは、物理的/電気的な破損等により、メモリの所定のアドレスが誤ったデータに固定されてしまい、常にエラーとなる状態である。
【0092】
例えば、コントローラ(Controller)30は、メインメモリ(Main Memory)10のアドレス「0x8000」に固定故障が発生している場合、このアドレスに対応するミラーメモリ(Mirror Memory)20のアドレス「0x0000」を、メインメモリ(Main Memory)10のアドレス「0x8000」のデータ冗長用のアドレスとして固定する。
【0093】
以降、アドレス「0x0000」に対し、データ書き込みが発生した場合でも、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に対しては、書き込み/書き換えを行わない。
【0094】
すなわち、アドレス「0x0000」に対しては、メモリミラーを実施せず、固定故障が発生しているアドレス「0x8000」に対してのメモリミラーに専念する。
【0095】
コントローラ(Controller)30は、本来、メインメモリ(Main Memory)10のアドレス「0x8000」に書き込むべきデータを、ミラーメモリ(Mirror Memory)20のアドレス「0x0000」に書き込む。
【0096】
メモリの交換が不可能である状況では固定故障は深刻な問題であるが、本実施形態では、メモリの交換を行うことなく、固定故障への対処が可能となる。
【0097】
<各実施形態の関係>
なお、上記の各実施形態は、組み合わせて実施することも可能である。
【0098】
<本発明の特徴>
以上のように、本発明に係るメモリ冗長化装置は、擬似LRU(Least Recently Used)による部分的メモリミラー(Partial Memory Mirror)を実現する。また、本発明に係るメモリ冗長化装置は、HW制御のみで、部分的メモリミラーを実現する。また、擬似LRUにより、投資したHWリソース量以上の効果(救済率)を実現している。
【0099】
具体的には、本発明に係るメモリ冗長化装置は、ミラーメモリをメインメモリに対して部分的に所持する。また、本発明に係るメモリ冗長化装置は、擬似LRUアルゴリズムに基づく制御により、メインメモリに最後に書き込んだデータとマスクアドレスをミラーメモリに残すことで、HWのみの制御で、最低限のHWリソース量により効率的なメモリミラー機能を提供する。
【0100】
通常、メモリミラーを行う際、メインメモリと同じ容量のミラーメモリを持たない限り、全てのデータを保証することはできない。
【0101】
しかし、メモリのアクセスには、時間的局所性という性質があり、LRU(Least Recently Used)アルゴリズムを用いれば、部分的なミラーメモリであっても効率的にデータの保証をすることができる。
【0102】
完全なLRUアルゴリズムを実現するためには、アクセスする度に情報を残す必要があるため、多くのHWリソース量が必要となるが、メインメモリに最近更新されたデータをミラーメモリに格納しておくという擬似LRUアルゴリズムを採用することで、比較的アクセス頻度の高いデータをミラーメモリに残すことができる。
【0103】
また、この際、マスクしたアドレス情報をデータと一緒にミラーメモリに格納することにより、簡単なHW制御で、OS(Operating System)やF/W(FirmWare)に頼ることなく、最低限のHW追加で、効率的な部分メモリミラー機能を提供することができる。
【0104】
本発明に係るメモリ冗長化装置は、ミラーメモリ(Mirror Memory)のHWリソース量がメインメモリ(Main Memory)の50%であっても、データ破壊時の救済率は50%より高くすることを可能にする。すなわち、搭載した冗長HWリソース量以上の救済率を期待できるという効果がある。
【0105】
本発明は、高可用性が要求されるがコストを抑えたい高可用性サーバのメモリ保護分野においても利用が期待される。
【0106】
<付記>
上記の実施形態の一部又は全部は、以下の付記のように記載することも可能である。但し、実際には、以下の記載例に限定されない。
【0107】
(付記1)
データを格納するためのメインメモリと、
前記メインメモリと同じ容量を必要とせず、前記メインメモリの冗長データを保持するための部分的なミラーメモリと、
前記メインメモリに最後に書き込んだデータを前記ミラーメモリに格納する擬似LRUアルゴリズムを採用し、比較的アクセス頻度の高いデータとマスクアドレスとを前記ミラーメモリに残すコントローラと
を具備する
メモリ冗長化装置。
【0108】
(付記2)
付記1に記載のメモリ冗長化装置であって、
前記コントローラは、
前記ミラーメモリに対して、本来のアドレスを一部分マスクしたマスクアドレスで索引する索引処理部と、
前記メインメモリと同じデータをミラーメモリに書き込む書き込み処理部と、
前記ミラーメモリに前記マスクアドレスを格納するマスクアドレス格納処理部と、
前記メインメモリのデータが破壊されていた場合、前記ミラーメモリに正常なデータが格納されているか判断し、前記ミラーメモリに正常なデータが格納されている場合、前記メインメモリの破壊されたデータの代わりに、前記ミラーメモリの正常なデータを採用するメモリ制御部と
を具備する
メモリ冗長化装置。
【0109】
(付記3)
付記2に記載のメモリ冗長化装置であって、
前記メモリ制御部は、前記ミラーメモリに正常なデータが格納されている場合、前記ミラーメモリの正常なデータを基に、前記メインメモリの破壊されたデータを正常なデータに書き戻し、以降、前記メインメモリから正常なデータを読み出す
メモリ冗長化装置。
【0110】
(付記4)
付記1乃至3のいずれか一項に記載のメモリ冗長化装置であって、
前記コントローラは、前記メインメモリの特定のアドレスに固定故障が発生している場合、前記メインメモリの特定のアドレスに対応する前記ミラーメモリのアドレスを、前記メインメモリの特定のアドレスのデータ冗長用のアドレスとして固定する
メモリ冗長化装置。
【0111】
<備考>
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【符号の説明】
【0112】
10… メインメモリ(Main Memory)
20… ミラーメモリ(Mirror Memory)
30… コントローラ(Controller)
31… 索引処理部
32… 書き込み処理部
33… マスクアドレス格納処理部
34… メモリ制御部

【特許請求の範囲】
【請求項1】
データを格納するためのメインメモリと、
前記メインメモリと同じ容量を必要とせず、前記メインメモリの冗長データを保持するための部分的なミラーメモリと、
前記メインメモリに最後に書き込んだデータを前記ミラーメモリに格納する擬似LRUアルゴリズムを採用し、比較的アクセス頻度の高いデータとマスクアドレスとを前記ミラーメモリに残すコントローラと
を具備する
メモリ冗長化装置。
【請求項2】
請求項1に記載のメモリ冗長化装置であって、
前記コントローラは、
前記ミラーメモリに対して、本来のアドレスを一部分マスクしたマスクアドレスで索引する索引処理部と、
前記メインメモリと同じデータをミラーメモリに書き込む書き込み処理部と、
前記ミラーメモリに前記マスクアドレスを格納するマスクアドレス格納処理部と、
前記メインメモリのデータが破壊されていた場合、前記ミラーメモリに正常なデータが格納されているか判断し、前記ミラーメモリに正常なデータが格納されている場合、前記メインメモリの破壊されたデータの代わりに、前記ミラーメモリの正常なデータを採用するメモリ制御部と
を具備する
メモリ冗長化装置。
【請求項3】
請求項1又は2に記載のメモリ冗長化装置であって、
前記コントローラは、前記メインメモリの特定のアドレスに固定故障が発生している場合、前記メインメモリの特定のアドレスに対応する前記ミラーメモリのアドレスを、前記メインメモリの特定のアドレスのデータ冗長用のアドレスとして固定する
メモリ冗長化装置。
【請求項4】
計算機により実施されるメモリ冗長化方法であって、
メインメモリにデータを格納することと、
前記メインメモリと同じ容量を必要とせず前記メインメモリの冗長データを保持するための部分的なミラーメモリに、前記メインメモリに最後に書き込んだデータを格納する擬似LRUアルゴリズムを採用し、比較的アクセス頻度の高いデータとマスクアドレスとを前記ミラーメモリに残すことと
を含む
メモリ冗長化方法。
【請求項5】
請求項4に記載のメモリ冗長化方法であって、
前記ミラーメモリに対して、本来のアドレスを一部分マスクしたマスクアドレスで索引することと、
前記メインメモリと同じデータをミラーメモリに書き込むことと、
前記ミラーメモリに前記マスクアドレスを格納することと、
前記メインメモリのデータが破壊されていた場合、前記ミラーメモリに正常なデータが格納されているか判断することと、
前記ミラーメモリに正常なデータが格納されている場合、前記メインメモリの破壊されたデータの代わりに、前記ミラーメモリの正常なデータを採用することと
を更に含む
メモリ冗長化方法。
【請求項6】
請求項4又は5に記載のメモリ冗長化方法であって、
前記メインメモリの特定のアドレスに固定故障が発生している場合、前記メインメモリの特定のアドレスに対応する前記ミラーメモリのアドレスを、前記メインメモリの特定のアドレスのデータ冗長用のアドレスとして固定すること
を更に含む
メモリ冗長化方法。
【請求項7】
計算機により実施されるプログラムであって、
メインメモリにデータを格納するステップと、
前記メインメモリと同じ容量を必要とせず前記メインメモリの冗長データを保持するための部分的なミラーメモリに、前記メインメモリに最後に書き込んだデータを格納する擬似LRUアルゴリズムを採用し、比較的アクセス頻度の高いデータとマスクアドレスとを前記ミラーメモリに残すステップと
を計算機に実行させるための
プログラム。
【請求項8】
請求項7に記載のプログラムであって、
前記ミラーメモリに対して、本来のアドレスを一部分マスクしたマスクアドレスで索引するステップと、
前記メインメモリと同じデータをミラーメモリに書き込むステップと、
前記ミラーメモリに前記マスクアドレスを格納するステップと、
前記メインメモリのデータが破壊されていた場合、前記ミラーメモリに正常なデータが格納されているか判断するステップと、
前記ミラーメモリに正常なデータが格納されている場合、前記メインメモリの破壊されたデータの代わりに、前記ミラーメモリの正常なデータを採用するステップと
を更に計算機に実行させるための
プログラム。
【請求項9】
請求項7又は8に記載のプログラムであって、
前記メインメモリの特定のアドレスに固定故障が発生している場合、前記メインメモリの特定のアドレスに対応する前記ミラーメモリのアドレスを、前記メインメモリの特定のアドレスのデータ冗長用のアドレスとして固定するステップ
を更に計算機に実行させるための
プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2013−20515(P2013−20515A)
【公開日】平成25年1月31日(2013.1.31)
【国際特許分類】
【出願番号】特願2011−154445(P2011−154445)
【出願日】平成23年7月13日(2011.7.13)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】