(57)【要約】【課題】書き込みコマンドをメモリーに送る適切なタイミングを選ぶための方法および装置を提供すること。【解決手段】コンフリクトキューと衝突しない書き込みキューにある最も古いコマンドをメモリーに送って、次の条件の一部もしくは全部が真ならコンフリクトキューに追加する。その条件とは、読み出しキューにあるコマンドのすべてがコンフリクトキューと衝突する、プロセッサから入ってくる読み出しコマンドが書き込みキューと衝突しない、書き込みキューにあるコマンドの数が第１閾値より大きい、コンフリクトキューにあるすべてのコマンドが第２閾値を超えない時間の間存在していた、である。コマンドがキューにあるコマンドと同じメモリーのキャッシュラインにアクセスしない場合、キューと衝突しない。このように、書き込みコマンドは読み出しコマンドの実行に対する影響を軽減するときに、メモリーに送られる。【選択図】  図２
2006309757.tif 000002
【特許請求の範囲】
【請求項１】
書き込みキューにあるコマンドの数が第１閾値より大きいかどうかを判別する工程と、
判別が真なら、コンフリクトキューにあるすべてのコマンドが第２閾値のサイクル数よりも短い間コンフリクトキューに存在していたかどうかを決定する工程と、
決定が真なら、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドを選択する工程と、
を含む方法。
【請求項２】
さらに、
コンフリクトキューにあるコマンドのいずれとも衝突しない最も古いコマンドを書き込みキューからメモリーに送る工程を含む、請求項１に記載の方法。
【請求項３】
さらに、
コンフリクトキューにあるコマンドのいずれとも衝突しない最も古いコマンドをコンフリクトキューに追加する工程を含む、請求項２に記載の方法。
【請求項４】
選択する工程がさらに、
書き込みキューにある最も古いコマンドがコンフリクトキューにあるコマンドのいずれかと同じメモリーのキャッシュラインにアクセスするかどうかを判別する工程を含む、請求項１に記載の方法。
【請求項５】
コンフリクトキューが以前にメモリーに送られたコマンドを含む、請求項１に記載の方法。
【請求項６】
判別する工程がさらに、
読み出しキューにあるすべてのコマンドがコンフリクトキューと衝突するかどうかを判別する工程を含む、請求項１に記載の方法。
【請求項７】
判別する工程がさらに、
プロセッサから入ってくる読み出しコマンドが書き込みキューと衝突するかどうかを判別する工程を含む、請求項１に記載の方法。
【請求項８】
書き込みキューと、
書き込みキューにあるコマンドの数が第１閾値より大きく、かつコンフリクトキューにあるすべてのコマンドが第２閾値のサイクル数よりも短い間コンフリクトキューに存在していた場合、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドをメモリーに送るコンフリクトキューと、
を具備するメモリーコントローラー。
【請求項９】
コンフリクトキューが最も古いコマンドをメモリーに送る場合、最も古いコマンドをコンフリクトキューに追加する、請求項８のメモリーコントローラー。
【請求項１０】
コンフリクトキューがさらに、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドが、コンフリクトキューにあるコマンドのいずれとも同じメモリー内のキャッシュラインにアクセスしないことを判定する、請求項８のメモリーコントローラー。
【請求項１１】
コンフリクトキューが以前にメモリーに送られたコマンドを含む、請求項８のメモリーコントローラー。
【請求項１２】
コンフリクトキューがさらに、読み出しキューにあるすべてのコマンドがコンフリクトキューと衝突するかどうかに基づいて、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドをメモリーに送る、請求項８のメモリーコントローラー。
【請求項１３】
コンフリクトキューが、プロセッサから入ってくる読み出しコマンドが書き込みキューと衝突しないかどうかに基づいて、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドをメモリーに送る、請求項８のメモリーコントローラー。
【請求項１４】
プロセッサと、
メモリーと、
プロセッサからコマンドを受信するメモリーコントローラーとを具備し、メモリーコントローラーが、
書き込みキューと、
書き込みキューにあるコマンドの数が第１閾値より大きく、かつコンフリクトキューにあるすべてのコマンドが第２閾値のサイクル数よりも短い間コンフリクトキューに存在していた場合、コンフリクトキューにあるコマンドのいずれにも衝突しない書き込みキューにある最も古いコマンドをメモリーに送るコンフリクトキューとを具備する、コンピュータシステム。
【請求項１５】
コンフリクトキューが最も古いコマンドをメモリーに送る場合、最も古いコマンドをコンフリクトキューに追加する、請求項１４のコンピュータシステム。
【請求項１６】
コンフリクトキューがさらに、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドがコンフリクトキューにあるコマンドのいずれとも同じメモリーのキャッシュラインにアクセスしないことを判定する、請求項１４のコンピュータシステム。
【請求項１７】
コンフリクトキューが、メモリーコントローラーが以前にメモリーに送ったコマンドを含む、請求項１４のコンピュータシステム。
【請求項１８】
コンフリクトキューがさらに、読み出しキューがコンフリクトキューと衝突するかどうかに基づいて、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドをメモリーに送る、請求項１４のコンピュータシステム。
【請求項１９】
コンフリクトキューが、プロセッサから入ってくる読み出しコマンドが書き込みキューと衝突しないかどうかに基づいて、コンフリクトキューにあるコマンドのいずれとも衝突しない書き込みキューにある最も古いコマンドをメモリーに送る、請求項１４のコンピュータシステム。
【請求項２０】
メモリーコントローラーがさらに第１レジスタと第２レジスタを具備し、メモリーコントローラーがさらに第１閾値を第１レジスタに記憶し、第２閾値を第２レジスタに記憶する、請求項１４のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にコンピュータシステムに関係し、より具体的にはメモリーにコマンドを送るメモリーコントローラーに広く関係する。
【背景技術】
【０００２】
コンピュータ時代の幕開けとして１９４８年のＥＤＶＡＣコンピュータシステムの開発がよく挙げられる。それ以来コンピュータシステムは極めて高度な機器に進化し、様々な環境で見られるようになった。コンピュータシステムは一般的にハードウェア（例、半導体、回路基板など）とソフトウェア（例、コンピュータプログラム）の組合せを含む。半導体プロセスとコンピュータアーキテクチャの進歩によりコンピュータのハードウェアの性能が向上するとともに、より高度になったコンピュータのソフトウェアは向上したハードウェアの性能を活かすように進化した結果、現在のコンピュータシステムはほんの数年前よりもはるかにパワフルなものになっている。
【０００３】
コンピュータシステムのコンポーネントの中で、コンピュータシステムの性能に甚大な影響を与えるものがメモリーサブシステムである。コンピュータシステムは一般に、プロセッサバスを介してメモリーサブシステムに連結されるひとつ又は複数のプロセッサを含む。メモリーサブシステムは一般に、メモリーデータバスと対応の制御信号を介してひとつ又は複数のシンクロナス・ダイナミック・ランダムアクセスメモリー（ＳＤＲＡＭ）に連結されるメモリーコントローラーを有する。メモリーコントローラーの役割は、プロセッサからのメモリーの読み書き（ロードと記憶）コマンド又は要求の受付、読み書きコマンドの実行のためのＳＤＲＡＭとのインターフェース、ＳＤＲＡＭからプロセッサへの読み出し操作に関連するデータの返送である。メモリーコントローラーはメモリーバンクのタイミング管理、メモリーデータバス利用の最大化、可能な場合に書き込みより読み出しを優先するなどメモリーアクセスの最適化といったタスクも行う。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
メモリーアクセスの最適化は、コンピュータシステムの性能を高める上での根本的な問題となっている。メモリーコントローラーで苦労しているメモリーアクセスの問題のひとつが、読み出しコマンド対書き込みコマンドの選択である。命令を実行し続けるためにプロセッサは読み出しデータを待たなければならなかったり、又はプロセッサは読み出しデータを先取りすることによってメモリーの待ち時間を隠そうとするために、一般的に、システムの性能にとって制限要素となるのは読み出しコマンドである。プロセッサがメモリーコントローラーに書き込みデータを送るとすぐにプロセッサは書き込みコマンドが完了したと考えるため、書き込みコマンドは一般には読み出しコマンドほど重大な問題ではない。しかし、メモリーコントローラーは、書き込みコマンドとデータを入れておくバッファ（又はキュー）の数が決まっている。バッファがほぼいっぱいになると、メモリーコントローラーは新たなコマンドを受け取れないという信号をプロセッサに送る必要があり、メモリーコントローラーで書き込みキューがオーバーフローするおそれがあるため、バスを機能停止する。この機能停止のためにプロセッサの全コマンドに余分な遅延が生じることがある。このように、書き込みコマンドが読み出しコマンドの実行の問題となることがある。
【０００５】
このため、性能を高められるように、書き込みコマンドをメモリーに送る適切なタイミングを選ぶためのより優れた方法が必要である。
【課題を解決するための手段】
【０００６】
実施例において、メモリーに送るコマンドを選択する方法、機器、メモリーコントローラー、システム、および信号担持媒体が提供される。実施例において、次にあげる条件の一部もしくは全部が真なら、コンフリクトキューと衝突しない書き込みキューにある最も古いコマンドをメモリーに送って、コンフリクトキューに追加する。条件とは、読み出しキューにあるコマンド全部がコンフリクトキューと衝突する、プロセッサから入ってきた読み出しコマンドのいずれも書き込みキューと衝突しない、書き込みキューのコマンド数が第１閾値より大きい、コンフリクトキューにある全コマンドは第２閾値よりも短い時間存在してる、である。実施例において、コマンドがあるキューのコマンドと同じメモリーのキャッシュラインにアクセスしない場合、そのコマンドはキューと衝突しない。このように、実施例では、読み出しコマンドの性能に対する影響を軽減するときに、書き込みコマンドをメモリーに送る。
【発明を実施するための最良の形態】
【０００７】
複数の図で同じ番号は同じ部分を示す図面を参照して、図１は、本発明の実施例に従い、ネットワーク１３０を介してサーバーコンピュータシステム１３２に接続されるコンピュータシステム１００を表すブロック図を示す。「コンピュータシステム」と「サーバー」という表現は単に便宜上使用しており、ある実施例では、あるコンピュータにとってはクライアントとして機能するコンピュータが別のコンピュータにとってはサーバーとして機能したり、またその逆のこともあり、何らかの適切な電子機器を使用することもある。ある実施例では、コンピュータシステム１００のハードウェアコンポーネントは、ＩＢＭ社のｅＳｅｒｖｅｒ（Ｒ）、ｉＳｅｒｉｅｓ（Ｒ）又はｐＳｅｒｉｅｓ（Ｒ）コンピュータシステムで実施できる。しかし、本発明の実施例のメカニズムや機器がどのような適切なコンピューティングシステムにも等しく適用されることは、当業者には理解されよう。
【０００８】
コンピュータシステム１００の主要コンポーネントには、ひとつ又は複数のプロセッサ１０１、メインメモリー１０２、メモリーコントローラー１０６、端末インターフェース１１１、ストレージインターフェース１１２、Ｉ／Ｏ（入出力）デバイスインターフェース１１３、通信／ネットワークインターフェース１１４が含まれ、そのすべてをコンポーネント間の通信のためにメモリーバス１０３、Ｉ／Ｏバス１０４、Ｉ／Ｏバスインターフェースユニット１０５を介して接続する。
【０００９】
コンピュータシステム１００はひとつ又は複数のプログラム可能な中央処理装置（ＣＰＵ）１０１Ａ、１０１Ｂ、１０１Ｃ、１０１Ｄを備え、ここでは総称的にプロセッサ１０１という。プロセッサ１０１は汎用プロセッサ、特定用途用プロセッサまたはステートマシンでよく、バス１０３を介してメモリーコントローラー１０６と接続して、メモリー１０２にアクセスするためのロードおよび記憶（読み書き）コマンドなどのコマンドを出す。ある実施例では、コンピュータシステム１００は比較的大型のシステムに特徴的なマルチプロセッサを含む。しかし、別の実施例では、コンピュータシステム１００は代わりに単一ＣＰＵシステムでもよい。各プロセッサ１０１はメインメモリー１０２に記憶された命令を実行し、ひとつ又は複数のレベルのオンボードキャッシュを備えることが可能である。
【００１０】
メインメモリー１０２は、データやプログラムを記憶するためのランダムアクセス半導体メモリーである。別の実施例では、メインメモリー１０２はコンピュータシステム１００の仮想メモリー全体を表し、コンピュータシステム１００に結合されるあるいはネットワーク１３０を介して接続される他のコンピュータシステムの仮想メモリーを含むことも可能である。メインメモリー１０２は概念的には単一モノリシック体であるが、他の実施例ではメインメモリー１０２はキャッシュと他のストレージの階層などより複雑な構成である。例えば、メモリーを多層レベルのキャッシュで構成して、このキャッシュをさらに機能別に分割し、あるキャッシュが命令を保持する一方で別のキャッシュが命令以外のデータを保持するようにして、ひとつ又は複数のプロセッサで使うことができる。メモリーはさらにいわゆる非均一メモリーアクセス（ＮＵＭＡ）コンピュータアーキテクチャで知られるように、様々なＣＰＵまたはＣＰＵセットに分散させて、対応付けることができる。様々な実施例において、メモリー１０２はどのレベルのキャッシュ又はメインメモリーであってもよい。ある実施例でメモリー１０２はＤＲＡＭ（動的ランダムアクセスメモリー）として実装されるが、他の実施例では適切なメモリー技術ならどれでも使用できる。
【００１１】
メモリーコントローラー１０６とメモリー１０２とのインターフェースは、一般に、リードアドレスストローブ（ＲＡＳ）やカラムアドレスストローブ（ＣＡＳ）など、メモリーコントローラー１０６によってデータラインおよびデータストローブをもつ双方向データバスを介してメモリーに向かうコマンド信号から構成される。メモリーコントローラー１０６が駆動する各コマンド信号は一般に多数の待ち時間サイクルを伴う。さらに、コマンドが例えばメモリのエクステントのあるバンクで実行されると、通常そのバンクが別の操作を行えるようになるまでに、バンクは回復するための追加サイクルを要する。例えば、読み出し又はロードを実施するには、メモリーコントローラー１０６はバンクを開放して、読み出しコマンドを出し、ＣＡＳ待ち時間のために必要なサイクルを待ち、メモリーからひと固まりのデータを受け取る。データがメモリーコントローラーにバースト転送されたら、バンクはロードに関連する内部バスの行をプリチャージするのに数サイクル要する。
【００１２】
ある実施例では、メモリーコントローラー１０６はプロセッサ（プロセッサ１０１と同様）と、そのプロセッサで実行できる命令もしくはそのプロセッサで実行できる命令が解釈できるステートメントを含み、図３、図４、および図５を参照して以下詳細に説明する機能を行う。別の実施例では、メモリーコントローラー１０６はマイクロコード又はファームウェアで実装できる。別の実施例では、メモリーコントローラー１０６は論理ゲートまたは他の適切なハードウェア技術によりハードウェアで実装できる。メモリーコントローラー１０６は図２を参照して以下詳細に説明する。
【００１３】
メモリーバス１０３は、プロセッサ１０１、メモリーコントローラー１０６、およびＩ／Ｏバスインターフェースユニット１０５の間でデータを転送するためのデータ通信経路を提供する。Ｉ／Ｏバスインターフェースユニット１０５はさらに、様々なＩ／Ｏユニットとデータをやり取りするためにシステムＩ／Ｏバス１０４に接続される。Ｉ／Ｏバスインターフェースユニット１０５は、Ｉ／Ｏプロセッサ（ＩＯＰ）またはＩ／Ｏアダプタ（ＩＯＡ）としても知られる複数のＩ／Ｏインターフェースユニット１１１、１１２、１１３、および１１４とシステムＩ／Ｏバス１０４を通して通信する。システムＩ／Ｏバス１０４は、例えば業界標準のＰＣＩバスや、他の適切なバス技術でもよい。
【００１４】
Ｉ／Ｏインターフェースユニットは多様なストレージおよびＩ／Ｏデバイスとの通信をサポートする。例えば、端末インターフェースユニット１１１は、ひとつ又は複数のユーザー端末１２１、１２２、１２３、および１２４の接続をサポートする。ストレージインターフェースユニット１１２は、ひとつ又は複数の直接アクセスストレージデバイス（ＤＡＳＤ）１２５、１２６、および１２７（これを、例えばホストからは単一の大容量ストレージに見えるように構成されたディスクドライブのアレイなど他のデバイスに代えることもできるであろうが、一般には回転磁気ディスクドライブのストレージデバイスである）の接続機構をサポートする。メインメモリー１０２の内容は、直接アクセスストレージデバイス１２５、１２６、および１２７に記憶し、そこから取り出すことができる。
【００１５】
Ｉ／Ｏその他のデバイスのインターフェース１１３は、様々な他の入出力デバイスまたは他の種類のデバイスへのインターフェースを提供する。そのようなデバイスとしてプリンター１２８とファックス機１２９の２台を図１の例示的な実施例では示しているが、他の実施例ではその他のデバイスが数多く存在でき、また別の種類でもよい。ネットワークインターフェース１１４は、コンピュータシステム１００から他のデジタルデバイスおよびコンピュータシステムへのひとつ又は複数の通信経路を提供する。そのような経路は、例えばひとつ又は複数のネットワーク１３０を含むことができる。
【００１６】
図１ではメモリーバス１０３は、プロセッサ１０１、メモリーコントローラー１０６、およびＩ／Ｏバスインターフェース１０５の間の直接通信経路を提供する比較的簡単な単一バス構造として示されているが、メモリーバス１０３は実際には複数の異なるバスまたは通信経路から構成でき、また階層構成、スター構成、もしくは網状構成の二点間リンク、多重階層バス、パラレル経路、冗長経路、または他の種類の構成など様々な形態のいずれで構成してもよい。さらに、Ｉ／Ｏバスインターフェース１０５とＩ／Ｏバス１０４はそれぞれ単体として示されているが、コンピュータシステム１００は実際には複数のＩ／Ｏバスインターフェース１０５およびＩ／Ｏバス１０４を含むことができる。システムＩ／Ｏバス１０４を様々なＩ／Ｏデバイスに至る様々な通信経路から分離している複数のＩ／Ｏインターフェースユニットが示されているが、他の実施例ではＩ／Ｏデバイスの一部または全部が直接ひとつ又は複数のシステムＩ／Ｏバスに接続される。
【００１７】
図１に図示されるコンピュータシステム１００は、マルチユーザー「メインフレーム」コンピュータシステムに特徴的といえるような複数の接続端末１２１、１２２、１２３、１２４を有する。本発明はある特定のサイズのシステムに限定されるものではないが、一般に、このような場合、接続デバイスの実際の数は図１に示すものよりも多い。コンピュータシステム１００は代わりに一般にシングルユーザー用ディスプレイおよびキーボード入力しか備えないシングルユーザーシステムでもよく、あるいは直接ユーザーインターフェースをほとんどもしくは全くもたず、他のコンピュータシステム（クライアント）からの要求を受け取るサーバー又は類似のデバイスでもよいだろう。他の実施例では、コンピュータシステム１００はパーソナル・コンピュータ、ポータブル・コンピュータ、ラップトップ又はノートブック型コンピュータ、ＰＤＡ（個人用携帯情報端末）、タブレットコンピュータ、ポケットコンピュータ、電話、ページャ、オートモバイル、遠隔会議システム、アプライアンス、又は他の適切な種類の電子機器として実装できる。
【００１８】
ネットワーク１３０は適当なネットワーク又はネットワークの組合せならどれでもでよく、コンピュータシステム１００とサーバー１３２の間でのデータまたはコードの通信に適した適切なプロトコルをサポートする。様々な実施例において、ネットワーク１３０はコンピュータシステム１００に直接もしくは間接的に接続されるストレージデバイス又はストレージデバイスの組合せを表すことがある。ある実施例では、ネットワーク１３０はインフィニバンドをサポートする。別の実施例では、ネットワーク１３０は無線通信をサポートする。別の実施例では、ネットワーク１３０は電話線やケーブルなどの有線通信をサポートする。別の実施例では、ネットワーク１３０はイーサーネットＩＥＥＥ８０２．３ｘの仕様をサポートする。別の実施例では、ネットワーク１３０はインターネットであり、ＩＰ（インターネットプロトコル）をサポートする。
【００１９】
別の実施例では、ネットワーク１３０はローカルエリアネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）である。別の実施例では、ネットワーク１３０はホットスポットサービスプロバイダーネットワークである。別の実施例では、ネットワーク１３０はイントラネットである。別の実施例では、ネットワーク１３０はＧＰＲＳ（汎用パケット無線サービス）ネットワークである。別の実施例では、ネットワーク１３０はＦＲＳ（ファミリー無線サービス）ネットワークである。別の実施例では、ネットワーク１３０は適切なセルラーデータネットワーク又はセルベースの無線ネットワーク技術である。別の実施例では、ネットワーク１３０はＩＥＥＥ  ８０２．１１Ｂワイヤレスネットワークである。さらに別の実施例では、ネットワーク１３０は適当なネットワーク又はネットワークの組合せならどれでもよい。１つのネットワーク１３０を図示しているが、別の実施例では任意の数（ゼロを含む）のネットワーク（同種または異種）が存在できる。
【００２０】
図１はコンピュータシステム１００、ネットワーク１３０、およびサーバー１３２の代表的な主要コンポーネントを上位概念で描くことを意図している。個々のコンポーネントは図１に表すものより複雑であることもあり、図１に示すもの以外のコンポーネントまたは図１に示すものに追加したコンポーネントが存在することもある。また、コンポーネントの数、種類、構成は変わることがある。複雑さを加えたり、変化を加えたいくつかの例を本明細書に開示する。これらは単なる例示であり、そのような変型例に限られるものではない。
【００２１】
図１に図示する様々なソフトウェアコンポーネントと本発明の様々な実施例は、様々なコンピュータソフトウェアアプリケーション、ルーチン、コンポーネント、プログラム、オブジェクト、モジュール、データ構造など（これ以降「コンピュータプログラム」又は単に「プログラム」と呼ぶ）の使用を含め、多数の方法で実施できる。コンピュータプログラムは一般に、コンピュータシステム１００の様々なメモリーおよびストレージデバイスに様々な時に存在し、コンピュータシステム１００のひとつ又は複数のプロセッサ１０１で読み出して実行すると、本発明の実施例の様々な側面を構成するステップまたはエレメントを実行するのに必要なステップをコンピュータシステム１００に行わせるひとつ又は複数の命令を含む。
【００２２】
さらに、本発明の実施例は十分に機能するコンピュータシステムに関連して説明しており、またこれ以降説明するが、本発明の様々な実施例は多様な形態のプログラム製品として配布でき、本発明は実際に配布を行うのに使用される特定の種類の信号担持媒体とは関係なく同様に適用される。本実施例の機能を定義するプログラムは、多様な信号伝達媒体を介してコンピュータシステム１００に引き渡すことができ、これは以下のものを含むが、それだけに限定されない。
（１）例えばＣＤ−ＲＯＭ、ＤＶＤ−Ｒ、又はＤＶＤ＋Ｒなどコンピュータシステムに接続するもしくは内蔵される読取専用メモリーデバイスなど、書き換えできない記憶媒体に永久に記憶される情報、
（２）例えばハードディスクドライブ（例、ＤＡＳＤ  １２５、１２６、又は１２７）、ＣＤ−ＲＷ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、ＤＶＤ−ＲＡＭ、又はフレキシブルディスクなど書き換え可能な記憶媒体に記憶される書き直し可能な情報、又は
（３）例えばネットワーク１３０などコンピュータまたは電話網を経由するなど、無線通信を含めた通信媒体により伝送される情報
このような信号担持媒体は、本発明の機能を指図する機械読取可能な命令を載せるとき、本発明の実施例を表す。
【００２３】
本発明の実施例は、顧客企業、非営利組織、政府機関、内部組織構造などとのサービス提携の一部としても引渡すことができる。これら実施例の側面は、本明細書に記載の方法の一部もしくは全部を行うコンピュータシステムを構成すること、ならびに本明細書に記載の方法の一部もしくは全部を実装するソフトウェアシステムおよびウエブサービスを展開することを含むことがある。これら実施例の側面は、顧客企業の分析、分析に応じた推奨事項の作成、推奨事項の一部を実施するソフトウェアの作成、既存のプロセスおよびインフラストラクチャーへのソフトウェアの統合、本明細書に記載の方法およびシステムの使用の計量、ユーザーへの費用の計上、ならびに本方法およびシステムの使用に対するユーザーへの代金請求も含むことがある。
【００２４】
さらに、これ以降説明する様々なプログラムは、本発明のある特定の実施例で実装するアプリケーションに基づいて識別できる。しかし、以下の特定のプログラムラベルは単なる便宜上のために使っており、そのため本発明の実施例はそのようなラベルで識別または黙示される特定のアプリケーションでのみの使用に限定されるものではない。
【００２５】
図１に図示する例示的な環境は、本発明を制限することを意図していない。事実、本発明の範囲を逸脱することなく、他の代替ハードウェア環境もしくはソフトウェア環境またはその両方で使用できる。
【００２６】
図２は、発明のある実施例に従った例示的なメモリーコントローラー１０６のブロック図である。メモリーコントローラー１０６は読み出しキュー２０５と、書き込みキュー２１０と、コンフリクトキュー２１５と、少量書き込み要求レジスタ２２０と、少量書き込みサイクルレジスタ２２５と、少量書き込みサイクル要求レジスタ２３０とを備える。少量書き込み要求レジスタ２２０、少量書き込みサイクルレジスタ２２５、または少量書き込みサイクル要求レジスタ２３０の値はメモリーコントローラー１０６の設計者が設定でき、またはメモリーコントローラー１０６はコンピュータ１００のユーザーもしくはシステム管理者から、コンピュータ１００の適切なハードウェアもしくはソフトウェアから、またはネットワーク１３０を介して値を受け取れる。
【００２７】
読み出しキュー２０５は、プロセッサ１０１から受け取って、メモリーコントローラー１０６がまだメモリー１０２に送っていない読み出しコマンドを記憶する。書き込みキュー２１０は、プロセッサ１０１から受け取って、メモリーコントローラー１０６がまだメモリー１０２に送っていない書き込みコマンドを記憶する。コンフリクトキュー２１５は、メモリーコントローラー１０６が以前にメモリー１０２に送ったが、コマンドが送られてからの時間がまだ閾値に達していない読み書き両方のコマンドを記憶する。コンフリクトキュー２１５はさらに、図３、図４、および図５を参照して以下詳しく説明する機能を行うプロセッサで実行できる論理又は命令を含む。
【００２８】
少量書き込み要求レジスタ２２０はプロセッササイクル数、クロックサイクル数、又は閾値時間を記憶し、コンフリクトキュー２１５がそれと書き込みキュー２１０にあるコマンドの数とを比較する。書き込みキュー２１０にあるコマンドの数が少量書き込み要求レジスタ２２０の値を超えると、図４を参照して以下詳しく説明するように、コンフリクトキュー２１５は少量書き込み要求モードになる。
【００２９】
少量書き込みサイクルレジスタ２２５はプロセッササイクル数、クロックサイクル数、又は閾値時間を記憶し、コンフリクトキュー２１５がそれとコンフリクトキュー２１５にコマンドが存在していたプロセッササイクル数、クロックサイクル数、又は時間とを比較する。少量書き込みサイクルレジスタ２２５の値が、コンフリクトキュー２１５にコマンドが存在していたサイクル数又は時間を超えると、図４を参照して以下詳しく説明するように、コンフリクトキュー２１５はコンフリクトキュー２１５と衝突していない書き込みキュー２１０にある最も古い書き込みコマンドをメモリー１０２に送る。コマンドがキューと衝突するのは、そのコマンドとキューにあるコマンドのうち少なくとも１つがメモリー１０２の同じキャッシュラインにアクセスする場合である。コマンドがメモリー１０２のキューにあるすべてのコマンドと同じキャッシュラインにアクセスしない場合、コマンドはキューと衝突しない。
【００３０】
少量書き込みサイクル要求レジスタ２３０はプロセッササイクル数、クロックサイクル数、又は閾値時間を記憶し、コンフリクトキュー２１５がそれとコンフリクトキュー２１５にコマンドが存在していたプロセッササイクル数、クロックサイクル数、又は時間とを比較する。少量書き込みサイクル要求レジスタ２３０の値が、コンフリクトキュー２１５にコマンドが存在していたサイクル数又は時間を超えると、図５を参照して以下詳しく説明するように、コンフリクトキュー２１５はコンフリクトキュー２１５と衝突していない書き込みキュー２１０にある最も古い書き込みコマンドをメモリー１０２に送る。
【００３１】
様々な別の実施例では、少量書き込み要求レジスタ２２０、少量書き込みサイクルレジスタ２２５または少量書き込みサイクル要求レジスタ２３０は、メモリーコントローラー１０６内の記憶場所として実装できる。
【００３２】
図３は、本発明の実施例に従うメモリーコントローラー１０６の例示的なプロセスのフローチャートを示す。図３に図示する例示的な論理は、メモリーコントローラー１０６のプロセッササイクルごと、又はクロックサイクルごとに行われる。制御はブロック３００から始まる。制御はさらにコンフリクトキュー２１５が、書き込みキュー２１０にある書き込みコマンドの数が書き込みキューの閾値を超えるかどうかを判定するブロック３０５に続く。ブロック３０５での判定が真なら、書き込みキュー２１０にある書き込みコマンドの数が書き込みキューの閾値を超えているため、コンフリクトキュー２１５が最も古い書き込みコマンドを書き込みキュー２１０からメモリー１０２に送って、その書き込みコマンドをコンフリクトキュー２１５に追加するブロック３１０に制御が続く。制御はさらにブロック３９８に続き、そこで図３の論理はリターンする。
【００３３】
ブロック３０５での判定が偽なら、書き込みキュー２１０にある書き込みコマンドの数は書き込みキューの閾値を超えていないので、制御はブロック３０５から、コンフリクトキュー２１５がプロセッサ１０１から入ってくる読み出しコマンドが書き込みキュー２１０のコマンドのいずれとも衝突していないかどうかを判定するブロック３１５に続く。入ってくる読み出しコマンドが書き込みキュー２１０のコマンドと衝突するのは、両コマンドがメモリー１０２の同じキャッシュラインにアクセスしようとする場合である。
【００３４】
ブロック３１５での判定が真なら、入ってくる読み出しコマンドは書き込みキュー２１０と衝突するので、コンフリクトキュー２１５が入ってくる読み出しコマンドと衝突する書き込みコマンドを書き込みキュー２１０からメモリー１０２に送って、書き込みコマンドをコンフリクトキュー２１５に追加するブロック３２０に制御が続く。制御はさらにブロック３９８に続き、そこで図３の論理はリターンする。
【００３５】
ブロック３１５での判定が偽なら、入ってくる読み出しコマンドが書き込みキュー２１０の書き込みコマンドと衝突しないので、制御はブロック３１５から、コンフリクトキュー２１５が読み出しキュー２０５にあるいずれの読み出しコマンドもコンフリクトキュー２１５にあるコマンドと衝突せずに存在するかどうかを判定するブロック３２５に続く。
【００３６】
ブロック３２５での判定が真なら、読み出しコマンドはコンフリクトキュー２１５と衝突せずに読み出しキュー２０５に存在するので、コンフリクトキュー２１５が書き込みキュー２１０にあるすべての書き込みコマンドと衝突しない読み出しキュー２０５にある最も古い読み出しコマンドをメモリー１０２に送って、この読み出しコマンドをコンフリクトキュー２１５に追加するブロック３３０に制御が続く。制御はさらにブロック３９９に続いて、そこで図３の論理はリターンする。
【００３７】
ブロック３２５での判定が偽なら、読み出しキュー２０５にあるすべての読み出しコマンドはコンフリクトキュー２１５にある少なくとも１つのコマンドと衝突するので、以下詳しく説明するように、図４の論理を実行するブロック３３５に制御が続く。制御はさらにブロック３９９に続き、そこで図３の論理はリターンする。
【００３８】
図４は、本発明の実施例に従ったメモリーコントローラー１０６の別の例示的なプロセスのフローチャートを示す。制御はブロック４００から始まる。制御は、コンフリクトキュー２１５が書き込みキュー２１０にあるコマンドの数が少量書き込み要求レジスタ２２０の値よりも大きいかどうかを判定するブロック４０５に続く。ブロック４０５での判定が真なら、書き込みキュー２１０にあるコマンドの数が少量書き込み要求レジスタ２２０の値よりも大きいので、以下詳しく説明するように、図５の論理を実行するブロック４１０に制御が続く。制御はさらにブロック４９９に続き、そこで図４の論理はリターンする。
【００３９】
ブロック４０５での判定が偽なら、書き込みキュー２１０にあるコマンド数は少量書き込み要求レジスタ２２０の値より大きくないので、制御はブロック４０５から、コンフリクトキュー２１５が、コンフリクトキュー２１５にあるすべてのコマンドについて、コマンドのすべてがコンフリクトキュー２１５に存在していたプロセッササイクル数、クロックサイクル数、又は時間のタイマー値よりも少量書き込みサイクルレジスタ２２５が大きいかどうかを判定するブロック４１５に続く。ある実施例では、コンフリクトキュー２１５に記憶されるすべてのコマンドが、コマンドがコンフリクトキュー２１５に存在している時間又はサイクル数を追跡する個別の付属タイマーを有する。
【００４０】
ブロック４１５での判定が真なら、少量書き込みサイクルレジスタ２２５の値はすべてのコマンドがコンフリクトキュー２１５に存在していたサイクル数又は時間より大きいので、コンフリクトキュー２１５がコンフリクトキュー２１５と衝突しないで書き込みキュー２１０にある最も古い書き込みコマンド（最も長時間存在している書き込みコマンド）をメモリー１０２に送って、その書き込みコマンドをコンフリクトキュー２１５に追加するブロック４２０に制御が続く。制御はさらにブロック４９９に続き、そこで図４の論理はリターンする。
【００４１】
ブロック４１５での判定が偽なら、少量書き込みサイクルレジスタ２２５の値はコマンドのすべてがコンフリクトキュー２１５に存在していたサイクル数又は時間より大きくないので、制御はブロック４１５からブロック４９９に続き、そこで図４の論理はリターンする。
【００４２】
図５は、本発明の実施例に従ったメモリーコントローラー１０６の別の例示的なプロセスのフローチャートを示す。制御はブロック５００から始まる。制御はブロック５０５に続き、コンフリクトキュー２１５が、コンフリクトキュー２１５にあるすべてのコマンドについて、少量書き込みサイクル要求レジスタ２３０の値がコマンドがコンフリクトキュー２１５に存在していたプロセッササイクル数、クロックサイクル数、又は時間のタイマー値を超えるかどうかを判定する。
【００４３】
ブロック５０５での判定が真なら、少量書き込みサイクル要求レジスタ２３０の値はすべてのコマンドがコンフリクトキュー２１５に存在していたサイクル数を超えるので、制御はブロック５１０に続き、そこでコンフリクトキュー２１５がコンフリクトキュー２１５と衝突しない書き込みキュー２１０にある最も古い書き込みコマンドをメモリー１０２に送ってその書き込みコマンドをコンフリクトキュー２１５に追加する。制御はさらにブロック５９９に続き、そこで図５の論理はリターンする。
【００４４】
ブロック５０５での判定が偽なら、少量書き込みサイクル要求レジスタ２３０の値はすべてのコマンドがコンフリクトキュー２１５に存在していたサイクル数を超えないので、制御はブロック５９９に続き、そこで図５の論理はリターンする。
【００４５】
このように、実施例では、書き込みキュー２１０がほぼいっぱいなら書き込みコマンドは書き込みキュー２１０からメモリー１０２に送られるだけなので、読み出しコマンドの実行に対する書き込みコマンドの影響は減る。措置を講じなければ、バス１０３の機能停止が起こる可能性があるだろう。
【００４６】
前述の本発明の例示的な実施例の詳細な説明において、添付図面を参照したが（図面において同じ番号は同じ要素を表す）、これは本明細書の一部をなし、例示によって本発明を実施できる具体的に例示的な実施例を示す。これら実施例は、当業者が本発明を実施できるのに十分な詳細さで説明したが、本発明の範囲を逸脱することなく他の実施例を利用して、論理的、機械的、電気的、およびその他の変更も行える。本明細書で「実施例」という言葉を別の場で使うときは必ずしも同じ実施例を述べているわけではないが、同じ場合もある。そのため前述の詳細な説明は、制限的な意味合いで捉えるべきではなく、本発明の範囲は付属の請求項によってのみ定義される。
【００４７】
前述の説明では、本発明の実施例を十分に理解できるように多数の特定の詳細を述べた。しかし、本発明はこれら特定の詳細によらず実施できる。他の場合、本発明を曖昧にしないように、周知の回路、構造、および技術は示していない。
【図面の簡単な説明】
【００４８】
【図１】発明のある実施例を実施するための例示的なシステムを示す高次のブロック図。
【図２】発明のある実施例に従った例示的なメモリーコントローラーを示すブロック図。
【図３】発明のある実施例に従ったメモリーコントローラーの例示的なプロセスを示すフローチャート。
【図４】発明のある実施例に従ったメモリーコントローラーの別の例示的なプロセスを示すフローチャート。
【図５】発明のある実施例に従ったメモリーコントローラーの別の例示的なプロセスを示すフローチャート。
【図１】
2006309757.tif 000003
【図２】
2006309757.tif 000004
【図３】
2006309757.tif 000005
【図４】
2006309757.tif 000006
【図５】
2006309757.tif 000007