(57)【特許請求の範囲】
【請求項１】
メモリと、入出力アダプタと、ダーティ・データを記憶できるライト・バック・キャッシュ・メモリを含むプロセッサと、を含む計算装置における方法であって、
（ａ）ライト・バック・キャッシュ・メモリ中の全キャッシュ・ラインよりも少ないデータを含むデータ・ブロックを前記入出力アダプタから前記メモリ内のあるメモリ位置に書き込むステップと、
（ｂ）前記ライト・バック・キャッシュ・メモリを探索して、ステップ（ａ）で書き込まれたメモリ位置のデータが該ライト・バック・キャッシュ・メモリに含まれるかどうかを判定するステップと、
（ｃ）ステップ（ｂ）の探索により、ステップ（ａ）で書き込まれたメモリ位置のデータが前記ライト・バック・キャッシュ・メモリに含まれると判定されたとき、ステップ（ａ）で書き込まれたメモリ位置のデータを含む全キャッシュ・ラインを前記メモリに書き戻すことなくパージするステップと、
を含むことを特徴とするキャッシュ・コヒーレントＤＭＡ書き込み方法。
【請求項２】
ステップ（ａ）が、メモリと入出力アダプタとプロセッサとを接続するバス上で、前記メモリ位置のアドレスと該メモリ位置用のコヒーレンシ・インデックスとを含むメッセージを送るサブステップを含むことを特徴とする請求項１に記載のキャッシュ・コヒーレントＤＭＡ書き込み方法。
【請求項３】
ステップ（ｂ）における、前記メモリ位置のデータがライト・バック・キャッシュ・メモリに含まれるかどうかを判定するライト・バック・キャッシュ・メモリの探索は、前記メッセージに含まれるコヒーレンシ・インデックスを使用して行われることを特徴とする請求項２に記載のキャッシュ・コヒーレントＤＭＡ書き込み方法。
【請求項４】
ステップ（ａ）において、前記データ・ブロックが前記ライト・バック・キャッシュ・メモリ中の全キャッシュ・ラインの半分のデータを含むことを特徴とする請求項１に記載のキャッシュ・コヒーレントＤＭＡ書き込み方法。
【請求項５】
メモリと、ダーティ・データを記憶できるデータ・キャッシュ・メモリを含むプロセッサと、各項目が前記メモリ中のデータ・ページのアドレスとＤＭＡタイプ・インディケータとを含み、入出力ページ番号をメモリ・アドレス・ページ番号にマップする変換マップを含む入出力アダプタと、を含む計算装置において、
データ・ブロックが前記データ・キャッシュ・メモリ中の全キャッシュ・ラインよりも少ないデータを含むとき、前記入出力アダプタから前記メモリ内のあるメモリ位置に該データ・ブロックを書き込む方法であって、
（ａ）前記メモリ位置を含むメモリ中のデータ・ページ用のＤＭＡタイプ・インディケータの値を検査するステップと、
（ｂ）ＤＭＡタイプの値が第１の値に等しいとき、
（ｂ.１）前記入出力アダプタからメモリ内の前記メモリ位置に前記データ・ブロックを書き込むサブステップ、
（ｂ.２）前記データ・キャッシュ・メモリを探索して、サブステップ（ｂ.１）で書き込まれたメモリ位置のデータが該データ・キャッシュ・メモリに含まれるかどうかを判定するサブステップ、
（ｂ.３）サブステップ（ｂ.２）の探索により、サブステップ（ｂ.１）で書き込まれたメモリ位置のデータが前記データ・キャッシュ・メモリに含まれると判定されたとき、サブステップ（ｂ.１）で書き込まれたメモリ位置のデータを含む全キャッシュ・ラインを前記メモリに書き戻すことなくパージするサブステップ、
の各サブステップを実行するステップと、
（ｃ）ＤＭＡタイプの値が第２の値に等しいとき、
（ｃ.１）コヒーレント読取りを実行して、前記メモリ位置を含むキャッシュ・ラインをメモリおよびデータ・キャッシュ・メモリから得るサブステップ、
（ｃ.２）前記データ・ブロックを含むように前記キャッシュ・ラインを修正するサブステップ、
（ｃ.３）サブステップ（ｃ.２）で修正されたキャッシュ・ラインをメモリに書き込み直すサブステップ、
の各サブステップを実行するステップと、
を含むことを特徴とするコヒーレントＤＭＡ書き込み方法に適用されるデータ・ブロック書き込み方法。
【請求項６】
サブステップ（ｂ.１）が、メイン・メモリと入出力アダプタとプロセッサとを接続するバスで、前記メモリ位置のアドレスと該メモリ位置用のコヒーレンシ・インデックスとを含むメッセージを送るサブステップを含むことを特徴とする請求項５に記載のデータ・ブロック書き込み方法。
【請求項７】
サブステップ（ｂ.２）における、前記メモリ位置のデータがデータ・キャッシュ・メモリに含まれるかどうかを判定するデータ・キャッシュ・メモリの探索は、前記メッセージに含まれるコヒーレンシ・インデックスを使用して行われることを特徴とする請求項６に記載のデータ・ブロック書き込み方法。
【請求項８】
前記データ・ブロックが前記データ・キャッシュ・メモリ中の全キャッシュ・ラインの半分のデータを含むことを特徴とする請求項７に記載のデータ・ブロック書き込み方法。
【請求項９】
メモリと、入出力アダプタと、ダーティ・データを記憶できるライト・バック・キャッシュ・メモリを含むプロセッサと、を含む計算装置において、全データ・キャッシュ・ラインを転送する方法であって、
（ａ）ライト・バック・キャッシュ・メモリ中の前記キャッシュ・ラインよりも少ないデータを含むデータ・ブロックを前記入出力アダプタから前記メモリ内のあるメモリ位置に書き込むステップと、
（ｂ）前記ライト・バック・キャッシュ・メモリを探索して、ステップ（ａ）で書き込まれたメモリ位置のデータが該ライト・バック・キャッシュ・メモリに含まれるかどうかを判定するステップと、
（ｃ）ステップ（ｂ）の探索により、ステップ（ａ）で書き込まれたメモリ位置のデータが前記ライト・バック・キャッシュ・メモリに含まれると判定されたとき、ステップ（ａ）で書き込まれたメモリ位置のデータを含む全キャッシュ・ラインを前記メモリに書き戻すことなくパージするステップと、
（ｄ）全データ・キャッシュ・ラインが転送されるまでステップ（ａ）ないし（ｃ）を繰り返すステップと、
を含むことを特徴とするコヒーレントＤＭＡ書き込み方法に適用される全データ・キャッシュ・ライン転送方法。
【請求項１０】
ステップ（ａ）が、メモリと入出力アダプタとプロセッサとを接続するバスで、前記メモリ位置のアドレスと該メモリ位置用のコヒーレンシ・インデックスとを含むメッセージを送るサブステップを含むことを特徴とする請求項９に記載の全データ・キャッシュ・ライン転送方法。
【請求項１１】
ステップ（ｂ）における、前記メモリ位置のデータがライト・バック・キャッシュ・メモリに含まれるかどうかを判定するライト・バック・キャッシュ・メモリの探索は、前記メッセージに含まれるコヒーレンシ・インデックスを使用して行われることを特徴とする請求項１０に記載の全データ・キャッシュ・ライン転送方法。
【請求項１２】
ステップ（ａ）において、前記データ・ブロックが前記ライト・バック・キャッシュ・メモリ中の全キャッシュ・ラインの半分のデータを含むことを特徴とする請求項９に記載の全データ・キャッシュ・ライン転送方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、入出力（Ｉ／Ｏ）アダプタに関し、特に、入出力アダプタが、キャッシュ・ラインよりも小さなデータ・ブロックに関するコヒーレント直接メモリ・アクセス（ＤＭＡ）書込みトランザクションを実行するキャッシュ・コヒーレントＤＭＡ書き込み方法に関する。
【０００２】
【従来の技術】
大部分の現代のコンピュータ装置は、中央演算処理装置（以下、ＣＰＵというう）とメイン・メモリとを含む。ＣＰＵが命令およびオペランドを復号して実行することができる速度は、命令およびオペランドをメイン・メモリからＣＰＵに転送できる速度に依存する。多数のコンピュータ装置は、ＣＰＵが命令およびオペランドをメイン・メモリから得るために必要とされる時間を短縮するために、ＣＰＵとメイン・メモリの間にキャッシュ・メモリを含む。
【０００３】
キャッシュ・メモリとは、近い将来にＣＰＵによって使用されると考えられるメイン・メモリの内容の部分を一時的に保持するために使用される小容量の高速バッファ・メモリである。キャッシュ・メモリの主な目的は、データ読み出しの場合にも、命令取り出しの場合にも、メモリ・アクセスを実行するのに必要な時間を短縮することである。キャッシュ・メモリに位置する情報は、メイン・メモリに位置する情報よりもずっと短い時間でアクセスすることができる。したがって、キャッシュ・メモリを含むＣＰＵは、命令およびオペランドが取り出され、あるいは記憶されるのを待つのに費やす時間がより短い。
【０００４】
キャッシュ・メモリは、１つまたは複数のデータ・ワードの多数のブロックから成る。各ブロックには、そのコピー元であるメイン・メモリのブロックはどれかを固有に識別するアドレス・タグが関連付けられる。プロセッサがメモリを参照するたびに、要求されたデータのコピーがキャッシュ・メモリに存在するかどうかを調べるためにアドレス・タグの比較が行われる。所望のメモリ・ブロックがキャッシュ・メモリ中にない場合、そのブロックは、メイン・メモリから検索され、キャッシュ・メモリに記憶され、プロセッサに供給される。
【０００５】
ＣＰＵは、キャッシュ・メモリを使用してメイン・メモリからデータを検索するだけでなく、メイン・メモリに直接データを書き込む代わりにキャッシュ・メモリにデータを書き込む。プロセッサがメモリにデータを書き込みたいとき、キャッシュ・メモリは、アドレス・タグを比較して、データを書き込むべきデータ・ブロックがキャッシュ・メモリに存在しているかどうかを調べる。そのデータ・ブロックがキャッシュ・メモリに存在する場合、データは、キャッシュ・メモリ中のそのデータ・ブロックに書き込まれる。多数の装置では次いで、そのデータ・ブロック用の「ダーティ・ビット」がセットされる。ダーティ・ビットは、そのデータ・ブロック中のデータがダーティであり（すなわち、修正されており）、したがって、そのデータ・ブロックがキャッシュ・メモリから削除される前に、修正済みのデータをメイン・メモリに書き込んでおかなければならないことを示す。データを書き込むべきデータ・ブロックがキャッシュ・メモリ中に存在しない場合、そのデータ・ブロックをキャッシュ・メモリに取り込み、あるいは直接メイン・メモリに書き込まなければならない。
【０００６】
メモリと対話する入出力（Ｉ／Ｏ）アダプタは、演算装置のすべての機能に統合されるように設計する必要がある。このために、入出力アダプタ内のアドレス変換マップを使用して、入出力バス・アドレスをメモリ・アドレスに変換することが多い。そのようなアドレス変換マップは、入出力バス・アドレス範囲がメモリ・アドレス範囲よりも小さいとき、入出力アクセスによってメモリのどの部分も参照できるように使用される。
【０００７】
典型的な使用法では、入出力アドレス変換マップはソフトウェアによって管理されている。アドレス変換マップ中の各項目は、オペレーティング装置のソフトウェアによって明示的に割り振られロードされる。１つまたは複数のプロセッサがキャッシュ・メモリを使用する装置中のメイン・メモリに入出力アダプタがアクセスするとき、メモリにおいてアクセスされるデータの完全性を保証する措置を取る必要がある。たとえば、入出力アダプタがメモリのデータにアクセスする（書き込むまたは読み取る）とき、データの更新済みバージョンが装置上のプロセッサのキャッシュ・メモリに存在するかどうかを判定することが重要である。データの更新済みバージョンが存在する場合、入出力アダプタがデータの更新済みバージョンにアクセスするように何らかの措置を取らなければならない。データの更新済みバージョンがメモリ参照で使用されるようにする動作を、本明細書では、コヒーレンス動作と呼ぶ。
【０００８】
入出力アダプタによって装置のメモリからアクセスされるデータのコヒーレンスを保証するために様々な方式が提案されている。たとえば、１つの解決策は、入出力アダプタがメモリ中の関連する位置にアクセスする前に、ソフトウェアが装置上の各プロセッサごとのキャッシュ・メモリを明示的にフラッシュすることである。キャッシュ・メモリをフラッシュすると、入出力アダプタによってデータがアクセスされる前に、そのデータの更新済みバージョンがメイン・メモリに返される。しかし、この方法では、入出力アダプタによるメモリ・アクセスのオーバヘッドが著しく増大する恐れがある。
【０００９】
他の方法では、プロセッサのキャッシュ・メモリは、他のプロセッサのメモリ・トランザクションに応答して、要求されたデータが第１のプロセッサのキャッシュ・メモリに存在するかどうかを検査できるように設計される。データは、トランザクションごとに適宜、供給されあるいは無効化される。ＤＭＡ入力に使用されるトランザクションは通常、「Write New Block （ライト・ニュー・ブロック）」、「Write Purge （ライト・パージ）」、または「Write Invalidate（ライト・インバリデト）」として知られている。「Write Purge 」トランザクションでは、入出力アダプタは、アドレスと、メモリに書き込むべきデータ・ブロックとを供給する。各プロセッサ・キャッシュ・メモリは、指定されたアドレスがそのキャッシュ・メモリにあるかどうかを検査して、そのラインが存在する場合、そのラインに無効のマークを付ける。キャッシュ・メモリがダーティ・データ、すなわち修正済みデータを含むことができる従来技術の装置では、各装置のプロセッサのデータ・キャッシュ・メモリ中のキャッシュ・メモリのラインの未書き込み部分にあるダーティ・データをうっかり破壊しないように、書き込まれるデータの量が、そのキャッシュ・メモリのラインのサイズに正確に一致する必要がある。
【００１０】
ダーティ・データを破壊する問題を避ける１つの方法は、「write through （ライト・スルー）」キャッシュ・メモリを使用することである。ライト・スルー・キャッシュ・メモリでは、プロセッサは、そのキャッシュ・メモリにデータを書き込むとき、メモリにもそのデータを書き込む。したがって、ライト・スルー・キャッシュ・メモリが、ダーティなデータを含むことはない。「ライト・バック」キャッシュ・メモリでは、プロセッサは、そのキャッシュ・メモリに新しいデータを書き込むとき、そのデータをメモリには書き込まない。一般に、このダーティ・データを、メモリに返さずに上書きすることはできない。しかし、ライト・スルー・キャッシュ・メモリは、ライト・バック・キャッシュ・メモリよりも多くのバス帯域幅が通常の動作に必要とされることを含め、一般に知られている欠点を有する。
【００１１】
「ライト・バック」キャッシュ・メモリでは、書き込まれるデータの量を、各装置のプロセッサのデータ・キャッシュ・メモリ中のキャッシュ・ラインのサイズに正確に一致させるることは、プロセッサのキャッシュ・メモリが物理的にアドレスされ、かつ物理的にタグ付けされる場合にうまく機能する。これは、ＤＭＡ転送が通常、物理アドレスを使用して実行されるからである。しかし、プロセッサのキャッシュ・メモリが仮想インデックス付けされるように実施される場合、キャッシュ・コヒーレント入出力の問題はさらに難しいものになる。
【００１２】
仮想インデックス付けプロセッサ・キャッシュ・メモリを含むいくつかの装置は、装置上の各プロセッサごとのキャッシュ・メモリをソフトウェアに明示的にフラッシュさせる上記の第１の解決策を使用している。
【００１３】
仮想インデックス付けプロセッサ・キャッシュ・メモリを含む他の装置上では、各装置のプロセッサは、コヒーレンス動作を処理するために物理アドレスを仮想アドレスに変換する「逆変換テーブル」または「逆ＴＬＢ」を含む。入出力アダプタが装置のメモリにアクセスすると、各装置のプロセッサは、実アドレスを仮想アドレスに変換し、プロセッサ自体のキャッシュ・メモリにアクセスして、アクセスされたデータがキャッシュ・メモリ中にあるかどうかを判定する。そうである場合、入出力アダプタがアクセスを完了する前に、アクセスされたデータはメモリにフラッシュされる。入出力アダプタは、キャッシュ・メモリのデータに直接アクセスすることもできる。
【００１４】
他の方法では、入出力アダプタは、メモリにアクセスするとき、各プロセッサにコヒーレンス・インデックスを送る。コヒーレンス・インデックスは、プロセッサに関連するキャッシュ・メモリにアクセスして、アクセスされたデータがそのキャッシュ・メモリ中にあるかどうかを判定するために、各プロセッサによって使用される。データがキャッシュ・メモリ中にある場合、入出力アダプタがアクセスを完了する前に、アクセスされたデータはメモリにフラッシュされる。入出力アダプタは、キャッシュ・メモリのデータに直接アクセスすることもできる。
【００１５】
一般に、従来技術のキャッシュ・コヒーレント入出力方法では、入出力アダプタは、各装置のプロセッサ・データ・キャッシュ・メモリ中のキャッシュ・ラインのサイズに一致するデータ・ブロック・サイズを使用してＤＭＡ転送を実行している。これによって、入出力アダプタからメモリへのキャッシュ・コヒーレントＤＭＡ書き込みは簡単になる。具体的には、各装置のプロセッサ・データ・キャッシュ・メモリ中のキャッシュ・ラインのサイズに一致するデータ・ブロック・サイズを使用して入出力アダプタからメモリへのキャッシュ・コヒーレントＤＭＡ書込みを実行する際、各装置のプロセッサは、コヒーレンス・インデックスを使用して、全キャッシュ・ラインを無効化することができる。
【００１６】
【発明が解決しようとする課題】
しかし、各装置のプロセッサ・データ・キャッシュ・メモリ中のキャッシュ・ラインのサイズよりも小さなデータ・ブロック・サイズを使用して入出力アダプタからメモリへのキャッシュ・コヒーレントＤＭＡ書き込みを実行する際には、データ・ブロックによってアドレスされないキャッシュ・ラインの部分がダーティである可能性があるので全キャッシュ・ラインを無効化することはできない。そのような場合、部分キャッシュ・ラインのコヒーレント書き込みを実行するために、入出力アダプタは一般に、コヒーレント読取りを実行して全キャッシュ・ラインを得る必要があった。入出力アダプタは、新しいデータを含むように前記全キャッシュ・ラインを修正する。入出力アダプタは次いで、修正済みの全キャッシュ・ラインをメモリに書き込み直す。これによって、各装置のプロセッサ・データ・キャッシュ・メモリ中のキャッシュ・ラインのサイズよりも小さなデータ・ブロック・サイズを使用する入出力アダプタからメモリへの正しいキャッシュ・コヒーレントＤＭＡ書き込み動作が可能になるが、動作が複雑であるためにＤＭＡ転送のスループットが低減する。
【００１７】
入出力アダプタは、ＤＭＡトランザクションにどんなデータ・ブロック・サイズを使用すべきかを任意に「選択」できず、その代わりに、入出力バス上で発行されたトランザクションにおいて入出力装置によって指定されたのと同じデータ・ブロック・サイズを使用しなければならないことが多い。しかし、入出力ブロック・サイズがプロセッサ・データ・キャッシュ・メモリのライン・サイズよりも小さなコヒーレントＤＭＡ書込み動作の場合、従来技術の装置の入出力アダプタは、上述の複雑なコヒーレント読み出し修正ライト・バックを実行する必要があった。
【００１８】
【課題を解決するための手段】
本発明の好ましい実施例によれば、全キャッシュ・ラインよりも少ないデータのブロックに対してコヒーレント書き込み動作を実行できるようにする方法が提供される。計算装置は、メモリと、入出力アダプタと、プロセッサとを含む。プロセッサはデータ・キャッシュ・メモリを含む。入出力アダプタからメモリへのコヒーレント書き込みを実行する際、データ・ブロックは、入出力アダプタからメモリ内のあるメモリ位置に書き込まれる。データ・ブロックは、データ・キャッシュ・メモリ中の全キャッシュ・ラインよりも少ないデータを含む。たとえば、メモリ、入出力アダプタ、およびプロセッサを接続するバス上でメッセージが送られる。このメッセージは、メモリ位置のアドレスと、そのメモリ位置用のコヒーレンシ・インデックスとを含む。
【００１９】
データ・キャッシュ・メモリが、当該のメモリ位置のデータを含むかどうかを判定するために探索される。たとえば、探索では、必要に応じてコヒーレンシ・インデックスが使用される。探索によって、データ・キャッシュ・メモリが当該のメモリ位置のデータを含むと判定されると、そのメモリ位置のデータを含む全キャッシュ・ラインがパージされる。
【００２０】
上述の「高速」ＤＭＡ方法は、ＤＭＡトランザクションがキャッシュ・ライン境界上で整列するときにうまく機能する。ＤＭＡは最終的に、いくつかのコヒーレント・サブライン書き込みを使用してキャッシュ・ライン全体を書き込む。各コヒーレント・サブライン書き込みは、プロセッサ・キャッシュ中のキャッシュ・ラインのパージも実行する。同じキャッシュ・ラインの第２のパージおよびその後のパージは通常、冗長であるが、プロセッサが第１のコヒーレント・サブライン書き込みの後にデータ・キャッシュ・メモリにそのラインを再び取り込むケースのために必要とされる。
【００２１】
しかし、ＤＭＡトランザクションがキャッシュ・ライン境界上で整列しない場合、「高速」ＤＭＡを使用すると、「ダーティ」メモリ位置がデータ・キャッシュ・メモリからパージされることがある。「高速」ＤＭＡを行うことをいつ許可されるのかを入出力アダプタに何らかの方法で「通知」しなければならず、あるいは、ソフトウェアは、入出力アダプタが常に、「高速」ＤＭＡを行うことを許可されるようにしなければならない。好ましい実施例では、メモリ中のデータ・ページのアドレスと共にＤＭＡタイプ・インディケータを変換マップ項目中に置くことができる。この場合、データ・キャッシュ・メモリ中の全キャッシュ・ラインよりも少ないデータのブロックを転送する際、当該のメモリ位置を含むメモリ中のデータ・ページ用のＤＭＡタイプ・インディケータの値が検査される。ＤＭＡタイプの値が、「高速」ＤＭＡを実行できることを示すとき、上述のコヒーレント書き込みが実行される。ＤＭＡタイプの値が、「高速」ＤＭＡを実行できないことを示すとき、「安全な」ＤＭＡトランザクションが実行される。「安全」ＤＭＡトランザクションでは、メモリ、または当該のメモリ位置を含むデータ・キャッシュ・メモリからキャッシュ・ラインの現コピーを得るためにコヒーレント読取りが実行される。そのキャッシュ・ラインは、当該のデータ・ブロックを含むように修正される。次いで、修正されたキャッシュ・ラインがメモリに書き込み直される。
【００２２】
本発明の好ましい実施例によって、全キャッシュ・ラインよりもサイズが小さなデータ・ブロック用の高速ＤＭＡトランザクションを実施することができる。
【００２３】
【実施例】
図１は、コンピュータ装置の概略ブロック図を示す。プロセッサ１０、プロセッサ１１、およびメモリ１２は、メモリ・バス９に接続されるものとして示されている。プロセッサ１０は、ライト・バック・キャッシュ・メモリとしてのデータ・キャッシュ・メモリ１７を使用する。プロセッサ１１は、ライト・バック・キャッシュ・メモリとしてのデータ・キャッシュ・メモリ１８を使用する。メモリ・バス９には、入出力（Ｉ／Ｏ）アダプタ１３も接続されている。入出力アダプタ１３は、入出力バス１４に接続されている。入出力バス１４には入出力装置１５および入出力装置１６も接続されている。変換マップ１９は、入出力バス１４に使用されるアドレスを、メモリ１２によって使用されるアドレスに変換するために使用される。
【００２４】
図２は、本発明の好ましい実施例による変換マップ１９の実施例を示す。変換マップ１９は、入出力バス・アドレス２１をメモリ・アドレス２３に変換するために使用される。変換マップ１９は、入出力トランザクションの直接マップ済みキャッシュ・メモリ、フル・アソシエーティブ・キャッシュ・メモリ、またはセット・アソシエーティブ・キャッシュ・メモリとして実施することもできる。
【００２５】
好ましい実施例では、変換時に、入出力ページ・アドレスを使用して、変換マップ１９内の対応するメモリ・ページにアクセスする。図２に示した実施例では、入出力ページ番号は変換マップ１９へのインデックスとして使用される。入出力アドレス・オフセットは、メモリ・アドレス・オフセットと同じものである。たとえば、好ましい実施例では、入出力バス１４はそれぞれ、２０ビット入出力ページ番号と１２ビット・オフセットとを有する３２ビット・アドレスを使用する。メモリ・バス９は、それぞれ、２８ビット・メモリ・ページ番号と１２ビット・オフセットとを有する、４０ビット・アドレスを使用する。
【００２６】
好ましい実施例では、変換マップ１９は、各メモリ・ページごとに、コヒーレンス・インデックスも含む。コヒーレンス・インデックスは、仮想アドレスから導かれる部分であり、プロセッサ１０内のデータ・キャッシュ・メモリ１７およびプロセッサ１１内のデータ・キャッシュ・メモリ１８にインデックス付けするために使用される。コヒーレンス・インデックスがメモリ・アクセス・トランザクションの一部として渡されると、それによって、プロセッサ１０および１１は、それぞれ、データ・キャッシュ・メモリ１７および１８中の情報にコヒーレンシ矛盾がないかどうかを容易に探すことができる。プロセッサ１０またはプロセッサ１１上で動作するオペレーティング装置のソフトウェアは、入出力アダプタ１３内の変換マップ１９にアドレス変換情報をロードする。この情報には、コヒーレンス・インデックスと、以下で説明するその他のフィールドが含まれる。
【００２７】
図３は、本発明の好ましい実施例による変換マップ１９中の項目３０のフォーマットを示す。項目３０のページ・フィールド３１は、メモリ１２中のアドレスの物理ページ番号の２８ビットを含む。項目３０のコヒーレンス・インデックス（ＣＩ）フィールド３２は、メモリ１２中のアドレスの物理ページ番号の１０ビット・コヒーレンシ・インデックスを含む。ページ・タイプ（ＰＴ）・フィールド３３は、２ビットのページ・タイプを含む。有効インディケータ（Ｖ）・フィールド３４は、１ビット有効インディケータを含む。特定の実施例に応じて、追加フィールド３５を追加することができる。
【００２８】
ページ・タイプ（ＰＴ）・フィールド３３中の第１のビットは、ロッキングがイネーブルされているかどうかを示す。ロッキングがイネーブルされている場合、入出力装置１５や入出力装置１６など、入出力バス１４に接続された入出力装置は、数トランザクション間だけメイン・メモリ１２をロックしてアトミック・シーケンスを実行することができる。ロッキングは、入出力バス１４、または入出力バス１４に接続された他の入出力バスがメモリ・トランザクション中にロッキングを必要とするときに必要とされることがある。しかし、メモリをロックすると、装置の性能が低下し、したがって、ロッキングは、その機能を必要とするページ上でしかイネーブルされない。プロセッサ１０またはプロセッサ１１上で動作するオペレーティング装置のソフトウェアは、入出力アダプタ１３内の変換マップにアドレス変換情報をロードする際、対応するページ用のロッキングがイネーブルされているかどうかを示す値をページ・タイプ・フィールド３３に置く。
【００２９】
ページ・タイプ（ＰＴ）・フィールド３３中の第２ビットは、どんなタイプの直接メモリ・アクセス（ＤＭＡ）・トランザクションを使用すべきかを示す。ページ・タイプ・フィールド３３中の第２ビットの第１の値の場合、ＤＭＡタイプは「高速」である。高速ＤＭＡタイプの場合、入出力アダプタ１３は、ソフトウェアが各バッファの端部を次のキャッシュ・ライン境界まで「パッド」するケースを含め、当該のページの入出力アクセスのためのデータがキャッシュ・ライン境界上で整列していると仮定する。ページ・タイプ・フィールド３３中の第２ビットの第２の値の場合、ＤＭＡタイプは「安全」である。安全ＤＭＡタイプの場合、入出力アダプタ１３は、当該のページの入出力アクセスのためのデータがキャッシュ・ライン境界上で整列していないと仮定する。
【００３０】
好ましい実施例では、データ・キャッシュ・メモリ１７およびデータ・キャッシュ・メモリ１８用のキャッシュ・ライン・サイズは３２バイトである、高速ＤＭＡタイプの場合も、安全ＤＭＡタイプの場合も、全データ・キャッシュ・ライン（３２バイト）を含み、キャッシュ・ライン境界上で整列している書込みトランザクションは、従来技術と同様に実行される。どちらの場合も、入出力アダプタ１３は、メモリ中で整列している３２バイト・アドレスに３２バイトのデータを書き込むＷＲＩＴＥ＿ＰＵＲＧＥ（ライト−パージ）トランザクションを発行する。ＷＲＩＴＥ＿ＰＵＲＧＥトランザクションは、データ・キャッシュ・メモリ１７およびデータ・キャッシュ・メモリ１８中の対応する項目を探索するためにそれぞれ、プロセッサ１０およびプロセッサ１１によって使用されるコヒーレンシ・インデックスを含む。その項目がデータ・キャッシュ・メモリ１７またはデータ・キャッシュ・メモリ１８で見つかった場合、当該のキャッシュ・ラインはパージされる。
【００３１】
図４は、サイズが３２バイトよりも小さなデータ・トランザクション（すなわち、サブライン・データ・トランザクション）に対する入出力アダプタ１３の実行にページ・タイプ・フィールド３３中の第２ビットがどのように影響を及ぼすかを示す。入出力アダプタ１３は、サブライン・データ・トランザクションを実行するとき、ステップ４１およびステップ４２で、ページ・タイプ・フィールド３３を検査して、ページ・タイプ・フィールド３３の第２ビットがクリアされ、高速ＤＭＡを実行すべきであることを示す論理ゼロになっているかどうかを判定する。高速ＤＭＡが示された場合、ステップ４３で、高速ＤＭＡトランザクションが実行される。安全ＤＭＡが示された場合、ステップ４４で、安全ＤＭＡトランザクションが実行される。
【００３２】
入出力アダプタ１３は、入出力アダプタ１３からメモリ１２への安全ＤＭＡコヒーレント書き込みを実行するために、コヒーレント読取り（専用）を実行して、メモリ１２、データ・キャッシュ・メモリ１７、およびデータ・キャッシュ・メモリ１８から全キャッシュ・ラインを得る。この全キャッシュ・ラインは新しいデータを含むように修正される。入出力アダプタ１３は次いで、修正された全キャッシュ・ラインの入出力アダプタ１３からメモリ１２への非コヒーレント書き込みを実行する。
【００３３】
入出力アダプタ１３は、入出力アダプタ１３からメモリ１２への高速ＤＭＡコヒーレント書き込みを実行する際、整列している１６バイト・ブロックをメモリ１２に書き込むＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションを使用する。ＷＲＩＴＥ１６＿ＰＵＲＧＥは、データ・キャッシュ・メモリ１７およびデータ・キャッシュ・メモリ１８中の対応する項目を探索するためにそれぞれ、プロセッサ１０およびプロセッサ１１によって使用されるコヒーレンシ・インデックスを含む。その項目がデータ・キャッシュ・メモリ１７またはデータ・キャッシュ・メモリ１８で見つかった場合、当該のキャッシュ・ラインはパージされる。
【００３４】
図５は、本発明の好ましい実施例によるＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクション用のバス・トランザクション５０のフォーマットを示す。８ビット・トランザクション・タイプ・フィールド５１は、ＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションを示す値を含む。好ましい実施例では、これは１６進数０ＸＢＥである。１２ビット・コヒーレンス・インデックス・フィールド５２はトランザクション用のコヒーレンス・インデックスを含む。本発明の好ましい実施例は１０ビットしか使用しないので、１２ビット・コヒーレンス・インデックス・フィールド５２を構成するように１０ビット・コヒーレンス・インデックス・フィールド３２に２つのゼロがパッドされる。
【００３５】
メモリ・アドレス・フィールド５３は、書き込みデータの宛先を示すメモリ１２中の４０ビット・アドレスの上位３６ビットを含む。トランザクションが１６バイト境界に整列しているので、アドレスの下位４ビットは、指定されず、ゼロであると仮定される。入出力アダプタは、バス・トランザクション５０をメモリ・バス９上に置いた後、メモリ・バス９を介して１６バイト・データを転送する。メモリ１２は、メモリ・アドレス・フィールド５３に指定されたアドレスの始めからこれらのデータ・バイトを記憶する。プロセッサ１０は、コヒーレンス・インデックス・フィールド５２中のコヒーレンス・インデックスを使用してデータ・キャッシュ・メモリ１７を検査し、データ・キャッシュ・メモリ１７が、メモリ・アドレス・フィールド５３に指定されたアドレス用の項目を含むかどうかを判定する。そうである場合、プロセッサ１０は、キャッシュ・ライン全体をパージする。同様に、プロセッサ１１は、コヒーレンス・インデックス・フィールド５２中のコヒーレンス・インデックスを使用してデータ・キャッシュ・メモリ１８を検査し、データ・キャッシュ・メモリ１８が、メモリ・アドレス・フィールド５３に指定されたアドレス用の項目を含むかどうかを判定する。そうである場合、プロセッサ１１は、キャッシュ・ライン全体をパージする。
【００３６】
ＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションは、１６バイトよりも大きなキャッシュ・ラインを有する装置（３２バイト・キャッシュ・ラインまたは６４バイト・キャッシュ・ラインを有する装置）中のダーティ・バイトを破壊する機能を有するので、同じキャッシュ・ライン中のプロセッサ・データが破壊されても問題がない場合、あるいは両方のライン全体がＤＭＡによって書き込まれ（すなわち、これは高速ＤＭＡである）、プロセッサ１０および１１上で動作するソフトウェアが、ＤＭＡによって書き込まれたデータを修正しない場合だけ使用すべきである。
【００３７】
高速ＤＭＡトランザクション時に、当該のページの入出力アクセスのためのデータはキャッシュ・ライン境界上で整列する。これには、ソフトウェアが各バッファの端部を次のキャッシュ行境界まで「パッド」するケースも含まれる。好ましい実施例では、高速ＤＭＡ転送の予想されるケースは、キャッシュ・ラインの等価物をメモリ１２に書き込むために２つのＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションが連続的に発行されることである。第１のＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションで、入出力アダプタはキャッシュ・ラインの第１の半分をメモリ１２に書き込む。プロセッサ１０およびプロセッサ１１はそれぞれ、データ・キャッシュ・メモリ１７およびデータ・キャッシュ・メモリ１８から全キャッシュ・ラインの古いコピーをすべてパージする。第２のＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションで、入出力アダプタは、キャッシュ・ラインの第２の半分をメモリ１２に書き込む。第２のＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションの結果、プロセッサ１０またはプロセッサ１１がそれぞれ、データ・キャッシュ・メモリ１７またはデータ・キャッシュ・メモリ１８から全キャッシュ・ラインのコピーをパージすることがある。たとえば、このことが発生する可能性があるのは、自動プロセッサ事前取出しハードウェアが、第１のＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションの結果としてパージされたキャッシュ・ラインを偶然にキャッシュ・メモリ内に復元したときである。第２のＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションが完了した後、データ・キャッシュ・メモリ１７にもデータ・キャッシュ・メモリ１８にもこの行の古いコピーはなくなる。データの古いコピーとは、さらに新しいバージョンが他の場所に存在しているデータである。
【００３８】
本発明は、大部分のＤＭＡが全ページを含み、かつページ整列することを利用するものである。したがって、大部分のＤＭＡトランザクションは、キャッシュ・ライン上で整列し、「高速」ＤＭＡトランザクションとして実行することができる。好ましい実施例では、ページ・タイプ・フィールド３３でインディケータを使用することによって、ＤＭＡトランザクションがキャッシュ・ライン境界上で整列しないケース向けに安全ＤＭＡを指定することができる。このインディケータをなくすこともでき、適当なブロック・サイズのすべてのＤＭＡ入力にＷＲＩＴＥ１６＿ＰＵＲＧＥトランザクションを使用することもできる。しかし、この場合、すべてのＤＭＡトランザクションがキャッシュ・ライン境界上で整列することが装置の要件である。
【００３９】
前記の議論は、本発明の典型的な方法および実施例を開示して説明したものに過ぎない。当業者に理解されるように、本発明は、その趣旨からも基本的特性からも逸脱することなく他の特定の形で実施することができる。したがって、本発明の開示は、特許請求の範囲に記載された本発明の範囲を例示するものであり、制限するものではない。
【００４０】
以上、本発明の各実施例について詳述したが、ここで、各実施例の理解を容易にするために、各実施例ごとに要約して以下に列挙する。
【００４１】
１．  メモリ（１２）と、入出力アダプタ（１３）と、ダーティ・データを記憶できるライト・バック・キャッシュ・メモリ（１７、１８）を含むプロセッサ（１０、１１）とを含む計算装置における方法であって、
（ａ）ライト・バック・キャッシュ・メモリ（１７、１８）中の全キャッシュ・ラインよりも少ないデータを含むデータ・ブロックを入出力アダプタ（１３）からメモリ（１２）内のあるメモリ位置に書き込むステップと、
（ｂ）ライト・バック・キャッシュ・メモリ（１７、１８）が、ステップ（ａ）で書き込まれたメモリ位置のデータを含むかどうかを判定するためのライト・バック・キャッシュ・メモリ（１７、１８）を探索するステップと、
（ｃ）ステップ（ｂ）の探索で、ライト・バック・キャッシュ・メモリ（１７、１８）が、ステップ（ａ）で書き込まれたメモリ位置のデータを含むと判定されたとき、ステップ（ａ）で書き込まれたメモリ位置のデータを含む全キャッシュ・ラインをパージするステップとを含むことを特徴とするキャッシュ・コヒーレントＤＭＡ書き込み方法である。
【００４２】
２．  ステップ（ａ）が、メモリ（１２）、入出力アダプタ（１３）、およびプロセッサ（１０、１１）を接続するバス上で、メモリ位置のアドレスとそのメモリ位置用のコヒーレンシ・インデックスとを含むメッセージを送るサブステップを含むことを特徴とする上記１に記載のキャッシュ・コヒーレントＤＭＡ書き込み方法である。
【００４３】
３．  ステップ（ｂ）で、メッセージに含まれるコヒーレンシ・インデックスを使用して、ライト・バック・キャッシュ・メモリ（１７、１８）が当該のメモリ位置のデータを含むかどうかを判定するためにライト・バック・キャッシュ・メモリ・メモリ（１７、１８）を探索することを特徴とする上記２に記載のキャッシュ・コヒーレントＤＭＡ書き込み方法である。
【００４４】
４．  ステップ（ａ）で、データ・ブロックが、ライト・バック・キャッシュ・メモリ（１７、１８）中の全キャッシュ・ラインの半分のデータを含むことを特徴とする上記１に記載のキャッシュ・コヒーレントＤＭＡ書き込み方法である。
【００４５】
５．  メモリ（１２）と、データ・キャッシュ・メモリ（１７、１８）を含むプロセッサ（１０、１１）と、変換マップ中の各項目がメモリ（１２）中のデータ・ページのアドレスとＤＭＡタイプ・インディケータとを含む、入出力ページ番号をメモリ・アドレス・ページ番号にマップする変換マップを含む入出力アダプタ（１３）とを含む計算装置における、データ・ブロックが、データ・キャッシュ・メモリ（１７、１８）中の全キャッシュ・ラインよりも少ないデータを含むとき、入出力アダプタ（１３）からメモリ（１２）内のあるメモリ位置にデータ・ブロックを書き込む方法であって、
（ａ）前記メモリ位置を含むメモリ（１２）中のデータ・ページ用のＤＭＡタイプ・インディケータの値を検査するステップと、
（ｂ）ＤＭＡタイプの値が第１の値に等しいとき、
（ｂ．１）入出力アダプタ（１３）からメモリ（１２）内の前記メモリ位置にデータ・ブロックを書き込むサブステップと、
（ｂ．２）データ・キャッシュ・メモリ（１７、１８）が、サブステップ（ｂ．１）で書き込まれたメモリ位置のデータを含むかどうかを判定するためにデータ・キャッシュ・メモリ（１７、１８）を探索するステップと、
（ｂ．３）ステップ（ｂ．２）の探索で、データ・キャッシュ・メモリ（１７、１８）が、サブステップ（ｂ．１）で書き込まれたメモリ位置のデータを含むと判定されたとき、ステップ（ｂ．１）で書き込まれたメモリ位置のデータを含む全キャッシュ・ラインをパージするサブステップの各サブステップを実行するステップと、
（ｃ）ＤＭＡタイプの値が第２の値に等しいとき、
（ｃ．１）コヒーレント読取りを実行して、前記メモリ位置を含むキャッシュ・ラインをメモリ（１２）およびデータ・キャッシュ・メモリ（１７、１８）から得るサブステップと、
（ｃ．２）前記データ・ブロックを含むように前記キャッシュ・ラインを修正するステップと、
（ｃ．３）サブステップ（ｃ．２）で修正されたキャッシュ・ラインをメモリ（１２）に書き込み直すサブステップの各サブステップを実行するステップとを含むことを特徴とするコヒーレントＤＭＡ書き込み方法に適用されるデータ・ブロック書き込み方法である。
【００４６】
６．  サブステップ（ｂ．１）が、メイン・メモリ（１２）、入出力アダプタ（１３）、およびプロセッサ（１０、１１）を接続するバス上で、メモリ位置のアドレスとそのメモリ位置用のコヒーレンシ・インデックスとを含むメッセージを送るサブステップを含むことを特徴とする上記５に記載のデータ・ブロック書き込み方法である。
【００４７】
７．  サブステップ（ｂ．１）で、メッセージに含まれるコヒーレンシ・インデックスを使用して、データ・キャッシュ・メモリ（１７、１８）が当該のメモリ位置のデータを含むかどうかを判定することを特徴とする上記６に記載のデータ・ブロック書き込み方法である。
【００４８】
８．  データ・ブロックが、データ・キャッシュ・メモリ（１７、１８）中の全キャッシュ・ラインの半分のデータを含むことを特徴とする上記７に記載のデータ・ブロック書き込み方法である。
【００４９】
９．  メモリ（１２）と、入出力アダプタ（１３）と、ダーティ・データを記憶できるライト・バック・キャッシュ・メモリ（１７、１８）を含むプロセッサ（１０、１１）とを含む計算装置における、全データ・キャッシュ・ラインを転送する方法であって、
（ａ）ライト・バック・キャッシュ・メモリ（１７、１８）中の全キャッシュ・ラインよりも少ないデータを含むデータ・ブロックを入出力アダプタ（１３）からメモリ（１２）内のあるメモリ位置に書き込むステップと、
（ｂ）ライト・バック・キャッシュ・メモリ（１７、１８）が、ステップ（ａ）で書き込まれたメモリ位置のデータを含むかどうかを判定するためのライト・バック・キャッシュ・メモリ（１７、１８）を探索するステップと、
（ｃ）ステップ（ｂ）の探索で、ライト・バック・キャッシュ・メモリ（１７、１８）が、ステップ（ａ）で書き込まれたメモリ位置のデータを含むと判定されたとき、ステップ（ａ）で書き込まれたメモリ位置のデータを含む全キャッシュ・ラインをパージするステップと、
（ｄ）全データ・キャッシュ・ラインが転送されるまでステップ（ａ）ないし（ｃ）を繰り返すステップとを含むことを特徴とするコヒーレントＤＭＡ書き込み方法に適用される全データ・キャッシュ・ライン転送方法である。
【００５０】
１０．  ステップ（ａ）が、メモリ（１２）、入出力アダプタ（１３）、およびプロセッサ（１０、１１）を接続するバス上で、メモリ位置のアドレスとそのメモリ位置用のコヒーレンシ・インデックスとを含むメッセージを送るサブ・ステップを含むことを特徴とする上記９に記載の全データ・キャッシュ・ライン転送方法である。
【００５１】
１１．  ステップ（ｂ）で、メッセージに含まれるコヒーレンシ・インデックスを使用して、ライト・バック・キャッシュ・メモリ（１７、１８）が当該のメモリ位置のデータを含むかどうかを判定するためにライト・バック・キャッシュ・メモリ（１７、１８）を探索することを特徴とする上記１０に記載の全データ・キャッシュ・ライン転送方法である。
【００５２】
１２．  ステップ（ａ）で、データ・ブロックが、ライト・バック・キャッシュ・メモリ（１７、１８）中の全キャッシュ・ラインの半分のデータを含むことを特徴とする上記９に記載の全データ・キャッシュ・ライン転送方法である。
【００５３】
【発明の効果】
以上詳述したように、本は発明によれば、ライト・バック・キャッシュ・メモリ中の全キャッシュ・ラインより少ないデータを含むデータ・ブロックを入出力アダプタからメモリの任意の位置に書き込み、メモリにこのデータが書き込まれたことをライト・バック・キャッシュ・メモリが判定すると、メモリに書き込まれたデータを含む全キャッシュ・ラインをパージするようにしたので、全キャッシュ・ラインよりサイズが小さいデータ・ブロック用の高速ＤＭＡトランザクションを実施することができる。
【図面の簡単な説明】
【図１】本発明の好ましい実施例による入出力（Ｉ／Ｏ）アダプタを含むコンピュータ装置の概略ブロック図を示す。
【図２】本発明の好ましい実施例による、図１に示した入出力アダプタ内の変換マップの使用例を示す説明図である。
【図３】本発明の好ましい実施例による、図２に示した変換マップ中の項目のフォーマットを示す説明図である。
【図４】変換マップ中のＤＭＡタイプ・インディケータが、本発明の好ましい実施例によるデータ・トランザクション時に、入出力アダプタの実行にどのように影響を及ぼすかを示すフローチャートである。
【図５】本発明の好ましい実施例によるバス・トランザクションのフォーマットを示す説明図である。
【符号の説明】
９  メモリ・バス
１０，１１      プロセッサ
１２  メモリ
１３  入出力アダプタ
１４  入出力バス
１５，１６      入出力装置
１７，１８      データ・キャッシュ・メモリ
１９  変換マップ
２１  入出力バス・アドレス
２３  メモリ・アドレス
３０  項目
３１  ページ・フィールド
３２  コヒーレンス・インデックス（ＣＩ）・フィールド
３３  ページ・タイプ（ＰＴ）・フィールド
３４  有効インディケータ（Ｖ）・フィールド
３５  追加フィールド
５０  バス・トランザクション
５１  トランザクション・タイプ・フィールド
５２  １２ビット・コヒーレンス・インデックス・フィールド
５３  メモリ・アドレス・フィールド
【図１】
0003651857.tif 000002
【図２】
0003651857.tif 000003
【図３】
0003651857.tif 000004
【図４】
0003651857.tif 000005
【図５】
0003651857.tif 000006