以下、図面を参照して開示の技術の実施形態の一例を詳細に説明する。
[第1の実施形態]
図1には、第1の実施形態のデータ処理装置10のブロック図が示される。データ処理装置10はサーバ装置に設けられる。図1に示すように、データ処理装置10は、CPUチップ12とメモリモジュール14とを備えている。CPUチップ12は、CPU16と、メモリコントローラ18とを備える。メモリモジュール14には、各々電荷を蓄積することによりデータを記憶する複数の記憶素子を有するメモリと、メモリの複数の記憶素子に対するデータの書き込み及び読み出しを制御するための制御部とが含まれる。複数の記憶素子は、後述するCPU16によりデータの書き込み及び読み出しが行われるデータ記憶領域14Aと、後述するハッシュ値を記憶するためのハッシュ値記憶領域14Bとに分かれて管理される。また、CPU16によるメモリに対するデータの読み出しや書き込みは、キャッシュ管理に都合のよい一定サイズの塊を単位として行われる。この単位を1キャッシュラインと呼び、以下では略して単に1ラインと言う。1ラインには、所定個数の記憶素子が対応する。
なお、CPU16と、メモリコントローラ18とは、1つのチップに設けることに限定されず、別々のチップに設けてもよい。
データ処理装置10を含む物理計算機上では複数の仮想機械(VM(Virtual Machine))が動作する。複数のVMの各々は、複数のラインに配置される所定数の記憶素子に記憶されたデータを1ページとして管理する。
メモリコントローラ18は、制御回路20、第1のセレクタ26、3ステート制御回路28、エラー検出訂正回路30、読み書き用バッファ32、ハッシュ値計算回路34、溜め込みバッファ36、及び第2のセレクタ38を備える。制御回路20は、メモリスクラビング制御回路22及びハッシュ値計算制御回路24を備える。メモリスクラビング制御回路22は第1のアドレス保持回路22Aを備え、ハッシュ値計算制御回路24は第2のアドレス保持回路24Aを備える。
制御回路20の出力端子に接続された制御線L1は、第1のセレクタ26の制御信号の入力端子に接続される。制御回路20の別の出力端子に接続された制御線L2は、3ステート制御回路28の制御信号の入力端子に接続される。制御回路20の入力端子は制御線L3を介してエラー検出訂正回路30の出力端子に接続される。制御回路20と読み書き用バッファ32とはデータ送信線L4により接続される。制御回路20の別の出力端子に接続された制御線L5はハッシュ値計算回路34の制御信号の入力端子に接続される。制御回路20の別の出力端子に接続された制御線L6は溜め込みバッファ36の制御信号の入力端子に接続される。制御回路20の別の出力端子に接続された制御線L7は、第2のセレクタ38の制御信号の入力端子に接続される。
制御回路20の別の出力端子に接続されたデータ送信線L8は、第1のセレクタ26の2つの入力端子の一方に接続される。第1のセレクタ26の他方の入力端子には、読み書き用バッファ32に接続されたデータ送信線L9が接続される。読み書き用バッファ32に接続されたデータ送信線L9は、第2のセレクタ38の2つの入力端子の一方に接続される。第2のセレクタ38の他方の入力端子には、溜め込みバッファ36に接続されたデータ送信線L10が接続される。ハッシュ値計算回路34は、データ送信線L12を介して溜め込みバッファ36に接続される。
3ステート制御回路28の第1〜第3の端子の第1の端子は、データ送信線L13を介して第2のセレクタ38の出力端子に接続され、第2の端子はエラー検出訂正回路30に、データ送信線L14を介して接続される。エラー検出訂正回路30のデータ送信線L11は、読み書き用バッファ32及びハッシュ値計算回路34に接続される。
第1のセレクタ26の出力端子は、データ送信線L102を介して、メモリモジュール14に接続される。3ステート制御回路28の第3の端子は、データ送信線L104を介してメモリモジュール14に接続される。読み書き用バッファ32とCPU16とはデータ送信線L106により接続される。
第1のセレクタ26は、制御線L1を介して制御回路20から受信した信号の内容に応じて次の2つのデータのうちの選択されたデータをメモリモジュール14に出力する。2つのデータの一方は、データ送信線L8を介して制御回路20から入力されたデータである。他方のデータは、データ送信線L9を介して読み書き用バッファ32から入力されたデータである。
第2のセレクタ38は、制御線L7を介して制御回路20から入力された信号の内容に応じて、次のようにデータを3ステート制御回路28に出力する。第2のセレクタ38は、データ送信線L9を介して読み書き用バッファ32から入力されたデータ又はデータ送信線L10を介して溜め込みバッファ36から入力されたデータを、データ送信線L13を介して3ステート制御回路28に出力する。
3ステート制御回路28は、制御線L2を介して制御回路20から制御信号が入力されなければ、データ送信線L104を介して、メモリモジュール14から入力されたデータを、データ送信線L14を介してエラー検出訂正回路30に出力する。3ステート制御回路28は、制御線L2を介して制御回路20から制御信号が入力された場合には、入力された制御信号に応じて、次のようにデータをメモリモジュール14に出力する。3ステート制御回路28は、データ送信線L13を介して第2のセレクタ38から入力されたデータ(1又は0)を、データ送信線L104を介してメモリモジュール14に送信する。
メモリコントローラ18は、開示の技術の「転送装置」の一例である。
メモリスクラビング制御回路22は、開示の技術の「制御部」の一例である。
ハッシュ値計算回路34は、開示の技術の「決定部」の一例である。
データ処理装置10は、開示の技術の「データ処理装置」の一例である。
メモリモジュール14におけるメモリは、開示の技術の「メモリ」の一例である。
CPU16は、開示の技術の「処理部」の一例である。
図2には、エラー検出訂正回路30のブロック図が示される。図2に示すように、エラー検出訂正回路30は、ECC(誤り訂正符号:Error Correcting Code)計算回路42、デコーダ44、及び訂正可否判定回路46を備える。また、エラー検出訂正回路30は、EOR(排他的論理和:Exclusive OR)回路48、セレクタ50、及び記憶素子52を備える。
ECC計算回路42の入力端子、及びEOR回路48の2つの入力端子の内の一方は、データ送信線L14を介して3ステート制御回路28に接続される。ECC計算回路42の出力端子は、デコーダ44の入力端子及び訂正可否判定回路46の入力端子の各々に接続される。デコーダ44の出力端子は、EOR回路48の他方の入力端子に接続される。EOR回路48の出力端子は、セレクタ50の2つの入力端子の一方に接続される。セレクタ50の他方の入力端子には、訂正不可なエラー発生を示す特別な値が入力される。訂正可否判定回路46の一方の出力端子は、セレクタ50の制御信号の入力端子に接続される。訂正可否判定回路46の他方の出力端子は、制御線L3を介して制御回路20に接続される。セレクタ50の出力端子は、記憶素子52の入力端子に接続される。記憶素子52の出力端子は、データ送信線L11を介して、読み書き用バッファ32及びハッシュ値計算回路34に接続される。
ここで、エラー検出訂正回路30の動作を説明する。メモリの記憶素子に、メモリコントローラ18の外部から、例えば、宇宙線が照射されると、メモリの記憶素子における電荷の保持状態が反転し、メモリの記憶内容にエラーが発生する場合がある。エラー検出訂正回路30は、このようなエラーを、次のように訂正する。
説明の便宜上、A、B、C、及びDとして識別される4ビットのデータが、同時にECC計算回路42及びEOR回路48に入力されるとする。同時に入力されるデータには、4ビットのデータのみではなく、それらに対するECC(Error Correcting Code)データも含まれる。ECCデータは、例えば、E、F、G、Hの4ビットで構成される。Eは、A、B、及びCのEOR、Fは、B、C、及びDのEOR、Gは、C、D、及びAのEOR、及びHは、D、A、及びBのEORである。
なお、上記例では、データ送信線L14は、A、B、C、及びDのデータと、それらに対するECCデータE、F、G、及びHの合計8本の線を有する。また上記では、同時にECC計算回路42及びEOR回路48に入力されるデータを、説明の便宜上、A、B、C、及びDのデータと、ECCデータE、F、G、及びHとしている。しかし、実際にはより多いビット数のデータが、同時にECC計算回路42及びEOR回路48に入力される。
A、B、C、D、E、F、G、及びHのデータが入力されたECC計算回路42は、入力されたA〜Hのデータから、第1〜第4のシンドローム・ビットを計算する。第1のシンドローム・ビットは、A、B、C、及びEのEOR、第2のシンドローム・ビットは、B、C、D、及びFのEOR、第3のシンドローム・ビットは、C、D、A、及びGのEOR、第4のシンドローム・ビットは、D、A、B、及びHのEORである。そして、ECC計算回路42は、シンドロームをデコーダ44及び訂正可否判定回路46に出力する。
シンドロームは、具体的には、A〜Hのデータに、例えば宇宙線により反転されたデータ等のエラーがあるか否か、エラーがある場合には、A〜Hの内のどのデータにエラーがあるのかを示す信号である。デコーダ44はシンドロームをデコードして訂正ベクタを生成する。例えば、A〜Hのデータは本来00010111であったが、Bのデータにエラーがあり、入力されたA〜Hのデータが、01010111であるとする。ECC計算回路42は、入力値01010111に基づき、Bに訂正可能なエラーがあることを示すシンドローム1101を出力する。デコーダ44は、シンドローム1101をデコードし、訂正ベクタとして01000000をEOR回路48に出力する。EOR回路48は、01010111のそれぞれと01000000のそれぞれとのEORを計算し、00010111のデータ、即ち、エラーが訂正された元のデータがセレクタ50に入力される。
以上説明した例では、上記A〜Hのデータの何れか1ビットにエラーがある場合に、エラーを訂正することができる。しかし、上記A〜Hのデータに複数のエラーが存在する場合には、ECC計算回路42は、A〜Hのどのデータにエラーがあるのかを判定することはできない。この場合には、ECC計算回路42は、訂正不可を示すシンドロームをデコーダ44及び訂正可否判定回路46に出力する。
このように、シンドロームには、エラーがないことを示す第1の種類のシンドロームと、訂正可能なエラーがどのデータに存在するのかを示す第2の種類のシンドロームと、エラーを訂正できないことを示す第3の種類のシンドロームとがある。訂正可否判定回路46は、第1または第2の種類のシンドロームが入力された場合には、EOR回路48からの信号を選択するように、セレクタ50を制御する信号をセレクタ50に出力する。また、訂正可否判定回路46は、第3の種類のシンドロームが入力された場合には、訂正不可なエラー発生を示す特別な値の信号を選択するように、セレクタ50を制御する信号をセレクタ50に出力する。セレクタ50により選択された信号は、記憶素子52を介してタイミングが調整されて、データ送信線L11を介して、読み書き用バッファ32及びハッシュ値計算回路34に出力される。
なお、訂正可否判定回路46は、第2の種類のシンドロームが入力された場合には、訂正可能なエラーがあったことを示す信号を、データ送信線L3を介して制御回路20に出力する。また、第3の種類のシンドロームが入力された場合には、エラーを訂正できないことを示す信号を、データ送信線L3を介して制御回路20に出力する。エラーを訂正できないことを示す信号が入力された制御回路20は、図示しない表示装置にエラーを訂正できないことを表示させる。
詳細には後述するが、メモリスクラビング制御回路22は、メモリモジュール14からデータ記憶領域14Aの対象領域(例えば、全ての領域)の1ラインの例えば1/8の数毎に、アドレス順に順次データを読み出す。そして、読み出しされたデータはエラー検出訂正回路30に入力され、エラーの検出及び訂正可能なエラーの訂正が行われる。このようなエラー検出及び訂正を、予め定められた範囲のデータ記憶領域に対し定期的に行い、エラーが訂正不能な水準にまで発展することを未然に防ぐ処理を、メモリのスクラビング処理という。
メモリの1ラインのデータの内の例えば1/8の合計4つのデータ(上記A、B、C、及びD参照)は、開示の技術の「所定単位のデータ」の一例である。
図3には、ハッシュ値計算回路34のブロック図が示される。図3に示すように、ハッシュ値計算回路34は、中間状態保持回路54、セレクタ56、第1の組合せ回路58、及び第2の組合せ回路60を備える。
中間状態保持回路54の入力端子には、第1の組合せ回路58の出力端子が接続される。中間状態保持回路54の出力端子は、セレクタ56の2つの入力端子の一方に接続される。セレクタ56の他方の入力端子には、所定値を示す初期Seedが入力される。セレクタ56の制御信号の入力端子には、制御線L5を介して制御回路20に接続される。第1の組合せ回路58の2つの入力端子の一方には、データ送信線L11を介して、エラー検出訂正回路30が接続される。第1の組合せ回路58の他方の入力端子には、セレクタ56の出力端子が接続される。第2の組合せ回路60の入力端子には、第1の組合せ回路58の出力端子が接続される。第2の組合せ回路60の出力端子は、データ送信線L12を介して溜め込みバッファ36に接続される。
ここで、ハッシュ値計算回路34の動作を説明する。データ処理装置10を含む物理計算機上では複数のVMが動作する。複数のVMの各々は、複数のラインに配置される所定数の記憶素子に記憶されたデータを1ページとして管理する。各VMが、同じ記憶内容のページを共通して利用する。メモリのハッシュ値記憶領域14Bに各ページに対応させて各ページのハッシュ値が記憶される。CPU16上で動作するソフトウェア(VMマネージャ)は、各ページに対応させて記憶された各ページのハッシュ値から対応表を作成し、対応表に基づいて同じ内容のページを検出する。ハッシュ値計算回路34は、ページのハッシュ値を計算する。ハッシュ値は、各ページのデータの内容に応じかつ当該内容を要約する要約値である。以下、1ページのハッシュ値を計算する場合のハッシュ値計算回路34の動作を説明する。なお、以下では、ハッシュ値を計算するためのハッシュ関数の一例として、CRC32関数が適用されたハッシュ値計算回路34の動作を説明する。
1ページのハッシュ値を計算する際の第1番目のラインのデータを処理する初期の段階では、制御回路20は、初期Seedを選択するように、セレクタ56を制御する。よって、セレクタ56からは初期Seedが第1の組合せ回路58にCurrent stateとして入力される。また、第1の組合せ回路58には、データ送信線L11を介してエラー検出訂正回路30から上記訂正可能なエラーが訂正されたデータが入力される。1ライン分のデータが入力されると、第1の組合せ回路58は、次のようにデータを処理する。
例として、1ライン分のデータのビット数が64ビットであるとする。第1の組合せ回路58は、32ビットのCurrent Stateと、入力された64ビットのデータとをそれぞれビット単位に分割し、計96ビットの入力とする。そして、96ビットの入力から、別途予め定めた32通りの異なる組み合わせ毎におよそ48ビットずつを選択し、選択したおよそ48ビットの全EORを、32通りの組み合わせの各々について計算する。そして、第1の組合せ回路58は、32通りの組み合わせの各々について計算したEORの値を、Next stateとして第2の組合せ回路60と中間状態保持回路54とに出力する。中間状態保持回路54は、第1の組合せ回路58から入力された値を保持する。
第2の組合せ回路60は、第1の組合せ回路58から入力された値をビット毎に全ビット反転させたものをハッシュ値として溜め込みバッファ36に出力する。なお、第1番目のラインのデータが処理された段階で第2の組合せ回路60からハッシュ値として出力された値は、1ページ分のデータのハッシュ値ではないので、制御回路20は、当該ハッシュ値を記憶するように溜め込みバッファ36を制御しない。
第2番目のラインから1ページの最終ラインのデータを処理するまで、制御回路20は、中間状態保持回路54からのデータを選択するように、セレクタ56を制御する。よって、セレクタ56からは中間状態保持回路54からのデータが第1の組合せ回路58に入力される。以降は、第1の組合せ回路58及び第2の組合せ回路60は、第2番目のラインから1ページの最終ラインまでのデータを、第1番目のラインのデータの処理と同様に処理する。
1ページの最終ラインのデータまで処理された段階で第2の組合せ回路60からハッシュ値として出力された値は、1ページ分のデータのハッシュ値である。よって、制御回路20は、当該ハッシュ値を記憶するように溜め込みバッファ36を制御する。そして、ハッシュ値は、当該ハッシュ値に対応するページに対応して、ハッシュ値記憶領域14Bに記憶される。
なお、1ページ分のデータは、開示の技術の「複数の所定単位分のデータ」の一例である。
従来では、ハッシュ値の計算をCPU16が行っているので、メモリモジュール14からのデータをCPU16まで移動させなければならなかった。しかし、第1の実施形態では、図1に示すように、ハッシュ値計算回路34及び溜め込みバッファ36は、CPU16よりもメモリモジュール14に物理的に近い位置に配置される。よって、第1の実施形態は、ハッシュ値の計算のためにメモリモジュール14からのデータをCPU16まで移動させず、より近い位置まで移動させれば済む。
また、上記のようなハッシュ値の計算を、EORやAND等の論理関数の組み合わせで実現するので、ハッシュ値計算回路34を簡素なハードウェアで実現することができる。
ところで、メモリモジュール14に記憶されたデータに対する処理は、スクラビング処理及びハッシュ値計算処理のみではない。CPU16は、主となる処理のために、メモリからデータを読み出したりメモリにデータを書き込んだりするように制御回路20を制御する。具体的には、CPU16は、主となる処理のために、メモリからデータを読み出したりメモリにデータを書き込んだりすることを制御回路20に命令する命令データ及びメモリに書き込むデータを読み書き用バッファ32に記憶する。なお、主となる処理としては、CPU16上で実行されるVM、VMマネージャ、VM上で実行されるアプリケーションプログラム等の処理をいう。
ここで、CPU16の主となる処理のためにメモリからデータを読み出すこと等と、スクラビング処理及びハッシュ値計算処理のためにメモリからデータを読み出すこととの要求が、同時に発生することも考えられる。しかし、メモリモジュール14におけるメモリからのデータ読み出しの処理能力には一定の限界がある。よって、このような場合に主となる処理を後回しにすると、主となる処理の実行時間を長くしてしまうおそれがある。
そこで、第1の実施形態では、制御回路20は、CPU16が主となる処理を実行していない時間(アイドル時間)にスクラビング処理及びハッシュ値計算処理、並びにハッシュ値のメモリへの書き込み処理を実行する。即ち、制御回路20は、メモリモジュールのデータバスやアドレスバス等のバスがアイドル状態の場合に、スクラビング処理及びハッシュ値計算処理、並びにハッシュ値のメモリへの書き込み処理を実行する。図4には、読み書き用バッファ32からの命令の処理、ハッシュ値のメモリへの書き込み処理、及びスクラビング処理を調停する調停回路70及び各処理のタイミングを調整するタイミング調整回路72のブロック図が示される。なお、ハッシュ値の計算処理は、スクラビング処理で読み出されたデータを利用して行われるため、スクラビング処理と他の処理とを調停することにより、ハッシュ値の計算処理も調停される。
最初に、読み書き用バッファ32の構成を説明する。図4に示すように、読み書き用バッファ32は、比較回路62、及び2つの入力端子のそれぞれに反転回路64、68が設けられたAND回路66を備える。また、CPU16は、主となる処理のために、メモリからデータを読み出したりメモリにデータを書き込んだりすることを制御回路20に命令するための命令データを読み書き用バッファ32に記憶する。読み書き用バッファ32には、命令データを新たに記憶する領域を示すポインタを保持する、図示しない第1の保持部が設けられている。当該第1の保持部から命令データを新たに記憶する領域を示すポインタBUF_WPが比較回路62の2つの入力端子の一方に入力される。
また、読み書き用バッファ32に記憶された命令データは、記憶された時期が古い順に実行する。そのために、読み書き用バッファ32には、既に実行した命令の次に実行する命令の命令データが記憶された領域を示すポインタを保持する、図示しない第2の保持部が設けられている。当該第2の保持部から次に実行する命令の命令データ記憶する領域を示すポインタBUF_RPが比較回路62の他方の入力端子に入力される。
比較回路62は、入力された2つの信号が等しい場合には、ハイ状態の信号を出力し、入力された2つの信号が異なる場合には、ロー状態の信号を出力する。
読み書き用バッファ32に未実行の命令の命令データがある場合には、ポインタBUF_WPとポインタBUF_RPとは異なる領域を示す。この場合、比較回路62はロー状態のBUF_EMPTY信号を出力する。一方、読み書き用バッファ32における命令データに基づく命令が実行されたことにより、未実行の命令の命令データがない場合(アイドル状態)には、ポインタBUF_WPとポインタBUF_RPとは同じ領域を示す。この場合、比較回路62はハイ状態のBUF_EMPTY信号を出力する。比較回路62の出力端子は反転回路64を介して、AND回路66の一方の入力端子に接続される。
また、AND回路66の他方の入力端子には、BUF_CMD_INH信号が反転回路68を介して入力される。BUF_CMD_INH信号は、読み書き用バッファ32の命令(コマンド)を制御回路20が今は実行できない場合にはハイ状態、今実行できる場合にはロー状態となる信号である。例えば、メモリモジュール14からデータを読み出しているときに、読み書き用バッファ32に記憶された次の命令が、メモリにデータを書き込むための命令の場合などのように、読み書き用バッファ32の命令を制御回路20が実行できない場合がある。この場合には、BUF_CMD_INH信号がハイ状態であり、反転回路68を介して、ロー状態の信号がAND回路66の他方の入力端子に入力される。
読み書き用バッファ32のコマンドを制御回路20が今実行できる場合には、BUF_CMD_INH信号がロー状態であり、反転回路68を介して、ハイ状態の信号がAND回路66の他方の入力端子に入力される。この状態で、制御回路20がアイドル状態でない場合、即ち、命令を実行する必要がある場合には、BUF_EMPTY信号がロー状態であり、反転回路64を介して、AND回路66の一方の入力端子にハイ状態の信号が入力される。よって、AND回路66は、ハイ状態のBUF_REQ信号を制御回路20に出力する。すなわち、BUF_REQ信号がハイ状態の場合には、読み書きバッファ32からメモリへ読み出しまたは書き込みの要求があることを示し、ロー状態の場合には、要求がないことを示す。
次に、上記各処理を調停するための制御回路20の構成を説明する。図4に示すように、制御回路20は、メモリスクラビング制御回路22及びハッシュ値計算制御回路24の配置位置とは異なる位置に、調停回路70及びタイミング調整回路72を有する。
調停回路70は、AND回路74と、3つの入力端子の1つのみに反転回路80が設けられたAND回路76と、4つの入力端子の2つの入力端子のそれぞれに反転回路82、反転回路84とが設けられたAND回路78とを備える。
AND回路74の一方の入力端子、AND回路76の、反転回路80が設けられていない一方の入力端子、及びAND回路78の、反転回路82、84が設けられていない一方の入力端子には、BUS_CMD_READY信号が入力される。BUS_CMD_READY信号は、コマンドを出せるタイミングを示す信号であり、図示しない出力部から出力される。
AND回路74の他方の入力端子には、BUF_REQ信号が入力される。また、BUF_REQ信号は、AND回路76の入力端子に設けられた反転回路80と、AND回路78の入力端子に設けられた反転回路82とに入力される。
溜め込みバッファ36には、HASH_WR_REQ信号を、制御線L6を介して制御回路20に出力する、図示しない出力回路が設けられている。HASH_WR_REQ信号は、溜め込みバッファ36に記憶された複数のハッシュ値のメモリへの記憶を要求することを示す信号である。複数のハッシュ値とは、メモリへの書き込み単位であるメモリの1ライン分に記憶可能な個数のハッシュ値である。HASH_WR_REQ信号は、AND回路76の、反転回路80が設けられていない他方の入力端子と、AND回路78の入力端子側に設けられた反転回路84とに入力される。
制御回路20には、CPU16から読み書き用バッファ32を介して、スクラビング処理の要求がある場合にハイ状態となり、要求がない場合にロー状態となるSCRUB_RD_REQ信号が入力される。SCRUB_RD_REQ信号は、AND回路78の、反転回路82、84が設けられていない他方の入力端子に入力される。
制御回路20がCPU16からの命令を実行する必要がある状態(アイドル状態でない状態)の場合、AND回路66から、ハイ状態のBUF_REQ信号がAND回路74に出力される。この状態でハイ状態のBUS_CMD_READY信号がAND回路74に入力されると、AND回路74は、ハイ状態のEXEC_BUF_CMD信号を出力する。なお、ハイ状態のBUF_REQ信号は、AND回路76の入力端子に設けられた反転回路80、AND回路78の入力端子に設けられた反転回路82に入力される。よって、制御回路20がアイドル状態でない状態の場合、AND回路76及びAND回路78から出力される信号はロー状態となる。よって、スクラビング処理、ハッシュ値のメモリへの書きこみ、及び溜め込みバッファ36に記憶されたハッシュ値のメモリへの書き込みの指示がされない。
一方、制御回路20がアイドル状態の場合、BUF_REQ信号はロー状態となる。よって、AND回路74から出力される信号はロー状態となり、CPU16からのコマンドは実行されない。BUF_REQ信号がロー状態の場合には、反転回路80を介してAND回路76にハイ状態の信号が入力され、反転回路82を介してAND回路78にハイ状態の信号が入力される。
制御回路20がアイドル状態で、HASH_WR_REQ信号がロー状態で、かつハイ状態のSCRUB_RD_REQ信号及びBUS_CMD_READY信号がAND回路78に入力された場合に限って、AND回路78は、次の信号を出力する。AND回路78は、スクラビング処理を実行することを示すハイ状態のEXEC_SCRUB_RD_CMD信号を出力する。
また、制御回路20がアイドル状態で、かつハイ状態のHASH_WR_REQ信号及びBUS_CMD_READY信号がAND回路76に入力された場合に限って、AND回路76は、次の信号を出力する。AND回路76は、溜め込みバッファ36に記憶されたハッシュ値のメモリへの書き込みを実行することを示すEXEC_HASH_WR_CMD信号を出力する。なお、HASH_WR_REQ信号は、AND回路78の入力端子に設けられた反転回路84に入力される。そのため、HASH_WR_REQ信号がハイ状態の場合には、AND回路78からハイ状態のEXEC_SCRUB_RD_CMD信号は出力されない。
タイミング調整回路72は、AND回路74、AND回路76、及びAND回路78のそれぞれの出力端子に接続された、タイミングを調整するための記憶素子86〜88、記憶素子90〜92、及び記憶素子94〜96を備える。
タイミング調整回路72は、AND回路74、AND回路76、及びAND回路78の各々から信号が出力されてから、所定のタイミングで次の制御を行うために、各処理の実行を指示する信号がセレクタ等に入力されるタイミングを調整する。各記憶素子86〜88、90〜92、及び94〜96には、AND回路74、AND回路76、及びAND回路78の各々から出力された信号が1サイクル毎にシフトしながら記憶される。また、各記憶素子86〜88、90〜92、及び94〜96は、記憶した信号を出力する。図4において、各記憶素子86〜88、90〜92、及び94〜96から出力された信号の末尾の「T1」は、1段目の記憶素子からの出力を表し、「Tn」は、n段目の記憶素子からの出力を表す。従って、次の制御を行う所定のタイミングに応じた段数の記憶素子から信号を引き出し、次の制御を行うためのセレクタ等に出力する。これにより、AND回路74、AND回路76、及びAND回路78の各々から出力された信号により指示される処理のタイミングを調整することができる。
以上説明したように、第1の実施形態では、読み書き用バッファ32からの命令の処理、ハッシュ値のメモリへの書き込み処理、及びスクラビング処理が調停されると共に、各処理のタイミングが調整される。
次に、図5及び図6のタイミングチャートを参照して、データ処理装置10の作用を説明する。最初に、CPU16の主となる処理のためにメモリからデータを読み出す処理を説明する。
CPU16の主となる処理のためにメモリからデータを読み出す命令の命令データが読み書き用バッファ32に書き込まれ、図5(A)に示すように、読み書き用バッファ32から制御回路20にハイ状態のBUF_REQ信号(図4も参照)が入力される。そして図5には示していないBUS_CMD_READY信号がハイ状態になったときに、図5(B)に示すように、制御回路20は、読み書き用バッファ32にハイ状態のEXEC_BUF_CMD信号を出力する。EXEC_BUF_CMD信号は図4の記憶素子86〜88によりタイミングが調整され、制御回路20は、ハイ状態のEXEC_BUF_CMD信号を出力したときから一定期間経過したときに、次のように、第1のセレクタ26を制御する。制御回路20は、図5(C)(JA参照)に示すように、CPU16から読み書き用バッファ32に書き込まれた、読み出しのコマンド及びアドレスを選択するように第1のセレクタ26を制御する。よって、図5(D)(KA参照)及び図5(F)(LA参照)に示すように、読み書き用バッファ32からの、読み出しのコマンド及びアドレスを示す信号がメモリモジュール14に入力される。
メモリモジュール14は、入力された信号に基づいて、指定されたアドレスからデータを読み出し、図5(G)に示すように、読み出されたデータ(Readデータ)を、3ステート制御回路28を介してエラー検出訂正回路30に入力する。エラー検出訂正回路30では、Readデータについてエラー検出及び訂正の処理が施され、図5(H)に示すように、エラー検出及び訂正の処理が施されたReadデータ(訂正済データ)が読み書き用バッファ32に記憶される。その後、読み書き用バッファ32に記憶された訂正済データはデータ送信線L106を介してCPU16に送出され、CPU16が主となる処理を実行する。
次に、制御回路20がアイドル状態となった時のメモリのスクラビング処理を説明する。上記のように制御回路20がアイドル状態の場合には、BUF_REQ信号はロー状態となる。よって、図4に示すAND回路78に、反転回路82からハイ状態の信号が入力される。ここでは、HASH_WR_REQ信号はロー状態であるものとする。即ち、AND回路78に反転回路84からハイ状態の信号が入力される。ハイ状態のBUS_CMD_REDY信号、及びCPU16からのハイ状態のSCRUB_RD_REQ信号がAND回路78に入力されると、ハイ状態のEXEC_SCRUB_RD_CMD信号がメモリスクラビング制御回路22に入力される。また、第1のアドレス保持回路22Aには、予め、図示されない手段で指定されたアドレスが保持されている。
メモリスクラビング制御回路22は、図5(C)(JB参照)に示すように、制御回路20からの、読み出しのコマンド及びアドレスを示す信号を選択するように、第1のセレクタ26を制御する信号を出力する。メモリスクラビング制御回路22は、図5(E)(MB参照)に示すように、データ記憶領域14Aのスクラビング処理の対象となる領域の最初のラインを示すアドレス及び当該ラインのデータを読み出すコマンドを第1のセレクタ26に出力する。第1のセレクタ26は、制御回路20からのコマンド及びアドレスを示す信号を選択するように制御されるので、図5(F)(LB参照)に示すように、制御回路20からの、読み出しのコマンド及びアドレスを示す信号がメモリモジュール14に出力される。
メモリモジュール14は、入力された信号に基づいて、指定されたアドレスからデータを読み出し、図5(G)に示すように、読み出されたデータ(Readデータ)は3ステート制御回路28を介してエラー検出訂正回路30に入力される。エラー検出訂正回路30では、Readデータについてエラー検出及び訂正の処理が施される。図5(H)に示すように、エラー検出及び訂正の処理が施されたReadデータ(訂正済データ)が、読み書き用バッファ32及びハッシュ値計算回路34に入力される。なお、Readデータに訂正可能なエラーがあった場合には、読み書き用バッファ32に記憶された訂正済データは、所定のタイミングで、メモリの同じ領域に書き戻される。
データ記憶領域14Aのスクラビング処理の対象となる領域において、ページ内の最初のラインの訂正済データがハッシュ値計算回路34に入力される時は、ハッシュ値計算制御回路24は、次のように、セレクタ56(図3も参照)を制御する。ハッシュ値計算制御回路24は、図5(I)に示すように、初期Seedを選択するようにセレクタ56(図3も参照)を制御する。ハッシュ値計算回路34は、各ラインの例えば1/8の数のデータ毎にハッシュ値の中間結果を更新し、ページ先頭からその時点までのハッシュ値を出力する。上記のように1ページは、複数のラインのデータを有する。1ページ分の複数のラインの訂正済データが処理された時に第2の組合せ回路60から出力された値が、1ページのハッシュ値である。そこで、ハッシュ値計算制御回路24は、図5(K)に示すように、1ページ分の複数のラインの訂正済データが処理された時に、第2の組合せ回路60から出力されたハッシュ値を記憶するように溜め込みバッファ36を制御する。
以後、データ記憶領域14Aのスクラビング処理の対象となる全ての領域の最終のラインまで以上と同様の処理が実行される。メモリスクラビング制御回路22は、各ラインのスクラビング処理が実行される毎に、次のラインのアドレスに第1のアドレス保持回路22Aのアドレスをインクリメントする。
なお、図5に示す例では、メモリモジュール14は、1つのラインを読み出した場合、直ちに次のラインのデータを読み出し、メモリコントローラ18に出力している。しかし、スクラビング処理は本来、主となる処理の邪魔にならないように、CPU16がアイドル状態のときに行われるのが普通であるため、1つのラインのメモリを読み出した後、時間を空けて、次のラインのデータをメモリに読み出す場合もある。
ところで、溜め込みバッファ36には、全てのページのハッシュ値を記憶する程の記憶容量はない。そこで、第1の実施形態では、メモリの1ライン分に記憶可能な複数のハッシュ値が溜め込みバッファ36に記憶された場合に、溜め込みバッファ36に記憶された複数のハッシュ値をメモリのハッシュ値記憶領域14Bに記憶する。この処理を、図6のタイミングチャートを参照して説明する。
溜め込みバッファ36は、メモリの1ライン分の複数のハッシュ値が記憶された場合に、図4に示すHASH_WR_REQ信号をハイ状態にして制御回路20に出力する、図示しない出力回路を備える。溜め込みバッファ36にメモリの1ライン分の複数のハッシュ値が記憶されると、ハイ状態のHASH_WR_REQ信号が、AND回路76に入力される。この状態で、さらに、読み書き用バッファ32から出力されるBUF_REQ信号がロー状態で、反転回路80からハイ状態の信号がAND回路76に入力され、かつハイ状態のBUS_CMD_READY信号がAND回路76に入力されたとする。この場合、AND回路76からハイ状態のEXEC_HASH_WR_CMD信号が出力され、ハッシュ値計算制御回路24に入力される。
ハイ状態のEXEC_HASH_WR_CMD信号が入力されたハッシュ値計算制御回路24は、図6(L)に示すように、溜め込みバッファ36にハッシュ値の読み出し指示の信号を出力する。ハッシュ値計算制御回路24は、記憶素子90〜92を利用し、ハッシュ値の読み出し指示の信号を出力したときから所定時間後に、制御回路20からの書き込みのコマンド及びアドレスを示す信号を選択させる信号を第1のセレクタ26に出力する。よって、書き込みのコマンド及びアドレスを示す信号が、図6(E)に示すように、制御回路20から出力されると共に、図6(F)に示すように、第1のセレクタ26を介して、メモリモジュール14に出力される。従って、メモリモジュール14は、所定時間後の次のタイミングでハッシュ値を1ライン分書き込むことができる状態となる。
そこで、ハッシュ値計算制御回路24からの、図6(L)に示すハッシュ値の読み出し指示の信号に応じて、図6(M)に示すように、溜め込みバッファ36から、メモリの1ライン分の複数のハッシュ値が読み出されて、第2のセレクタ38に出力される。制御回路20は、図6(M)に示す複数のハッシュ値が第2のセレクタ38に出力されるタイミングで、図6(N)に示すように、溜め込みバッファ36からのデータを選択するように制御する信号を第2のセレクタ38に出力する。なお、3ステート制御回路28も第2のセレクタ38と同様に制御する。よって、溜め込みバッファ36から読み出された、メモリの1ライン分の複数のハッシュ値が、第2のセレクタ38及び3ステート制御回路28を介してメモリモジュール14に出力される。そして、ハッシュ値記憶領域14Bにおける、指定されたアドレスの領域に、当該複数のハッシュ値が書き込まれる。なお、ハッシュ値を書き込むアドレスは、第2のアドレス保持回路24Aに、図示されない手段で予め設定されており、ハッシュ値をメモリに書き込んだ際には、書き込んだ分だけ第2のアドレス保持回路24Aに設定されたアドレスが増加される。
次に、第1の実施形態の効果を説明する。
(第1の効果)
従来、図7(A)に示すように、CPU上でVMマネージャが、ハッシュ値の計算のために、メモリからデータを読み出す指示をする。当該データを読み出す指示に基づいて、メモリコントローラは、図7(B)に示すように、メモリモジュールに、データの読み出しを指示する。メモリモジュールは、図7(C)に示すように、データを読み出し、メモリコントローラに出力し、メモリコントローラは、図7(B)に示すように、メモリからのデータをCPUに出力する。VMマネージャは、図7(A)に示すように、ハッシュ値を計算し、続いて、ハッシュ値をハッシュ値記憶領域に記憶するようにメモリコントローラに指示する。メモリコントローラは、図7(B)に示すように、ハッシュ値を記憶するようにメモリモジュールに指示する。メモリモジュールは、ハッシュ値を記憶する。
以上のハッシュ値計算処理とは異なるタイミングで、メモリコントローラは、図7(B)に示すように、スクラビング処理のためにメモリからデータを再度読み出すように指示する。メモリモジュールは、図7(C)に示すように、データを再度読み出し、メモリコントローラに出力する。読み出されたデータがメモリコントローラに入力されると、図7(B)に示すように、メモリコントローラ内に設けられたエラー検出訂正装置が、エラー検出及び訂正の処理を実行する。訂正可能なエラーがあった場合には、訂正後のデータが書き戻されるように、メモリモジュールに指示する。訂正後のデータがメモリに書き戻される。
以上説明したように従来では、各ページのハッシュ値を計算するためにメモリをスキャンすることと、メモリのスクラビング処理のためにメモリをスキャンすることとは、無関係に行われる。従って、メモリの同じ記憶素子から、ハッシュ値を計算するためにデータが読み出されると共に、この読み出しとは異なるタイミングで、メモリのスクラビング処理のに当該データが再度読み出される。
一方、第1の実施形態では、図8(A)に示すように、CPU16上でVMマネージャがアドレスを指示すると、メモリコントローラ18は、図8(B)に示すように、スクラビング処理及びハッシュ値計算処理のために、メモリからデータを読み出す指示をする。メモリモジュール14は、図8(C)に示すように、メモリからデータを読み取り、読み取ったデータをメモリコントローラ18に出力する。メモリコントローラ18では、図8(B)に示すように、スクラビング処理及びハッシュ値計算処理を実行する。即ち、メモリコントローラ18は、メモリから読み出したデータに、訂正できるエラーがあった場合には、当該エラーを訂正して、メモリに書き戻す。また、メモリコントローラ18は、スクラビング処理のために読み出しかつ上記エラー検出訂正処理が実行された訂正済みのデータを用いて1ページのハッシュ値を計算し、ハッシュ値をメモリに記憶させる。
従来では、図7(A)に示すように、CPU上でVMマネージャがハッシュ値を計算する。これに対し、第1の実施形態では、メモリコントローラ18内にハッシュ値計算回路34を設けている。そして、ハッシュ値計算回路34は、スクラビング処理のためにメモリから読み出されたデータを利用して、すなわち、ハッシュ値計算のためにメモリから同一のデータを再度読み出すことなく、各ページのハッシュ値を計算する。このように、CPU16とは別に設けられたハッシュ値計算回路が、メモリコントローラ18が通常備えているメモリスクラビングの機能を利用してハッシュ値を計算するため、ページ毎のハッシュ値を計算する際のCPU16の負荷を軽減することができる。従って、ハッシュ値の計算のためにCPU16の主となる処理の実行を阻害することを防止することができる。
(第2の効果)
ハッシュ値の計算は、EORやAND等の論理関数とシフトの組み合わせで行うので、ハッシュ値計算回路34を簡素なハードウェアで実現することができる。よって、第1の実施形態は、メモリコントローラ18への少量の回路の追加で、ハッシュ値の計算の分、CPU16の負荷を減らすことができる。
(第3の効果)
第1の実施形態では、制御回路20が、CPU16の主となる処理を実行しないアイドル状態の場合に、スクラビング処理及びハッシュ値計算処理、並びにハッシュ値のメモリへの書きこみ処理を実行する。よって、第1の実施形態は、CPU16の主となる処理のためにメモリからデータを読み出す処理の実行時間が長くなる状態が生ずることを従来技術より少なくすることができる。
(第4の効果)
従来、ハッシュ値の計算をCPUが行っているので、メモリモジュールからのデータをCPUまで移動させなければならなかった。しかし、第1の実施形態では、図1に示すように、ハッシュ値計算回路34及び溜め込みバッファ36は、CPU16よりもメモリモジュール14に物理的に近い位置に配置される。よって、第1の実施形態は、ハッシュ値の計算のためにメモリモジュール14からのデータをCPU16まで移動させず、より近い位置まで移動させれば済む。従って、第1の実施形態は、従来技術より電力消費を抑えることができる。
(第5の効果)
第1の効果で述べたように、第1の実施形態は、スクラビング処理のためにメモリから読み出したデータを用いて各ページのハッシュ値を計算する。従って、メモリの対象の領域のスキャンを一度で済ませることができる。よって、第1の実施形態は、スクラビング処理及びハッシュ値計算処理における電力消費を、図7に示す例よりも減らすことができる。
次に、第1の実施形態の変形例を説明する。
(第1の変形例)
第1の変形例では、メモリコントローラ18は、制御回路20に代えて、MPU(マイクロプロセッサ:Micro−Processing Unit)を備える。第1の変形例では、エラー検出訂正回路30及びハッシュ値計算回路34の少なくとも一方が省略される。第1の変形例では、エラー検出訂正回路30及びハッシュ値計算回路34の少なくとも一方が省略されたことに対応してエラー検出及び訂正の処理とハッシュ値の計算との少なくとも一方をプログラムに従ってMPUが実行する。
第1の変形例は、第1の実施形態の第1〜第5の効果の他に、エラー検出訂正回路30及びハッシュ値計算回路34の少なくとも一方を省略するので、メモリコントローラ18の構成を、第1の実施形態よりも簡易にできる効果を有する。
以下、エラー検出訂正回路30を用いるがハッシュ値計算回路34を省略し、エラー検出及び訂正の処理後の訂正済データがMPUに入力されかつハッシュ値の計算をプログラムに従ってMPUが実行する例を説明する。なお、データ処理のプログラムは、MPU内に設けられるROMに記憶される。MPUはROMから当該プログラムを読み出し、以下の処理を実行する。図9には、MPUが実行するデータ処理の一例がフローチャートとして示される。図9に示すように、MPUは、ステップ102で、溜め込みバッファ36にハッシュ値を記憶する領域(エントリ)を識別する変数nを0に初期化する。MPUは、ステップ104で、上記と同様にスクラビング処理を実行するように各素子を制御すると共に、スクラビング処理の実行に伴い得られた訂正済データに基づいて1ページ分のハッシュ値を計算する。MPUは、ステップ106で、溜め込みバッファ36のn番エントリに、ステップ104で計算されたハッシュ値を記憶する。
MPUは、ステップ108で、変数nを1インクリメントし、ステップ110で、変数nで識別されるエントリに基づいて、メモリの1ライン(メモリへの書き込み単位)分溜まったか否かを判断する。ステップ110の判定結果が否定判定の場合には、データ処理はステップ104に戻って、MPUは、以上の処理(ステップ104〜ステップ110)を実行する。ステップ110の判定結果が肯定判定の場合には、データ処理はステップ112に進む。MPUは、ステップ112で、メモリモジュール14へのバスがアイドル状態の場合に、溜め込みバッファ36に記憶されたメモリの1ライン分の複数のハッシュ値をメモリの指定されたアドレスの領域に書き出す。
MPUは、ステップ114で、溜め込みバッファ36を空にし、メモリの書き込みアドレスを1ライン分進める。MPUは、ステップ116で、メモリの書き込みアドレスに基づいて、メモリのスクラビング処理の対象の領域の全てについて処理が終了したか否かを判断する。ステップ116の判定結果が否定判定の場合には、データ処理はステップ102に戻って、MPUは、以上の処理(ステップ102〜ステップ116)を実行する。ステップ116の判定結果が肯定判定の場合には、データ処理は終了する。
上記例は、第1の実施形態の第1〜第5の効果の他に、ハッシュ値計算回路34を省略するので、メモリコントローラ18の構成を、第1の実施形態のメモリコントローラ18よりも簡易にすることができる。
(第2の変形例)
第1の実施形態及び第1の変形例では、データ記憶領域14Aの全ての領域について、スクラビング処理を実行する。第2の変形例では、第1に、データ記憶領域14Aの全ての領域ではなく選択された領域のみについて、第2に、ハッシュ値記憶領域14Bについてもスクラビング処理を実行する。第1の場合は、必要な場所のみについてスクラビング処理を実行し、第2の場合は、ハッシュ値記憶領域14Bのデータについてエラーを訂正することができる。
(第3の変形例)
第1の実施形態におけるハッシュ値の計算方法は一例であり、第3の変形例では、各ページのデータの内容に応じかつ当該内容を要約するハッシュ値を求めることができる上記例以外の計算方法で要約値を計算する。例えば、Bob Jenkins関数、MD5(Message Digest Algorithm 5)、SHA(Secure Hash Algorithm)−1等が適用可能である。
(第4の変形例)
第1の実施形態は、VM間のメモリ共有を例にとり説明した。第4の変形例は、通常のOS(オペレーティングシステム:Operating System)の仮想メモリにおける、ページ重複排除を支援する。
(その他の変形例)
第1の実施形態では、1ページのデータの数は、メモリの1ラインのデータの整数倍や1ラインのデータの内の1/8の合計4つのデータ(上記A、B、C、及びD参照)の整数倍としているが、整数倍でなくともよい。
また、第1の実施形態では、各ページのハッシュ値を計算する場合、エラー検出訂正回路30からのデータがハッシュ値計算回路34に入力される。即ち、ハッシュ値計算回路34は、エラー検出訂正回路30からのデータをそのまま用いて各ページのハッシュ値を計算する。開示の技術では、エラー検出訂正回路30からのデータではなく、メモリから読み出され、エラー検出訂正回路30に入力される前のデータを用いて各ページのハッシュ値を計算してもよい。
また、第1の実施の形態では、スクラビング処理のために読み出されたデータをハッシュ値の計算に利用する場合について説明したが、これに限定されない。ページ毎のハッシュ値を計算する場合と同様に、メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出すことを含む処理により呼び出された処理を利用することにより、第1の実施形態と同様の効果が得られる。
更に、ハッシュ値計算制御回路24、ハッシュ値計算回路34、溜め込みバッファ36第2のセレクタ38を、メモリコントローラ18の外に配置してもよい。
また、ハッシュ値計算回路34及び溜め込みバッファ36は、CPU16よりもメモリモジュール14に物理的に近い位置に配置される。しかし、ハッシュ値計算回路34及び溜め込みバッファ36の少なくとも一方とメモリモジュール14との間のデータの移動距離は、CPU16とメモリモジュール14との間のデータの移動距離より長くてもよい。
[第2の実施形態]
次に、第2の実施形態を説明する。第2の実施形態のデータ処理装置10の構成は、第1の実施形態のデータ処理装置10とほぼ同様である。そこで、以下、第2の実施形態のデータ処理装置10の構成のうち、第1の実施形態とは異なる部分のみを説明し、第1の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
図10には、第2の実施形態のデータ処理装置10のブロック図が示される。図10に示すように、CPU16にはキャッシュ16Cが設けられる。メモリには、各ラインに対応して、当該ライン内のデータのアドレスに対応して、後述するディレクトリ情報を記憶するディレクトリ情報記憶領域14Cが設けられる。
メモリコントローラ18は、ディレクトリチェック回路122及び第3のセレクタ124を更に備える。エラー検出訂正回路30からのデータ送信線L11は、ディレクトリチェック回路122の入力端子にも接続される。ディレクトリチェック回路122の出力端子は制御線L22を介して、第3のセレクタ124の制御信号を入力する入力端子に接続される。ハッシュ値計算回路34の出力端子に接続されたデータ送信線L12は、第3のセレクタ124の2つの入力端子の一方に接続される。第3のセレクタ124の他方の入力端子には、無効を示す値(例えば、全てのビットが0)が入力される。ハッシュ値計算制御回路24からの、ハッシュ値を記憶する指示信号を送信するための制御線L6は、ディレクトリチェック回路122にも接続される。
次に、第2の実施形態のデータ処理装置10の作用を説明する。第2の実施形態のデータ処理装置10の作用は、第1の実施形態のデータ処理装置10とほぼ同様である。そこで、以下、第2の実施形態のデータ処理装置10の作用のうち、主として第1の実施形態とは異なる部分のみを説明する。
第2の実施形態では、CPU16のキャッシュ16Cがライトバック(Write back)方式である。即ち、ライトバック方式では、メモリへデータを新たに書き込む場合、まずキャッシュ16Cにデータが書き込まれ、メモリモジュール14まではデータは転送されない。そして、キャッシュ16Cに新たなデータを書き込むための領域が無くなった場合等に、キャッシュ16Cに書き込まれているキャッシュラインのうち、例えばCPU16による使用回数が少ないキャッシュラインのデータがメモリに書き込まれる。よって、メモリに新たに書き込むデータがキャッシュ16Cに書き込まれた段階では、新たなデータはキャッシュ16Cにのみ存在し、メモリには書き込まれていない。
従って、この段階で、メモリから読み出されたデータを利用して各ページのハッシュ値を計算すると、キャッシュ16Cに記憶されている新たなデータを含むページのハッシュ値は、書き換えられていない古いデータに基づいて計算される。よって、新たなデータにより本来一致していないページが、古いデータに基づくハッシュ値を参照したため、他のページとたまたま一致し、複数のVMにより共有されるページの候補(以下、「共有候補」という)となる場合がある。第2の実施形態は、このようなキャッシュ16Cがライトバック方式のために本来一致していないページが複数のVMの共有候補となることに対処する。
図11には、CPU16とメモリコントローラ18との間で入出力されるデータの内容が示される。図11に示すように、CPU16からメモリコントローラ18には次のデータが入力される。MC_IN_VALID、MC_IN_COMMAND_ID、MC_IN_OPCODE、MC_IN_REQUESTER_ID、MC_IN_ADDRESS、及びMC_IN_DATAである。かっこ内の数字はデータ送信線L106の一部の線の数を示す。上記MC_IN_OPCODEは、CPU16からの命令の具体的な内容を示すコードであり、000、010、011、111等がある。
図11の例では、「000」は、メモリからデータを単に読み出すことを示す(Read(Share))。「100」は、データをメモリコントローラ18に戻すことを示す(Write back)。「010」は、データを独占的に利用するための読み出しを示す(Read(Own))。この場合、メモリに書き戻されるデータは書き換えられる可能性がある。「011」も同様に、データを独占的に利用するための読み出しを示す。ただし、該当のデータ自体はすでに要求元のCPU16が非独占的に持っており、メモリから読み出したデータをCPU16へ転送する必要がないことを示す((Dir Change(Own))。
ディレクトリ情報は、MC_IN_OPCODE、及びMC_IN_REQUESTER_IDの内容に応じて定まる。MC_IN_ADDRESSは、CPU16が処理するデータが記憶されるアドレスを示す。制御回路20は、MC_IN_ADDRESSが示すアドレスに対応して、MC_IN_OPCODE及びMC_IN_REQUESTER_IDに応じたディレクトリ情報がディレクトリ情報記憶領域14Cに記憶されるように、メモリモジュール14を制御する。
なお、メモリコントローラ18からCPU16には、MC_OUT_VALID、MC_OUT_COMMAND_ID、MC_OUT_DATA、及びMC_OUT_ERRORが出力する。
スクラビング処理及びハッシュ値計算のためにメモリから各ラインのデータが読み出される際には、ディレクトリ情報記憶領域14Cの内容も読み出される。エラー検出訂正回路30によりエラー検出及び訂正がなされたデータの中で、ディレクトリ情報記憶領域14Cのディレクトリ情報は、ディレクトリチェック回路122に入力される。ディレクトリチェック回路122は、入力されたディレクトリ情報の内容に応じて第3のセレクタ124を制御する。ディレクトリチェック回路122は、ハッシュ値計算回路34がハッシュ値を計算する1ページの中に、書き換えられる可能性のあるデータが含まれるか否かを認識することができる。ハッシュ値計算回路34は、書き換えられていない古いデータに基づいて、書き換えられる可能性のあるデータを含むページのハッシュ値を計算する。よって、当該ハッシュ値を溜め込みバッファ36に記憶し、ハッシュ値記憶領域14Bに記憶すると、他のページのハッシュ値とたまたま一致し、複数のVMの共有候補となる場合がある。
これを避けるため、まず、ハッシュ値計算制御回路24は、ハッシュ値を記憶する指示信号をディレクトリチェック回路122に入力する。指示信号が入力されたディレクトリチェック回路122は、無効を示す値を選択させるための信号を第3のセレクタ124に出力する。よって、第3のセレクタ124は、無効を示す値を溜め込みバッファ36に出力する。ハッシュ値計算制御回路24から、ハッシュ値を記憶する指示信号が入力された溜め込みバッファ36は、第3のセレクタ124からの無効を示す値を、当該ページのハッシュ値として記憶する。溜め込みバッファ36に記憶された無効を示す値であるハッシュ値は、当該ページに対応してハッシュ値記憶領域14Bに記憶される。
なお、ハッシュ値計算回路34がハッシュ値を計算する1ページの中に、書き換えられる可能性があるデータが含まれない場合は、ディレクトリチェック回路122は、エラー検出訂正回路30からのハッシュ値を選択するように第3のセレクタ124を制御する。
第2の実施形態におけるハッシュ値計算回路34、ディレクトリチェック回路122、及び第3のセレクタ124は、開示の技術の「決定部」の一例である。
次に、第2の実施形態の効果を説明する。
(第1の効果)
上記のように、スクラビング処理及びハッシュ値計算のためにメモリから各ラインのデータが読み出される際には、ディレクトリ情報記憶領域14Cに記憶されたディレクトリ情報も読み出される。エラー検出訂正回路30によりエラー検出及び訂正がなされたデータの中で、ディレクトリ情報記憶領域14Cに記憶されたディレクトリ情報は、ディレクトリチェック回路122に入力される。ハッシュ値計算回路34が古いデータに基づいて書き換えられる可能性のあるデータを含むページのハッシュ値を計算する場合がある。この場合、ディレクトリチェック回路122は、第3のセレクタ124に、当該ハッシュ値に代えて、無効を示す値を溜め込みバッファ36に出力させる。溜め込みバッファ36に記憶された無効を示す値であるハッシュ値は、当該ページに対応してハッシュ値記憶領域14Bに記憶される。無効を示す値であるハッシュ値は、例えば、全てのビットが0の特異な値であり、通常のデータに基づくハッシュ値とは区別される。よって、無効を示す値であるハッシュ値のページの内容は、通常のデータに基づくハッシュ値のページの内容とは異なると判定される。よって、キャッシュ16Cがライトバック方式のために本来一致していないページが複数のVMの共有候補となることを防止することができる。
(その他の効果)
第2の実施形態は、第1の実施形態における上記第1〜第5の効果と同様の効果を有する。
次に、第2の実施形態の変形例を説明する。
(第1の変形例)
第1の変形例では、第1の実施形態の第1の変形例と同様に、メモリコントローラ18は、制御回路20に代えて、MPUを備える。エラー検出訂正回路30及びハッシュ値計算回路34の少なくとも一方が省略される。第1の変形例では、エラー検出訂正回路30及びハッシュ値計算回路34の少なくとも一方が省略されたことに対応して、エラー検出及び訂正の処理とハッシュ値の計算の少なくとも一方をプログラムに従ってMPUが実行する。
第1の変形例は、第1の実施形態の第1〜第5の効果の他に、メモリコントローラ18の構成を、第2の実施形態のメモリコントローラ18よりも簡易にすることができる。
以下、エラー検出訂正回路30を用いるが、ハッシュ値計算回路34、ディレクトリチェック回路122、及び第3のセレクタ124を省略し、エラー検出及び訂正の処理後の訂正済データがMPUに入力される例を説明する。本例では、ハッシュ値の計算をプログラムに従ってMPUが実行する。なお、データ処理のプログラムは、MPU内に設けられるROMに記憶される。MPUはROMから当該プログラムを読み出し、以下の処理を実行する。図12には、第2の実施形態の変形例における、制御回路に代わるMPUが実行するデータ処理の一例を示すフローチャートが示される。なお、図12に示すMPUが実行するデータ処理は、図9に示す処理とほぼ同様であるので、同一のステップには同一の符号を付して当該ステップの説明を省略し、異なるステップのみについて説明する。
ステップ104の後、データ処理はステップ132へ進む。ステップ132で、MPUは、ステップ104で計算に用いた全ラインの各々のディレクトリ情報に基づいて、ステップ104において1ページ分のハッシュ値を計算する際、当該ページに、書き換えられる可能性のあるデータが含まれていたか否かを判断する。
ステップ104の判定結果が否定判定の場合には、ステップ134で、MPUは、xに、ステップ104で計算されたハッシュ値を設定する。一方、ステップ104の判定結果が肯定判定の場合には、ステップ136で、MPUは、xに、無効を示す値を設定する。
ステップ138で、溜め込みバッファ36のn番目のエントリにxに設定された値を記憶する。
上記例は、第2の実施形態の第1〜第4の効果の他に、ハッシュ値計算回路34を省略するので、メモリコントローラ18の構成を、第2の実施形態のメモリコントローラ18よりも簡易にすることができる。
(第2の変形例)
第2の変形例のデータ処理装置10の構成は、第2の実施形態のデータ処理装置10とほぼ同様である。そこで、以下、主として第2の変形例のデータ処理装置10の構成のうち、第2の実施形態とは異なる部分のみを説明し、第2の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
図13には、第2の実施形態の第2の変形例のデータ処理装置10のブロック図が示される。図13に示すように、CPUチップ12は、処理装置140及びディレクトリキャッシュ142を備える。ディレクトリキャッシュ142は、ライトバック方式であるものとする。処理装置140は、第2の実施形態におけるキャッシュ16Cを備えたCPU16と、ディレクトリキャッシュ142の管理を含む処理を実行するシステムコントローラとを備える。メモリコントローラ18は、ディレクトリチェック回路122と第3のセレクタ124との間に設けられた判定回路144を備える。制御回路20の出力端子に接続されたデータ送信線L8は、ディレクトリキャッシュ142にも接続される。ディレクトリキャッシュ142は、信号線群L108を介して処理装置140と接続される。ディレクトリキャッシュ142の出力端子は、データ送信線L110を介して、判定回路144の第1〜第3の入力端子の第1の入力端子に接続される。ハッシュ値計算制御回路24からの制御線L6は、第2の実施形態における例(図10参照)とは異なり、ディレクトリチェック回路122には接続されず、判定回路144の第2の入力端子に接続される。判定回路144の第3の入力端子には、データ送信線L22を介してディレクトリチェック回路122の出力端子に接続される。判定回路144の出力端子は、制御線L26を介して、第3のセレクタ124の制御信号を入力するための入力端子に接続される。
次に、第2の変形例のデータ処理装置10の作用を説明する。第2の変形例のデータ処理装置10の作用は、第2の実施形態のデータ処理装置10とほぼ同様である。そこで、以下、第2の変形例のデータ処理装置10の作用のうち、主として第2の実施形態とは異なる部分のみを説明する。
処理装置140のシステムコントローラは、MC_IN_OPCODEの内容に基づいて、データが書き換えられる可能性があることを示すディレクトリ情報を把握する。システムコントローラは、把握したディレクトリ情報を、MC_IN_ADDRESSにより示されるアドレスに対応して、ディレクトリキャッシュ142に記憶する。
しかし、ディレクトリキャッシュ142の記憶容量はあまり多くはない。よって、ディレクトリキャッシュ142に新たなデータを書き込むための領域が無い場合等に、処理装置140は、例えばCPU16による使用回数が少ないディレクトリ情報をディレクトリ情報記憶領域14Cに記憶するようにメモリコントローラ18に指示する。
ここで、ディレクトリ情報記憶領域14Cに記憶されたディレクトリ情報は、ディレクトリ情報が新たに書き込まれるまで同じ内容である。よって、ディレクトリキャッシュ142にディレクトリ情報が記憶された場合、ディレクトリ情報記憶領域14Cに記憶されたディレクトリ情報は、ディレクトリキャッシュ142の内容より古い。よって、ディレクトリキャッシュ142にディレクトリ情報が記憶された場合には、ディレクトリキャッシュ142のディレクトリ情報が、ディレクトリ情報記憶領域14Cの内容に優先される。そこで、第2の変形例では、判定回路144にはディレクトリキャッシュ142から、ディレクトリキャッシュ142のディレクトリ情報が、ディレクトリ情報記憶領域14Cの内容に優先されることを示す信号が入力される。
スクラビング処理及びハッシュ値計算のためにメモリから各ラインのデータが読み出される際には、ディレクトリ情報記憶領域14Cの内容も読み出される。エラー検出訂正回路30によりエラー検出訂正処理が施されたデータの中で、ディレクトリ情報記憶領域14Cの内容は、ディレクトリチェック回路122に入力される。
ディレクトリチェック回路122は、ディレクトリ情報記憶領域14Cに、書き換えられる可能性があることを示すディレクトリ情報がある場合、無効を示す値を選択する指示信号を判定回路144に出力する。しかし、ディレクトリチェック回路122は、ディレクトリ情報記憶領域14Cに、書き換えられる可能があることを示すディレクトリ情報がない場合、無効を示す値を選択する指示信号を判定回路144に出力しない。
制御回路20は、メモリから1ラインのデータを読み出す際のコマンド及びアドレスを、ディレクトリキャッシュ142にも入力する。ディレクトリキャッシュ142は、制御回路20から入力されたアドレスに対応して、ディレクトリ情報がディレクトリキャッシュ142内にある場合、信号を判定回路144に出力する。しかし、ディレクトリキャッシュ142は、上記入力されたアドレスのデータに対応するディレクトリ情報がディレクトリキャッシュ142にない場合、信号を判定回路144に出力しない。
判定回路144は、ディレクトリキャッシュ142から上記信号が入力されなければ、ディレクトリチェック回路122の指示に従う。まず、書き換えられる可能性があるデータを含むページのハッシュ値がハッシュ値計算回路34から出力されるタイミングで、制御回路20から判定回路144に信号が出力される。判定回路144は、ディレクトリチェック回路122から無効を示す値を選択する指示信号が入力された場合、制御回路20から判定回路144に信号が入力されたタイミングで、無効を示す値を選択するように、第3のセレクタ124を制御する。判定回路144は、ディレクトリチェック回路122から上記指示信号が入力されなかった場合、制御回路20から判定回路144に信号が入力されたタイミングで、ハッシュ値計算回路34からのハッシュ値を選択するように、第3のセレクタ124を制御する。
一方、判定回路144は、ディレクトリキャッシュ142から上記信号が入力された場合、ディレクトリチェック回路122の指示に従わない。即ち、判定回路144は、ディレクトリチェック回路122から上記指示信号が入力されたか否かに関わらず、制御回路20から判定回路144に信号が入力されたタイミングで、第3のセレクタ124を制御する。具体的には、ディレクトリキャッシュ142から読み出したディレクトリ情報に従い、データが書き換えられる可能性があれば無効を示す値を、なければハッシュ値計算回路34からのハッシュ値を選択するように、第3のセレクタ124を制御する。
第2の変形例は、第2の実施形態の効果の他に、以下の効果を有する。
上記のように、データが書き換えられる可能性のある場合、ハッシュ値記憶領域14Bの内容にかかわらず、判定回路144は、無効を示す値を選択する指示のための信号を第3のセレクタ124に出力する。よって、第2の変形例は、ディレクトリキャッシュ142を設けても、キャッシュ16Cがライトバック方式のために本来一致していないページが複数のVMの共有候補となることを防止することができる。
なお、第2の変形例において、第2の実施形態の第1の変形例のように、制御回路20に代えてMPUを備えた場合、図12に示す処理では、ステップ132の判定結果が否定判定の場合には、MPUは、次のステップを実行する。まずMPUは、ディレクトリキャッシュ142にディレクトリ情報があるか否かを判断する。ディレクトリキャッシュ142にディレクトリ情報がないと判断された場合、メモリから読みだされたディレクトリ情報に従い、データが書き換えられる可能性があれば、データ処理はステップ136に進み。一方、データが書き換えられる可能性がなければ、データ処理はステップ134に進む。ディレクトリキャッシュ142にディレクトリ情報があると判断された場合は、メモリから読み出されたディレクトリ情報ではなくディレクトリキャッシュ142から読み出された情報に従う。すなわち、上記と同様に、データが書き換えられる可能性があれば、データ処理はステップ136に進む。一方、データが書き換えられる可能性がなければ、データ処理はステップ134に進む。
第2の実施形態における、ハッシュ値計算回路34、ディレクトリチェック回路122、第3のセレクタ124、ディレクトリキャッシュ142、及び判定回路144は、開示の技術の「決定部」の一例である。
なお、第1の実施形態における第2の変形例、第3の変形例、第4の変形例、及びその他の変形例も第2の実施形態の変形例として適用できる。
また、第2の実施形態では、書き換えられる可能性のあるデータが含まれるページのハッシュ値が他のページのハッシュ値とたまたま一致し、本来一致していないページが複数のVMの共有候補となることを防止する。このため、第2の実施形態では、書き換えられる可能性のあるデータが含まれるページのハッシュ値を、無効を示す値としている。ハッシュ値が無効を示す値であれば、当該ハッシュ値に対応するページは、書き換えられる可能性のあるデータが含まれるページであると判定できる。書き換えられる可能性のあるデータが含まれるページであることが判定できれば、本来一致していないページが複数のVMの共有候補となることを防止することができる。
なお、ハッシュ関数によっては、所定の「無効を示す値」が、ハッシュ値の計算により偶然に正当な値として生成される場合もある。そのようなハッシュ値が計算されたページは、共有候補から除外されてしまう。しかし、例えばハッシュ値として32bitの値を計算するハッシュ関数を使う場合は、ハッシュ値が適切に分布していると仮定すると、正当なハッシュ値が「無効を示す値」になってしまう確率は43億分の1(2の32乗=およそ43億)である。また、例えばハッシュ値として64bitの値を計算するハッシュ関数を使う場合は、およそ1845京分の1である。従って、書き換えられる可能性のあるデータを含むページのハッシュ値を「無効を示す値」としても、そのようなページが共有候補から除外されてしまう場合は、極めて少ないため、問題とならない。すなわち、予め決めたハッシュ関数における通常の計算で算出される可能性がある値を「無効を示す値」として取り決めても、問題はない。
[第3の実施形態]
次に、第3の実施形態を説明する。第3の実施形態のデータ処理装置10の構成は、第1の実施形態のデータ処理装置10とほぼ同様である。そこで、以下、第3の実施形態のデータ処理装置10の構成のうち、第1の実施形態とは異なる部分のみを説明し、第1の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
図14には、第3の実施形態のデータ処理装置10のブロック図が示される。図14に示すように、メモリコントローラ18は、制御回路20に接続された、データの書き換えが起こるアドレスを記憶するアドレス記憶バッファ152を更に備えている。また、メモリコントローラ18は、ハッシュ値計算回路34と溜め込みバッファ36との間に、セレクタ154を備える。セレクタ154の第1の入力端子Rには、エラー検出訂正回路30からのデータ送信線L11が接続される。セレクタ154の第2の入力端子Cには、ハッシュ値計算回路34の出力端子が、データ送信線L12を介して接続される。セレクタ154の第3の入力端子Lには、無効を示す値が入力される。セレクタ154の制御信号の入力端子には、制御線L30を介して制御回路20が接続される。セレクタ154の出力端子はデータ送信線L32を介して溜め込みバッファ36に接続される。
次に、第3の実施形態のデータ処理装置10の作用を説明する。第3の実施形態のデータ処理装置10の作用は、第1の実施形態のデータ処理装置10とほぼ同様である。以下、第3の実施形態のデータ処理装置10の作用のうち、主として第1の実施形態とは異なる部分のみを説明する。
第3の実施形態でも、第1の実施形態における上記スクラビング処理及びハッシュ値計算処理を実行する。なお、上記スクラビング処理及びハッシュ値計算処理において、ハッシュ値計算回路34からの各ページのハッシュ値を溜め込みバッファ36に記憶させるタイミングで、制御回路20は、入力端子Cを選択するようにセレクタ154を制御する。
ところで、第2の実施形態は、ディレクトリ情報を用いて書き換えられる可能性のあるデータを含むページを把握する。これに対し、第3の実施形態は、アドレス記憶バッファ152に記憶されたアドレスに基づいて、書き換えられる可能性のあるデータを含むページを把握する。
また、第2の実施形態は、スクラビング処理においてメモリからデータが読み出される際に、書き換えられる可能性のあるデータを含むページのハッシュ値として無効を示す値を、ハッシュ値記憶領域14Bに記憶する。これに対し、第3の実施形態は、スクラビング処理とは無関係に、データが書き換えられる可能性のある場合に、当該データを含むページのハッシュ値として無効を示す値を、ハッシュ値記憶領域14Bに記憶する。
図15には、第3の実施形態の制御回路20における当該ハッシュ値を、無効を示す値に変更する動作を含む動作のタイミングチャートが示される。
CPU16から制御回路20に、例えば、「010」(Read To Own)が出力された場合、制御回路20は、図15(A)(TA参照)に示すように、コマンド及びアドレスをメモリモジュール14に出力する。上記のように、「010」はデータを独占的に利用するための読み出しを示すので、コマンドは読み出しを示す。
制御回路20は、図15(B)に示すように、所定時間後の次のタイミングで、アドレス記憶バッファ152に上記データが新たに書き込まれる可能性のあるアドレスを、図15(A)(TC参照)に示すデータの書き戻しの指示があるまで記憶させる。
上記コマンド及びアドレスが入力されたメモリモジュール14は、図15(C)(UA参照)に示すように、指定されたアドレスを含む1ラインのデータをメモリコントローラ18に出力する。よって、エラー検出訂正回路30からは、図15(D)(WA参照)に示すように、所定時間後の次のタイミングで、訂正済データを読み書き用バッファ32に出力する。その後、当該訂正済データは、CPU16に出力される。
次に、制御回路20は、アイドル状態となった場合、図15(A)(TB参照)に示すように、メモリモジュール14に、コマンド及びアドレスを出力する。このアドレスは、ハッシュ値記憶領域14Bの1ラインのアドレスであって、書き換えられる可能性があるデータを含むページのハッシュ値を含む1ラインのアドレスである。
上記コマンド及びアドレスが入力されたメモリモジュール14は、図15(C)(UB参照)に示すように、指定されたアドレスを含む1ラインのデータ(複数のハッシュ値)をメモリコントローラ18に出力する。よって、エラー検出訂正回路30からは、図15(E)(WB参照)に示すように、所定時間後の次のタイミングで、1ラインのデータ(複数のハッシュ値)がセレクタ154の入力端子Rに入力される。図15(E)には、1ラインのデータ(複数のハッシュ値)のうち、データが新たに書き込まれる可能性があるアドレスのデータを含むページのハッシュ値がセレクタ154の入力端子Rに入力されるタイミングが「P」で示される。
セレクタ154の入力端子Rに入力される1ラインのデータ(複数のハッシュ値)の内、「P」で示されるタイミング以外のタイミングでは、制御回路20は、入力端子Rからの値を選択するようにセレクタ154を制御する。よって、「P」で示されるタイミング以外のタイミングでは、セレクタ154はハッシュ値記憶領域14Bに記憶されたハッシュ値を選択する。一方、データが新たに書き込まれる可能性があるアドレスのデータを含むページのハッシュ値がセレクタ154の入力端子Rに入力されるタイミングでは、制御回路20は、入力端子Lからの値を選択するようにセレクタ154を制御する。入力端子Lからの値は無効を示す値である。
以上より、1ラインのデータ(複数のハッシュ値)のうち、データが新たに書き込まれる可能性があるアドレスのデータを含むページ以外では、ハッシュ値記憶領域14Bに記憶されたハッシュ値が溜め込みバッファ36に記憶される。これに対し、データが新たに書き込まれる可能性があるアドレスのデータを含むページについては、無効を示す値がハッシュ値として溜め込みバッファ36に記憶される。そして、制御回路20から溜め込みバッファ36に、図15(A)(TC参照)に示すように、データの書き戻しが指示されると、上記1ライン分のデータ(複数のハッシュ値)が、図15(F)に示すように、元のアドレスの1ラインに書き戻される。元のアドレスの1ラインに書き戻される1ライン分のデータ(複数のハッシュ値)における、データが新たに書き込まれる可能性があるアドレスのデータを含むページには、当該ページのハッシュ値として無効を示す値が記憶される(Q1参照)。
アドレス記憶バッファ152、セレクタ154、溜め込みバッファ36、第2のセレクタ38、及び3ステート制御回路28は、開示の技術の「書換部」の一例である。
次に、第3の実施形態の効果を説明する。
(第1の効果)
第3の実施形態の制御回路20は、スクラビング処理とは無関係に、アドレス記憶バッファ152に記憶されたアドレスに基づいて、書き換えられる可能性のあるデータを含むページを把握する。そして、制御回路20は、当該ページのハッシュ値として無効を示す値を、ハッシュ値記憶領域14Bに記憶する。よって、本来一致していないページが複数のVMの共有候補となることを防止することができる。
(その他の効果)
第3の実施形態は、第1の実施形態における上記第1〜第5の効果と同様の効果を有する。
次に、第3の実施形態の変形例を説明する。
第3の実施形態の変形例においても、第1の実施形態の第1の変形例と同様に、メモリコントローラ18は、制御回路20に代えてMPUを有する。また、第3の実施形態の変形例では、エラー検出訂正回路30と、ハッシュ値計算回路34、セレクタ154、及びエラー検出訂正回路30からセレクタ154の入力端子Rまでの線を含む部分との少なくとも一方が省略される。更に、第3の実施形態の変形例では、当該省略に対応して、エラー検出及び訂正の処理と、ハッシュ値の計算との少なくとも一方をプログラムに従ってMPUが実行する。第3の実施形態の変形例は、第1の実施形態の第1の変形例と同様の効果を有する。
なお、第1の実施形態における第2の変形例、第3の変形例、第4の変形例、及びその他の変形例も第3の実施形態の変形例として適用できる。
[第4の実施形態]
次に、第4の実施形態を説明する。第4の実施形態のデータ処理装置10の構成は、第3の実施形態のデータ処理装置10とほぼ同様である。そこで、以下、第4の実施形態のデータ処理装置10の構成のうち、第3の実施形態とは異なる部分のみを説明し、第3の実施形態と同一の構成の部分には同一の符号を付して、その説明を省略する。
図16には、第4の実施形態のデータ処理装置10のブロック図が示される。図16に示すように、メモリコントローラ18は、ハッシュ値計算回路34とは別のハッシュ値計算回路156、一時バッファ158、第1のEOR回路160、複数の一時バッファ162、及び第2のEOR回路164を備える。
ハッシュ値計算回路156は、データ送信線L9を介して読み書き用バッファ32に接続され、制御線L42を介して制御回路20に接続される。ハッシュ値計算回路34の出力端子は、一時バッファ158の入力端子にも接続される。一時バッファ158の出力端子は第1のEOR回路160の2つの入力端子の一方に接続される。一時バッファ158は、制御線L44を介して制御回路20に接続される。第1のEOR回路160の他方の入力端子には、ハッシュ値計算回路156の出力端子が、データ送信線L50を介して、接続される。第1のEOR回路160の出力端子は、複数の一時バッファ162の各入力端子に接続される。
エラー検出訂正回路30の出力端子に接続されかつセレクタ154の入力端子Rに接続されたデータ送信線L11には、第2のEOR回路164の2つの入力端子の一方が接続される。第2のEOR回路164の他方の入力端子には、複数の一時バッファ162の各出力端子が接続される。複数の一時バッファ162のそれぞれは、複数の制御線L46のそれぞれを介して制御回路20に接続される。
第4の実施形態におけるセレクタ154には、入力端子R、C、Lの他に別の入力端子Sが設けられる。第2のEOR回路164の出力端子は、データ送信線L56を介してセレクタ154の入力端子Sに接続される。
次に、第4の実施形態のデータ処理装置10の作用を説明する。第4の実施形態のデータ処理装置10の作用は、第3の実施形態のデータ処理装置10とほぼ同様である。以下、第4の実施形態のデータ処理装置10の作用のうち、主として第3の実施形態とは異なる部分を説明する。第4の実施形態でも、第3の実施形態における上記スクラビング処理及びハッシュ値計算処理を実行する。
ところで、第4の実施形態における、メモリへのデータの書き込みは、Read−modify−writeである。詳細には、メモリコントローラ18は、CPU16からあるラインのメモリへの書き込みデータを受け取った場合、受け取ったデータをそのままメモリへ書き込まない。Read−modify−writeでは、該当ラインのデータを一旦メモリから読み出し(read)、必要に応じて制御情報等(ディレクトリ情報等)の内容を検査する。そして、CPU16から受け取ったデータで読み出したデータを上書きし(modify)、メモリに書き戻す(write)。第4の実施形態は、新たに書き込まれるデータを含む1ページのハッシュ値を、次のように計算する。元のデータを含めたデータに基づく部分ハッシュ値と、新たに書き込まれるデータを含めたデータに基づく部分ハッシュ値との差分を、元の1ページのハッシュ値に適用する。よって、第4の実施形態では、ハッシュ値を求めるためのハッシュ関数として、差分が計算可能なハッシュ関数を用いる。
図17には、ハッシュ値の差分を計算することにより、ハッシュ値を更新する具体的内容が示される。詳細には後述するが、まず、ハッシュ値を更新する内容を概説する。メモリコントローラ18は、1ページのハッシュ値を次のように計算する。図17(A)に示すように、メモリコントローラ18は、まず、複数のライン(#0、#1、・・・最終ライン)の各々において、複数のデータからハッシュ値(部分ハッシュ値)を計算する。そして、メモリコントローラ18は、各ラインのハッシュ値のEORを計算することにより、1ページのハッシュ値を計算する。
次に、例えば、ライン#mが新しいデータに書き換えられるとする。メモリコントローラ18は、新しいライン#mのデータからハッシュ値(部分ハッシュ値)を計算する。メモリコントローラ18は、ライン#mにおける、新しいデータから計算された部分ハッシュ値と、書き換えられる前の古いデータから計算された部分ハッシュ値との差分(EOR)を計算する(図17(B)参照)。
そして、メモリコントローラ18は、図17(C)に示すように、書き換えられる前のページ全体に対するハッシュ値と、部分ハッシュ値の差分とのEORを計算することにより、当該ページのハッシュ値を更新する計算をする。
図18には、第4の実施形態の制御回路20の、ハッシュ値を更新する動作を含む動作のタイミングチャートが示される。
CPU16からメモリの1ライン分のデータの書き込みが指示された場合、メモリコントローラ18は、当該データが書き込まれる前に、当該1ライン分のデータの部分ハッシュ値を計算するため、当該1ライン分のデータの読み出しをする。即ち、制御回路20は、図18(A)(FA参照)に示すように、当該1ライン分のデータのアドレス及び読み出しのコマンドを、メモリモジュール14に出力する。その後、メモリモジュール14は、指定されたラインのデータを読み出し、読み出したデータを、図18(C)(GA参照)に示すように、メモリコントローラ18に出力する。読み出されたデータは、エラー検出訂正回路30に入力される。エラー検出訂正回路30から訂正済データが図18(D)(HA参照)に示すようにハッシュ値計算回路34に出力される。ハッシュ値計算回路34で当該1ライン分のデータに基づいて計算されたハッシュ値が出力されるタイミングで、制御回路20は、図18(F)に示すように、ハッシュ値計算回路34からのハッシュ値を記憶するように一時バッファ158を制御する。一時バッファ158は、ハッシュ値を第1のEOR回路160に出力する。
CPU16から上記1ラインの新しいデータの書き込みの指示があると、制御回路20は、図18(A)(FB参照)に示すように、当該1ライン分のデータのアドレス及び読み出しのコマンドを、メモリモジュール14に出力する。当該アドレスは、図18(B)に示すように、制御回路20から溜め込みバッファ36に、図18(A)(FD参照)に示す、データの書き戻しが指示されるまで、アドレス記憶バッファ152に記憶される。上記1ラインの新しいデータは、CPU16から読み書き用バッファ32に一旦保存され、図18(H)に示すように、メモリモジュール14に出力されると共に、図18(I)に示すように、ハッシュ値計算回路156に出力される。ハッシュ値計算回路156で上記1ラインの新しいデータに基づいて計算されたハッシュ値が出力されるタイミングで、以下の処理が行われる。すなわち、図18(J)に示すように、第1のEOR回路160は、ハッシュ値計算回路156からのハッシュ値と、一時バッファ158からのハッシュ値との差分を計算する。制御回路20は、そのタイミングで、第1のEOR回路160から出力される差分を、複数の一時バッファ162の何れか指定した一時バッファ162に記憶するよう制御する。
制御回路20は、アイドル状態の場合、上記1ラインの新しいデータを含む1ページのハッシュ値を含む1ラインのデータ(複数のハッシュ値)をハッシュ値記憶領域14Bから読み出すように、メモリモジュール14を制御する(図18(A):FC参照)。
メモリモジュール14は、指定されたラインのデータ(複数のハッシュ値)を読み出し、図18(C)(GC参照)に示すように、メモリコントローラ18に出力する。当該ラインのデータ(複数のハッシュ値)はエラー検出訂正回路30に入力される。エラー検出訂正回路30からは、図18(K)(HC参照)に示すように訂正済データが出力される。訂正済データは、セレクタ154の入力端子Rに入力されると共に第2のEOR回路164にも入力される。図18(K)には、1ラインのデータ(複数のハッシュ値)のうち、データが新たに書き込まれたアドレスのデータを含むページのハッシュ値がセレクタ154の入力端子Rに入力されるタイミングが「P」で示される。
セレクタ154の入力端子Rに入力される1ラインのデータ(複数のハッシュ値)のうち、「P」で示されるタイミング以外のタイミングでは、制御回路20は、図18(P)に示すように、入力端子Rからの値を選択するようにセレクタ154を制御する。よって、「P」で示されるタイミング以外のタイミングでは、セレクタ154はハッシュ値記憶領域14Bに記憶されたハッシュ値を選択する。
一方、制御回路20は、データが新たに書き込まれたアドレスのデータを含むページのハッシュ値がセレクタ154の入力端子Rに入力されるタイミングでは、指定された一時バッファ162に保持されたハッシュ値の差分を元のハッシュ値に適用させる。即ち、まず、制御回路20は、図18(M)に示すように、ハッシュ値の差分を保持する一時バッファ162に、当該差分を出力させる。第2のEOR回路164は、エラー検出訂正回路30からの元のハッシュ値と、一時バッファ162からの差分とのEORを計算し、図18(N)に示すように、結果をセレクタ154の入力端子Sに入力する。制御回路20は、図18(P)に示すように、データが新たに書き込まれたアドレスのデータを含むページのハッシュ値がセレクタ154の入力端子Rに入力されるタイミングで、入力端子Sを選択するようにセレクタ154を制御する。
以上より、図18(Q)に示すように、1ラインのデータ(複数のハッシュ値)のうち、データが新たに書き込まれたアドレスのデータを含むページ以外では、ハッシュ値記憶領域14Bに記憶されたハッシュ値が溜め込みバッファ36に記憶される。これに対し、データが新たに書き込まれたアドレスのデータを含むページについては、更新されたハッシュ値が溜め込みバッファ36に記憶される。そして、制御回路20から溜め込みバッファ36に、図18(A)(FD参照)に示すように、データの書き戻しが指示されると、上記1ライン分のデータ(複数のハッシュ値)が、図18(L)に示すように、元のアドレスの1ラインに書き戻される。元のアドレスの1ラインに書き戻される1ライン分のデータ(複数のハッシュ値)における、データが新たに書き込まれたアドレスのデータを含むページには、更新されたハッシュ値が記憶される(Q1参照)。
上記素子(152〜164、36、38、及び28)は、開示の技術の「書換部」の一例である。
次に、第4の実施形態の効果を説明する。
(第1の効果)
例えば、メモリのライン#mの中のあるデータが新しいデータに書き換えられるため、新しいデータが入力された場合、メモリコントローラ18は、新しいデータを含むライン#mの複数のデータから計算された新しい部分ハッシュ値を計算する。メモリコントローラ18は、ライン#mの新しい部分ハッシュ値と、書き換えられる前の古いデータを含むライン#mの古い部分ハッシュ値との差分を計算する。メモリコントローラ18は、書き換えられる前のページ全体に対するハッシュ値と、部分ハッシュ値の差分とのEORを計算することにより、当該ページのハッシュ値を計算する。そして、メモリコントローラ18は、計算されたハッシュ値を、ハッシュ値記憶領域14Bの元のアドレスの領域に記憶させることにより、ハッシュ値を更新する。
よって、第4の実施形態では、メモリ内のデータの書き換えに追従して、ハッシュ値記憶領域14Bをメンテナンスすることができる。
ここで、第3の実施形態では、書き換えられる可能性のあるデータを含むページのハッシュ値を、無効を示す値に変える。これに対し、第4の実施形態では、書き換えられるデータを含むページのハッシュ値を、新しいデータを含むページの複数のデータに基づくハッシュ値に変えることができる。
(その他の効果)
第4の実施形態は、第1の実施形態における上記第1〜第4の効果と同様の効果を有する。
次に、第4の実施形態の変形例を説明する。
第4の実施形態の変形例としても、第1の実施形態の第1の変形例と同様に、制御回路20に代えてMPUが設けられる。また、第4の実施形態の変形例では、エラー検出訂正回路30と、ハッシュ値計算回路34を含む各回路(154〜164)及びエラー検出訂正回路30からセレクタ154の入力端子Rまでの線を含む部分との少なくとも一方が省略される。第4の実施形態の変形例では、当該省略に対応して、エラー検出及び訂正の処理と、ハッシュ値の計算との少なくとも一方をプログラムに従ってMPUが実行する。第4の実施形態の変形例は、第1の実施形態の第1の変形例と同様の効果を有する。
なお、第1の実施形態における第2の変形例、第4の変形例、その他の変形例も第4の実施形態の変形例として適用できる。
本明細書に記載された全ての文献、特許出願及び技術規格は、個々の文献、特許出願及び技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置であって、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部と、
前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する決定部と、
を備えた転送装置。
(付記2)
前記制御部は、前記メモリの予め定められた領域に記憶されたデータに対して、前記所定処理としてエラー検出及びエラー訂正を定期的に行うメモリスクラビング処理を行うように制御し、
前記決定部は、前記メモリから読み出されてから前記エラー検出及びエラー訂正が行われる前のデータ、または、前記エラー訂正が行われた場合は、エラー訂正後で、かつ前記メモリに書き戻される前のデータ、前記エラー検出によりエラーが検出されなかった場合には、エラー検出の処理後のデータを利用して、前記要約値を決定する
付記1に記載の転送装置。
(付記3)
前記エラー訂正は、前記メモリから読み出されたデータから訂正可能なエラーが検出された場合に、検出されたデータの値を訂正することである付記2に記載の転送装置。
(付記4)
前記エラーは、前記メモリを構成する各記憶素子に記憶されたデータの値が、制御していない場合に変更されたこと、または、制御した通りに変更されていないことである付記2または付記3に記載の転送装置。
(付記5)
前記決定部により決定された要約値は前記メモリに書き込まれ、
前記制御部による前記メモリからのデータの読み出し、及び前記決定部により決定された前記要約値の前記メモリへの書きこみの少なくとも一方は、前記処理部が前記主となる処理を実行していないアイドル状態の場合に、行われる付記1〜付記4の何れか1項に記載の転送装置。
(付記6)
前記メモリと前記転送装置との間のデータの転送距離は、前記メモリと前記処理部との間のデータの転送距離よりも短い付記1〜付記5の何れか1項に記載の転送装置。
(付記7)
前記メモリから所定単位毎に読み出されてキャッシュに一旦記憶されるデータが、前記メモリに書き戻される際に書き換えられる可能性があるか否かを示す情報が、前記所定単位毎のデータに対応して前記メモリに書き込まれ、
前記決定部は、前記複数の所定単位分のデータに対応して前記メモリに書きこまれた前記書き換えられる可能性があるか否かを示す情報が、前記複数の所定単位分のデータに書き換えられる可能性のあるデータが含まれることを示す場合、予め定められた値を前記要約値として決定する付記1〜付記6の何れか1項に記載の転送装置。
(付記8)
前記決定部により決定された要約値は前記メモリに記憶され、
前記メモリに記憶されたデータが書き換えられる可能性のあるデータを含む複数の所定単位分のデータの要約値を、予め定められた値に書き換える書換部を更に備える
付記1〜付記7の何れか1項に記載の転送装置。
(付記9)
前記決定部により決定された要約値は前記メモリに記憶され、
前記メモリに記憶されたデータが新しいデータに書き換えられる場合に、前記書き換えられるデータを含む複数の所定単位分のデータの要約値を、前記書き換えられるデータに代えて前記新しいデータを含む前記複数の所定単位分のデータの要約値に書き換える書換部を更に備える
付記1〜付記7の何れか1項に記載の転送装置。
(付記10)
前記決定部を、ハードウェアの回路とした付記1〜付記9の何れか1項に記載の転送装置。
(付記11)
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行うと共に、前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部を備えた転送装置に設けられたコンピュータに、
前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する
ことを含む処理を実行させるための決定プログラム。
(付記12)
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行うと共に、要約値を決定する決定回路を備えた転送装置に設けられたコンピュータに、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御し、 読み出され、前記メモリに書き戻される前のデータを利用して、前記決定回路で複数の所定単位分のデータ毎の要約値が決定されるように、前記読み出され、前記メモリに書き戻される前のデータを前記決定回路に入力する
ことを含む処理を実行させるための決定プログラム。
(付記13)
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置に設けられたコンピュータに、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御し、
前記所定処理を行うために読み出され、前記メモリに書き戻される前のデータを利用して、複数の所定単位分のデータ毎の要約値を決定する
ことを含む処理を実行させるための決定プログラム。
(付記14)
複数のデータを記憶するメモリと、前記メモリに記憶されたデータを用いた主となる処理を実行する処理部との間で、データの転送を行う転送装置が実行する決定方法であって、
前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御し、
読み出されたデータ、または、前記所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する
ことを含む決定方法。
(付記15)
複数のデータを記憶するメモリと、
前記メモリに記憶されたデータを用いた主となる処理を実行する処理部と、
前記メモリと前記処理部との間で、データの転送を行うと共に、前記メモリに記憶されたデータをアドレス順に所定単位毎に順次読み出し、読み出したデータに対して所定処理を行うように制御する制御部と、前記制御部により読み出されたデータ、または、前記制御部による所定処理が行われたデータを利用して、複数の所定単位分のデータ毎の要約値を決定する決定部と、を備えた転送装置と、
を備えたデータ処理装置。