(57)【要約】【課題】  ページ・フォールト解決法を提供する。【解決手段】  実効又は仮想アドレスと関連付けられたページ・フォールトを処理する際、ソフトウェア・ページ・フォールト・ハンドラが使用する実効又は仮想アドレス内の未使用及び予約済みフィールドにページ・サイズ・ヒントを符号化し、アプリケーションが、メモリのページの割り当てのためのページ・サイズ・プリファレンスをオペレーティング・システム又は他のソフトウェア・ベースの変換機能に伝達すること、及び／又は、ハードウェア・ページ・テーブル内のページ・テーブル・エントリの検索を加速することを可能にすることができる。【選択図】      図５
2019523920.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリ・ページ・サイズをサポートするタイプのデータ処理システムにおいてページ・フォールトを処理する方法であって、
プロセッサのハードウェア変換論理により発生し、前記プロセッサが実行するプログラム・コードにより要求される仮想アドレスと関連付けられたページ・フォールトを検出することと、
前記仮想アドレスから、前記仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断することと、
前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについてのソフトウェア・アドレス変換動作を実行することと、
を含む方法。
【請求項２】
前記ページ・サイズ・ヒントは、前記プログラム・コードを実行する前に前記未使用及び予約済みフィールドに符号化される、請求項１に記載の方法。
【請求項３】
前記ページ・サイズ・ヒントは、前記プログラム・コードのコンパイル、リンク、デプロイ、又はインストール中に前記未使用及び予約済みフィールドに符号化される、請求項２に記載の方法。
【請求項４】
前記ハードウェア変換論理は、第１及び第２のモードで動作するように構成可能であり、前記第１のモードにおいて、前記ハードウェア変換論理は、前記仮想アドレスの前記未使用及び予約済みフィールド内の１つ又は複数の値に応答して不正なアドレス通知を生成し、前記第２のモードにおいて、前記仮想アドレスの前記未使用及び予約済みフィールド内の前記１つ又は複数の値に応答した前記ハードウェア変換論理による前記不正なアドレス通知の生成がディスエーブルにされ、前記方法は、前記第２のモードにおいて前記ハードウェア変換論理を構成することをさらに含む、請求項１に記載の方法。
【請求項５】
前記ハードウェア変換論理は、前記第１のモードにおいて、前記仮想アドレスの前記未使用及び予約済みフィールド内の非ゼロ値に応答して不正なアドレス通知を生成するように構成される、請求項４に記載の方法。
【請求項６】
利用可能なメモリに基づいて、前記判断したページ・サイズ・ヒントに対応するページ・サイズを選択的に割り当てることをさらに含む、請求項１に記載の方法。
【請求項７】
前記ページ・サイズ・ヒントを判断することは、ハードウェア・ページ・テーブルの１つ又は複数のデータ構造を検索する前に実行され、前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについての前記ソフトウェア・アドレス変換動作を実行することは、前記判断したページ・サイズ・ヒントを用いて前記１つ又は複数のデータ構造にアクセスすることを含む、請求項１に記載の方法。
【請求項８】
前記１つ又は複数のデータ構造は、特定のページ・サイズのページについてのアドレス変換情報を格納するように構成された少なくとも１つのページ・サイズ特有データ構造を含み、前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについての前記ソフトウェア・アドレス変換動作を実行することは、前記判断したページ・サイズ・ヒントを用いて、前記ページ・サイズ・ヒントと関連付けられた前記ページ・サイズについてのアドレス変換情報を格納するように構成された前記ページ・サイズ特有データ構造にアクセスすることを含む、請求項７に記載の方法。
【請求項９】
前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについての前記ソフトウェア・アドレス変換動作を実行することは、符号化されたページ・サイズ・ヒントを欠いているメモリ・アクセス命令のために前記ハードウェア・ページ・テーブルをウォークするときにアクセスされる少なくとも１つの他のデータ構造のアクセスを迂回することを含む、請求項８に記載の方法。
【請求項１０】
前記プロセッサが実行するプログラム・コードにより要求される第２の仮想アドレスと関連付けられた第２のページ・フォールト及び符号化されたページ・サイズ・ヒントを欠いていることに応答して、前記ハードウェア・ページ・テーブルの複数のデータ構造をウォークし、前記第２の仮想アドレスに対応するページ・テーブル・エントリを識別することをさらに含む、請求項９に記載の方法。
【請求項１１】
前記ページ・サイズ・ヒントを判断することは、前記仮想アドレスについてのメモリのページを割り当てる前に実行され、前記方法は、前記ページ・サイズ・ヒントにより示されるページ・サイズを有する前記仮想アドレスに対して前記メモリのページを割り当てることをさらに含む、請求項１に記載の方法。
【請求項１２】
前記ページ・サイズ・ヒントにより示される前記ページ・サイズが許容されると判断することに応答して、前記ページ・サイズ・ヒントにより示されるページ・サイズを有する前記仮想アドレスに対して前記メモリのページを割り当てることが許容される、請求項１１に記載の方法。
【請求項１３】
前記プロセッサが実行するプログラム・コードにより要求される第２の仮想アドレスと関連付けられた第２のページ・フォールト及び符号化されたページ・サイズ・ヒントを欠いていることに応答して、デフォルト、ページ・サイズを有する前記仮想アドレスに対してメモリのページを割り当てることをさらに含む、請求項１１に記載の方法。
【請求項１４】
前記仮想アドレスから、前記未使用及び予約済みフィールドにおける複数のビットの少なくともサブセット内の非ゼロ値を検出することによって、ページ・サイズ・ヒントが前記仮想アドレスの前記未使用及び予約済みフィールドに符号化されることを判断することをさらに含む、請求項１に記載の方法。
【請求項１５】
プログラムを構築する方法であって、
ページ・サイズ・ヒントを、メモリ・アクセス命令により参照される仮想アドレスの未使用及び予約済みフィールドに符号化することと、
前記メモリ・アクセス命令により前記プログラムを構築することであって、前記プログラムが実行するデータ処理システムのハードウェア変換論理によって、前記メモリ・アクセス命令により発生するページ・フォールトの検出時、ソフトウェア・アドレス変換動作を実行するときに前記ページ・サイズ・ヒントが使用される、構築することと、
を含む、方法。
【請求項１６】
前記ページ・サイズ・ヒントを前記メモリ・アクセス命令により参照される前記仮想アドレスの前記未使用及び予約済みフィールドに符号化することは、前記プログラムのコンパイル又はリンク中に実行される、請求項１５に記載の方法。
【請求項１７】
前記ページ・サイズ・ヒントを前記メモリ・アクセス命令により参照される前記仮想アドレスの前記未使用及び予約済みフィールドに符号化することは、前記プログラムの実行可能ファイルが前記ページ・サイズ・ヒントと関連付けられたページ・サイズ内に適合すると判断することに応答して実行される、請求項１５に記載の方法。
【請求項１８】
前記ページ・サイズ・ヒントを、前記メモリ・アクセス命令により参照される前記仮想アドレスの前記未使用及び予約済みフィールドに符号化することは、前記プログラムの最適化中、データ・メモリ要求パターンを分析することに応答して実行される、請求項１５に記載の方法。
【請求項１９】
複数のメモリ・ページ・サイズをサポートする装置であって、
ハードウェア変換論理を含む少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサによる実行時に、
前記ハードウェア変換論理により発生し、前記プロセッサが実行するプログラム・コードにより要求される仮想アドレスと関連付けられたページ・フォールトを検出することと、
前記仮想アドレスから、前記仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断することと、
前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについてのソフトウェア・アドレス変換動作を実行することと
によって、ページ・フォールトを処理するように構成されたプログラム・コードと、
を含む、装置。
【請求項２０】
少なくとも１つのプロセッサによる実行時に、
前記プロセッサのハードウェア変換論理により発生し、前記プロセッサが実行するプログラム・コードにより要求される仮想アドレスと関連付けられたページ・フォールトを検出すること、
前記仮想アドレスから、前記仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断すること、及び
前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについてのソフトウェア・アドレス変換動作を実行すること
によって、ページ・フォールトを処理するように構成されたプログラム・コードを含む、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ及びコンピュータ・ソフトウェアに関し、特定的には、メモリ・アドレス変換に関する。
【背景技術】
【０００２】
メモリ管理、すなわち、コンピュータに格納されたデータを管理する際に行われる動作は、多くの場合、コンピュータのシステム性能全体における大きな要因である。他のタスクの中でも、メモリ管理は、コンピュータ上でのデータの取り出し及び格納の監視、並びに、どのユーザ及びコンピュータ・プログラムがアクセスすることが許可されるかを制限することによりコンピュータの特定のセキュリティ・タスクを管理する。
【０００３】
現代のコンピュータは、一般に、コンピュータ及びそれらが基づいている基礎となるアーキテクチャ上の設計において、性能を向上させ、より大きな柔軟性を提供するための仮想メモリ管理として知られるメモリ管理技術に依存する。
【０００４】
仮想メモリ・システムにおいては、コンピュータのメモリ・システムを実装する基礎となるハードウェアは、コンピュータのソフトウェアから事実上隠されている。例えば幅が６４ビット又はそれを上回る相対的に大きい仮想メモリ空間が、こうしたコンピュータのために定められ、コンピュータ上で実行されるコンピュータ・プログラムが、仮想メモリ空間内の記憶場所を指し示す仮想アドレスを用いてメモリ・システムにアクセスする。しかしながら、コンピュータ内の物理メモリ・デバイスには、物理メモリ・デバイス内の特定の記憶場所に直接マッピングする「実（real）」アドレスを介してアクセスされる。「アドレス変換」を行って、物理メモリの実メモリ・アドレスを仮想メモリ空間における仮想アドレスにマッピングするために、コンピュータのハードウェア及び／又はソフトウェアが提供される。従って、コンピュータ上のコンピュータ・プログラムが、仮想アドレスを用いてメモリにアクセスしようとするたびに、コンピュータは、仮想アドレスを対応する実アドレスに自動変換するので、仮想アドレスにマッピングされた適切な物理デバイス内の適切な記憶場所にアクセスできるようになる。
【０００５】
仮想アドレッシングの１つの特徴は、コンピュータが、該コンピュータの主メモリの物理メモリ・デバイス内に、仮想メモリ空間全体のためのストレージを含む必要がないことである。代わりに、ディスク・ドライブ及び他の大容量ストレージ・デバイスのような下位レベルのストレージを補助ストレージとして使用することができ、必要に応じて、メモリ・アドレスは、主メモリと補助ストレージとの間でスワップ（swap）される「ページ」にグループ化される。
【０００６】
さらに、一部のコンピュータ設計はセグメント化の概念も含み、このセグメント化は、仮想メモリを異なるセグメント（各々がページのブロックにマッピングされる）に分割して、メモリ保護を容易にし、大きい増大するデータ構造の処理を簡単化し、他の場合には任意の所定の時間にコンピュータ内で複数のプロセスを処理できる場合にメモリ管理を実行するためのより大きな柔軟性を与える。セグメント化が用いられる場合、付加的な間接参照のレイヤが使用され、付加的な変換を実行することが必要である。一般に、セグメント化及びページングを組み込むシステムにおいて、コンピュータ・プログラムは、仮想アドレスにマッピングする「実効（effective）」アドレスを用いてメモリ・システムにアクセスし、従って、最初に実効アドレスから仮想アドレスへ、次に仮想アドレスから実アドレスへの変換が必要である。
【０００７】
コンピュータにおけるアクセス要求の頻度のために、アドレス変換は、システム性能全体に大きな影響を及ぼし得る。従って、その内部でアドレス変換が実行されるクリティカル・タイミング・パスと関連付けられた処理のオーバーヘッドを最小にすることが望ましい。
【０００８】
仮想メモリ・システムにおけるアドレス変換は、一般に、種々のアドレス変換データ構造にアクセスすることを組み込む。ページ・テーブルと呼ばれる１つのこうした構造は、ページごとに仮想アドレスを実アドレスにマッピングする複数のエントリを含む。同様に、セグメント化を処理するために、セグメントごとに実効アドレスを仮想アドレスにマッピングするエントリを含む、セグメント・テーブルが提供されることが多い。
【０００９】
多くの場合、コンピュータにおいて絶えず行われる多数のメモリ・アクセスに起因して、コンピュータにより使用されるメモリ・アドレス空間の全てをマッピングするために必要とされるエントリの数は著しいものになることがあり、エントリを、専用メモリではなく主ストレージに格納することが必要であり、そのことにより、こうしたエントリへのアクセスが極めて低速になる。こうしたスキームを用いるアドレス変換を加速するために、一般に、変換ルックアサイド・バッファ（translation lookaside buffer、ＴＬＢ）及びセグメント・ルックアサイド・バッファ（segment lookaside buffer、ＳＬＢ）と呼ばれる高速メモリを用いて、コンピュータによる迅速なアクセスのために最近使用された（recently-used）エントリをキャッシュに入れる。要求されるエントリがＴＬＢ又はＳＬＢ内に格納されていない場合、主ストレージからエントリをロードする際、性能上の不利益（performance penalty）を招くが、一般に、ＴＬＢ及びＳＬＢにおけるヒット率は並外れて高く、主ストレージからのエントリのロードと関連した不利益は、エントリがＴＬＢ及びＳＬＢから即座にアクセス可能なときの性能利得により十分に補われる。
【００１０】
さらに他の設計において、実効アドレスと実アドレスとの間の直接マッピングを提供するエントリを含む実効−実アドレス変換（ＥＲＡＴ）テーブルを提供することによって、性能をさらに加速するために、付加的なレベルのキャッシングを用いることができる。従って、ＥＲＡＴテーブルは、事実上、ＳＬＢ及びＴＬＢ両方からの情報を含み、２つのレベルの変換を実行する必要性を排除する。幾つかの設計においては、別個のデータ及び命令ＥＲＡＴテーブルが、それぞれ、プロセッサ内の命令及びデータ処理論理に近接して提供され、プロセッサ内のクリティカル性能パスにおけるアドレス変換の影響を最小にする。
【００１１】
もともと、ページングは、例えば、ページ毎に４Ｋ又は４０９６のアドレス可能な記憶場所といった固定のページ・サイズに基づいていた。しかしながら、セグメント化を用いる場合、異なるセグメントにおいて異なるページ・サイズをサポートすることができる。特にコンピュータ内で多くのプロセスが同時に実行されている場合、より小さいページ・サイズは、メモリ・システムの有効利用のために最適であることが多い。しかしながら、コンピュータ及びそこで実行されているプログラムのメモリ要件が増大し続けるにつれて、あらゆる所定のプロセス又はプログラムにより必要とされるメモリのページ数が増大し続け、その結果、多くの状況に、より大きなページ・サイズが状況により効率的であり得る。
【００１２】
多くの設計においては、ブート時に、大きいページ、すなわち４Ｋページより大きいページを割り当てる必要がある。この事前割り当ての必要性を回避するために、幾つかのオペレーティング・システムは、「トランスペアレントな（transparent）」ヒュージ・ページ（huge page）を実装し、連続的なページを集めてより大きいページに変換しようと試みる。しかしながら、一般に、オペレーティング・システムは、大きいページを割り当てる可能性を認識しておらず、デフォルトとして４Ｋページの割り当てを行う。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ページ・フォールト解決法を提供する。
【課題を解決するための手段】
【００１４】
本発明の実施形態によると、プロセッサのハードウェア変換論理により発生し、プロセッサにより実行されるプログラム・コードが要求する仮想アドレスと関連付けられるページ・フォールト（page fault）を検出すること、仮想アドレスから、仮想アドレスの未使用及び予約済み（unused and reserved）フィールドに符号化されるページ・サイズ・ヒントを判断すること、及び判断したページ・サイズ・ヒントを用いて仮想アドレスについてのソフトウェア・アドレス変換動作を実行することによって、複数のメモリ・ページ・サイズをサポートするタイプのデータ処理システムにおいて、ページ・フォールトに対処することができる。
【００１５】
本発明の別の実施形態によると、ページ・サイズ・ヒントを、メモリ・アクセス命令により参照される仮想アドレスの未使用及び予約済みフィールドに符号化すること、及びプログラムが実行するデータ処理システムのハードウェア変換論理による、メモリ・アクセス命令に起因するページ・フォールトの検出時、ソフトウェア・アドレス変換動作を実行しているときに前記ページ・サイズ・ヒントが使用されるように、前記メモリ・アクセス命令により前記プログラムを構築することによって、プログラムを構築することができる。
【００１６】
本発明を特徴付けるこれら及び他の利点及び特徴は、本明細書に添付され、そのさらに別の部分を形成する特許請求の範囲内に示される。しかしながら、本発明、並びにその利点及びその使用により達成される目的をより良く理解するために、本発明の例示的な実施形態を説明する図面及び付随の記述事項を参照されたい。
【００１７】
ここで、添付図面を参照して、単なる例として本発明の実施形態を説明する。
【図面の簡単な説明】
【００１８】
【図１】本明細書で説明される種々の技術による、例示的なハードウェア環境のブロック図である。
【図２】本明細書で説明される種々の技術による、例示的なソフトウェア環境のブロック図である。
【図３】図１〜図２の環境においてアドレス変換を実行するために使用できる例示的なハードウェア及びソフトウェア・エンティティを示すブロック図である。
【図４】図１〜図２の環境において使用可能な例示的な実効アドレス形式のブロック図である。
【図５】図１〜図２の環境においてページ・フォールトに対処するための例示的な動作シーケンスを示すフローチャートである。
【図６】図５で参照されるＰＴＥブロックの検索を実施するための例示的な動作シーケンスを示すフローチャートである。
【図７】図１〜図２の環境においてプログラムを構築するための例示的な動作シーケンスを示すフローチャートである。
【発明を実施するための形態】
【００１９】
ここで、幾つかの図の全体を通して同様の番号が同様の部品を示す図面を参照する。図１〜図２は、本発明に従った、種々のクラウド及び／又は非クラウド・コンピューティング環境におけるメモリ・アドレス変換の実施に適したデータ処理環境又は装置１００における主要なハードウェア及びソフトウェア・コンポーネントを示す。図１に示されるように、装置１００は、物理ハードウェアが複数のホスト又はコンピュータ・システム１０６内に配置された複数の物理プロセッサ・ノード１０４間に分散され、ホスト１０６が１つ又は複数のプール１０８内に配置された、マルチノード・データ処理システム１０２を含むことができる。各プロセッサ・ノード１０４は、１つ又は複数のプロセッサ１１０、１つ又は複数のメモリ・デバイス１１２、及び幾つかの実施形態において、入力／出力（Ｉ／Ｏ）ハードウェア１１４（例えば、１つ又は複数の入力／出力（Ｉ／Ｏ）アダプタ）及び／又はネットワーキング・ハードウェア１１６のような付加的なハードウェアを含む。適切なネットワーキング機能（図示せず）を、種々のプロセッサ・ノード１０４とホスト１０６、並びに他の外部システムとの間のデータ通信を与えるために用いることもできる。
【００２０】
装置１００は、仮想化環境を実装するのに適した多数の異なるアーキテクチャ、並びにマルチユーザ及びシングルユーザ環境の両方を含む非仮想化環境、及び埋め込まれた環境に適した種々のアーキテクチャのいずれかを用いて実装することができる。従って、装置１００は、種々のデスクトップ・コンピュータ、スーパーコンピュータ、サーバ、ラップトップコンピュータ、タブレット、モバイル機器、及び他のプログラム可能電子デバイス等を表すこともできる。
【００２１】
各プロセッサ１１０は、シングル又はマルチスレッド・プロセッサ、及び／又はシングル又はマルチコア・プロセッサとして実装できるが、各メモリ１１２は、例えばＤＲＡＭベースの主ストレージなどの１つ又は複数のレベルのメモリ・デバイス、並びに１つ又は複数のレベルのデータ、命令、及び／又は組み合わせキャッシュを含むと考えることができ、当技術分野において周知のように、特定のキャッシュは個々のプロセッサ又は複数のプロセッサにサービスする。さらに、装置１００のメモリは、例えばプロセッサ内のいずれかのキャッシュ・メモリなど、装置１００内のどこかに物理的に配置されたメモリ・ストレージ、並びに、例えば大容量ストレージ・デバイス又は装置１００に結合された別のコンピュータ上に格納された仮想メモリとして使用される任意のストレージ容量を含むと考えることができる。
【００２２】
装置１００は、１つ又は複数のカーネル、ハイパーバイザ、オペレーティング・システム等の制御下で動作し、以下により詳細に説明されるような種々のコンピュータ・ソフトウェア・アプリケーション、コンポーネント、プログラム、オブジェクト、モジュール、データ構造等を実行するか、又は他の方法でこれらに依存する。さらに、種々のアプリケーション、コンポーネント、プログラム、オブジェクト、モジュール等は、例えば、分散型又はクライアント・サーバ・コンピューティング環境において、ネットワークを介して装置１００に結合された別のコンピュータ内の１つ又は複数のプロセッサ上で実行することもでき、それにより、コンピュータ・プログラムの機能を実施するのに必要な処理を、ネットワーク上で複数のコンピュータに割り当てることができる。
【００２３】
例えば、図２は、装置１００のホスト１０６内に常駐し得る種々のソフトウェア・コンポーネント１１８〜１３２を示す。ハイパーバイザ又は仮想マシン・モニタ（ＶＭＭ）１１８は、１つ又は複数の仮想マシン（ＶＭ）１２０をホストすることができ、各仮想マシン１２０に対して、ここでは１つ又は複数の仮想プロセッサ（ＶＰ）１２２、仮想メモリ（ＶＭｅｍ）１２４及び仮想入力／出力（ＶＩＯ）リソース１２６により表される、ホスト１０６の物理ハードウェア・リソースの一部（例えば、プロセッサ、メモリ、及び／又は１つ又は複数のプロセッサ・ノード１０４と関連したＩＯリソース）を割り当てることができる。次いで、各仮想マシン１２０は、オペレーティング・システム１２８、及び随意的にミドルウェア１３０、並びに１つ又は複数のジョブ及び／又はアプリケーション１３２をホストすることができる。論理パーティションとも呼ぶことができる各仮想マシン１２０、仮想サーバ又は仮想コンピュータは、別個の物理コンピュータをエミュレートするような方法で動作することができ、従って、事実上、コンピュータがホストすることができるあらゆるソフトウェア・コンポーネントをホストできることが理解されるであろう。
【００２４】
付加的なハードウェア及び／又はソフトウェア・コンポーネント、例えば、大容量ストレージ・ハードウェア、プリンタ若しくはディスプレイなどの外部入力／出力デバイス、及び、例えば、これを通して装置のハードウェア及び／又はソフトウェア構成を管理者により管理することができるハードウェア管理コンソール（ＨＭＣ）などの管理ハードウェア及び／又はソフトウェアも、装置１００内に常駐し得る。さらに、示される実施形態において、１つ又は複数のストレージ・ファブリック１３８を通じた１つ又は複数のストレージ・システム１３６への接続のような、１つ又は複数の外部ネットワーク１３４への接続をサポートすることもできる。仮想化環境は、無数の方法で実装することができ、かつ、無数のハードウェア及び／又はソフトウェアの変形を含むことができ、従って、本発明は、本明細書で開示される特定の実装に制限されるものではない。
【００２５】
本発明は、システム、方法、及び／又はコンピュータ・プログラム製品とすることができることが理解されるであろう。コンピュータ・プログラム製品は、１つ又は複数のプロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体（単数又は複数）を含むことができる。
【００２６】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの：すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
【００２７】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジ・サーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体内に格納する。
【００２８】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、又は、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネットサービスプロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個人化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。
【００２９】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【００３０】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施する命令を含む製品を製造するようにすることもできる。
【００３１】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【００３２】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【００３３】
さらに、コンピュータ可読プログラム命令は、その１つ又は複数をひとまとめにして「プログラム・コード」と呼ぶことができ、そのような命令が本発明の特定の実施形態において実施されるアプリケーションに基づいて、本明細書で識別することができる。しかしながら、以下の任意の特定のプログラム命名は、単に便宜のために使用され、このため、本発明は、そのような命名によって識別される及び／又は暗示される、いずれかの特定のアプリケーションにおいてのみ使用されることには限定されるべきでないことを認識されたい。さらに、コンピュータ・プログラムがルーチン、プロシージャ、メソッド、モジュール、オブジェクト等に編成され得る通常、数限りない様式、並びに通常のコンピュータ内に存在する様々なソフトウェア層（例えば、オペレーティング・システム、ライブラリ、ＡＰＩ、アプリケーション、アプレット等）の間にプログラム機能が割り当てることができる様々な様式を考慮すると、本発明は、本明細書において説明される特定の編成及びプログラム機能の割り当てに限定されないことが認識されるであろう。
【００３４】
図１及び図２示される例示的な環境は、本発明を限定することを意図していないことが、当業者には認識されるであろう。実際、当業者であれば、本発明の範囲を逸脱することなく、他の代替的なハードウェア環境及び／又はソフトウェア環境を使用できることが理解するであろう。
【００３５】
ページ・フォールト解決法のための埋め込まれたページ・サイズ・ヒント
アドレス変換は、最新のデータ処理システムにサポートされ、通常、仮想メモリと実メモリとの間の変換を解決するために、ハードウェア及びソフトウェアの両方に依存する。例えば、図３は、例示的なデータ処理システム２００におけるアドレス変換機能を示す。このデータ処理システムにおいて、複数のページ・サイズが、セグメント化のようにサポートされ、２レベルの変換が行われる、すなわち最初に実効アドレスから仮想アドレスへ、次に仮想アドレスから実アドレスへの変換が行われる。しかしながら、本発明は、２レベルの変換に限定されるものではなく、アドレスが仮想アドレス空間と実アドレス空間との間で変換される異なる環境において実施することができる。このため、以下の説明では、プログラム命令により参照され実アドレス空間内のアドレスに変換されるアドレスを、「仮想アドレス」という。
【００３６】
例えば図３に示されるように、仮想メモリ・アドレスを読み取ろうとする若しくはこれに書き込もうとするなどのメモリ・アクセス要求、又はメモリを割り当てる要求は、最初に、幾つかの実施形態において、別個のデータ特有及び命令特有のユニット（ｄＥＲＡＴ及びｉＥＲＡＴ）を用いて実施することができる、例えば実効アドレス−実アドレス変換（Effective to Real Address Translation、ＥＲＡＴ）ユニット２０８など、プロセッサ２０２内のハードウェア変換論理により処理することができる。ＥＲＡＴ２０８においてヒットが生じた場合、プロセッサ２０２内でアドレス変換を処理できるが、ミスが生じた場合、メモリ・アクセス要求は、一般に、プロセッサ２０２と同じチップであることも又はそれとは異なるチップであることもある、メモリ・コントローラ又はメモリ管理ユニット（ＭＭＵ）２０４に転送される。ＭＭＵ２０４は、１つ又は複数の変換ルックアサイド・バッファ（ＴＬＢ）及び／又はセグメント・ルックアサイド・バッファ（ＳＬＢ）２１０を含むハードウェア変換論理を用いて要求を処理することができる。ＴＬＢ及び／又はＳＬＢ２１０におけるヒットに応答して、メモリ・アクセス要求は、ＭＭＵ２１０内で処理できるが、ミスが生じた場合、まとめてハードウェア・ページ・テーブル（ＨＰＴ）２１２と呼ばれる種々のソフトウェア・データ構造にアクセスするために、通常、ページ・フォールトが、ソフトウェア２０６に、例えばオペレーティング・システム（ＯＳ）、ハイパーバイザ、仮想マシン・モニタ、カーネル、又はデータ処理システム内の他の下位レベル・ソフトウェアに知らせられ、これによりページ・フォールトが解決される。
【００３７】
各ＥＲＡＴ２０８、ＳＬＢ／ＴＬＢ２１０及びＨＰＴ２１２は、２つの異なるアドレスの間、例えば仮想又は実効アドレスと実アドレスの間でマッピングする少なくともアドレス変換データを含み得ることが理解されるであろう。幾つかの実施形態において、このアドレス変換データは、ページ・テーブル・エントリ（ＰＴＥ）として実装し、そう呼ぶことができる。しかしながら、ＰＴＥは、特定のプロセス若しくはプロセスのタイプ、又は特定のアクセス・タイプ（例えば、読み取り専用）へのアクセスを制限する保護データ、有効／無効インジケータ又はダーティ（dirty）インジケータのようなステータス・データ、カウンタ若しくは最長時間未使用（least recently used）インジケータ、ページ・サイズ・データ等のような追跡データといった、付加的な情報を含み得ることが理解されるであろう。さらに、幾つかの実施形態において、各ＥＲＡＴ２０８、ＳＬＢ／ＴＬＢ２１０及びＨＰＴ２１２のＰＴＥを同じように構成することができ、他の実施形態において、ＰＴＥは、メモリ階層の異なるレベルにおいて互いに異なることがあり、かつ、他のレベルにおける異なる、付加的な、又はより少ないデータを含み得るが、メモリ階層の異なるレベル間で行き来するＰＴＥ又は仮想／実効アドレスへの言及は、階層のそのレベルに実装される特定のデータに適した形式でのＰＴＥ又は仮想／実効アドレスの書式設定と関係する、データの修正、付加的なデータの補足、及び／又はＰＴＥ又は仮想／実効アドレスと関連したデータの廃棄を含むことができる。
【００３８】
本発明の種々の実施形態において、多種多様のアドレス変換の実装を用いることができ、従って、本発明は、図３の実装に限定されるものではないことが理解されるであろう。例えば、Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＮＵＭＡ）環境、マルチコア環境、及び他の環境において、アドレス変換論理及び／又は機能を、データ処理システムの全体にわたって異なるように分散させることができ、データ構造、バッファ、テーブル等の種々の組み合わせを、本発明に従ったデータ処理システムのアドレス変換機能により用いられるアドレス変換データ又はＰＴＥを維持するために用いることができる。例えば、幾つかの実施形態において、ＨＰＴ２１２は、ハードウェア変換論理においてミスするアドレス変換動作と関連付けられた待ち時間を最小にしようとして、複数のテーブル、マルチレベル・テーブル、ネスト化テーブル（nested table）、仮想化テーブルを用いて実装することができる。複数のデータ構造に潜在的にアクセスする必要性、及び、より低速のメモリ又はさらに大容量又は永続性ストレージからそのデータ構造を取り出す潜在的な必要性のために、幾つかの実施形態において、アドレス変換動作の実施と関連付けられた待ち時間は変化し得ることも理解されるであろう。
【００３９】
さらに、本発明の種々の実施形態において、複数のページ・サイズがサポートされ得ることが理解されるであろう。一般に、デフォルト・サイズ（例えば、幾つかの実施形態において、４Ｋ又は４０９６バイト）より大きいページを、ラージ（large）ページ又はヒュージ・ページと呼ぶことがある。例えば、プログラムが比較的大量の連続データ及び／又は命令を含む場合、及び／又は大きいデータ・ブロックに頻繁に及び／又は繰り返しアクセスされる場合など、例えば、何らかのタイプのワークロードにおいて、ラージ・ページは有用であり得る。対照的に、他のワークロード、例えばメモリ・アクセスがより多く分散され、ランダムであるワークロードにおいて、より小さいページ・サイズは、より良好な性能を提供し得る。
【００４０】
幾つかの従来の手法において、ブート時にデフォルト・サイズより大きいページが割り当てられることが必要であり、一方、他の従来の手法においては、「トランスペアレントな」ヒュージ・ページの使用により事前割り当てを回避することができ、そこで、オペレーティング・システム又は同様のソフトウェアは、連続したページを集めてラージ・ページ又はヒュージ・ページに変換しようと試みる。しかしながら、一般に、オペレーティング・システムは、ラージ・ページ又はヒュージ・ページの使用に特に適した条件を認識しておらず、従って、オペレーティング・システム及び他のソフトウェア・ベースのアドレス変換論理は、通常、異なるタイプのワークロード又はシナリオを考慮するように、異なるサイズのページをインテリジェントに割り当てる能力が制限されている。
【００４１】
しかしながら、本発明に従った実施形態は、ページ・サイズ・ヒントを、オペレーティング・システム、ハイパーバイザ／仮想マシン・マネージャ、又はデータ処理システムにおける他のソフトウェア実装ページ・フォールト処理論理に提供することにより、データ処理システムにおけるメモリの割り当て及びページ・フォールトの処理を最適化するために使用することができる。次に、ページ・サイズ・ヒントを、例えば、こうしたデータ処理システム内で実行されているプログラム内のプログラム・コード命令により要求される仮想アドレスに、特に、仮想アドレスの予約済み及び／又は未使用フィールド内に埋め込むことができる。次に、ページ・サイズ・ヒントをソフトウェア実装ページ・フォールト処理論理により読み取り、メモリ・アクセス要求に応じて割り当てられるページ・サイズを制御し、及び／又はメモリ・アクセス要求に応じて１つ又は複数のハードウェア・ページ・テーブルからのアドレス変換データの検索を最適化することができる。
【００４２】
本発明に従った幾つかの実施形態において、例えば、プロセッサのハードウェア変換論理により生じるページ・フォールトを、ソフトウェア・ページ・フォールト・ハンドラによって検出することができ、仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断し、次に、判断したページ・サイズ・ヒントを用いて、仮想アドレスに対してソフトウェア・アドレス変換動作を実行することができる。以下により明らかになるように、幾つかの実施形態において、そうすることにより、ページ・サイズ関するヒントを、実行中のプログラムによりソフトウェア・ページ・フォールト・ハンドラにシームレスに伝達し、ハードウェア・ページ・テーブル等のようなデータ構造へのアクセスと関連付けられた待ち時間を部分的に減らすことにより、メモリ割り当て及び／又はアドレス変換を加速することが可能になる。
【００４３】
この点で、ハードウェア変換論理は、例えばプロセッサ、プロセッサ・コア、メモリ・コントローラ、メモリ管理ユニット、キャッシュ・コントローラ等内で実装することができ、ＥＲＡＴ、ＳＬＢ、ＴＬＢ等のような種々のデータ構造を含む種々のタイプのハードウェア実装アドレス変換機能を含むと考えることができる。同様に、ソフトウェア・ページ・フォールト・ハンドラは、例えば、オペレーティング・システム、カーネル、ハイパーバイザ、仮想マシン・モニタ、又は種々のタイプのページ・テーブルを含む種々のタイプの変換データ構造にアクセスするための他の下位レベル・ソフトウェア内に実装することができる、種々のタイプのソフトウェア実装アドレス変換機能を含むと考えることができる。
【００４４】
幾つかの実施形態において、ソフトウェア・ページ・フォールト・ハンドラは、種々のタイプのソフトウェア・アドレス変換動作を実施するように構成することができる。実行され得る１つのタイプのソフトウェア・アドレス変換動作は、ページ・テーブル・エントリ、又は仮想アドレスから実アドレスへのアドレス変換を完了するのに用いられる他のアドレス変換データの検索である。実行され得る別のタイプのソフトウェア・アドレス変換動作は、例えば、要求される仮想アドレスが実アドレスにまだマッピングされておらず、どのメモリ・ページもまだその仮想アドレスに対して割り当てられていないと判断することに応答して、新しいメモリ・ページを割り当てることである。付加的なソフトウェア・アドレス変換動作は、メモリ・ページの修正又は割り当て解除、主メモリへの及びそれからのメモリ・ページのスワップ等といった種々の管理動作を含むことができる。
【００４５】
ここで図４を参照すると、ページ・サイズ・ヒントの通信と関連して用いるのに適した例示的な実効又は仮想アドレス形式が２２０で示される。形式２２０は、特に、本発明の幾つかの実施形態と関連して用いることができる多数の典型的なアドレス形式のいずれかを表し、実効又は仮想アドレスに対応するメモリ・ページへのオフセットを表すオフセット・フィールド２２２、並びに、合わせて仮想ページについての一意の識別子を表すインデックス・フィールド２２４及びタグ・フィールド２２６を含む。例えば、インデックス・フィールド２２４は、ＰＴＥを含むデータ構造をアドレス指定するために使用することができ、タグ・フィールド２２６は、インデックスが付けられたページを同じインデックスにマッピングされた他のページと区別するために使用することができる。幾つかの実施形態においては、タグ・フィールド２２６が省略されることがあり、インデックス・フィールド２２４は、データ構造内のページをアドレス指定するのに十分である。
【００４６】
形式２２０は、ステータス情報、アクセス制御情報、又は本開示の利点を有する当業者により理解されるような他の情報のような情報を含むことができる、１つ又は複数のフラグ２２８を随意的に含むこともできる。
【００４７】
形式２２０は、未使用及び予約済みの１つ又は複数のビットを含む予約済みフィールド２３０を含むこともできる。本発明の文脈における、未使用及び予約済みとは、将来の使用のためにシステムにより明示的に予約され、かつ、アドレス変換目的のため若しくは他の場合にはメモリ内の記憶場所にアドレス指定するために使用されていない仮想又は実効アドレス内のフィールドを指す。このフィールドは、予約済みフィールド２３０内にあり、従って、本発明に従った実施形態において、ページ・サイズ・ヒントを符号化することができる。
【００４８】
１つの例示的な実装として、例えば、Ｐｏｗｅｒ８アーキテクチャで実装されるような、６４ビット基数（Ｒａｄｉｘ）変換の場合、１０ビット（例えば、ビット２〜１１のビッグ・エンディアン（Big Endian）又はビット６１〜５２のリトル・エンディアン（Little Endian）が、アーキテクチャにより予約され、アドレス変換のため又は他の場合にはメモリを参照するために使用されていない。１つの例示的な実施形態において、このフィールドの１つ又は複数のビットを用いて、以下のテーブルＩに示されるようなページ・サイズ・ヒントを提供することができる。
【表１】
2019523920.tif 000003
【００４９】
上記の符号化において、実効アドレスは、コンパイラ、リンカ及びアプリケーションが、変換のためにオペレーティング・システム又は他のソフトウェア・ベースのアドレス変換機能を要求するための規則（convention）になり得る。さらに、幾つかの実施形態において、この符号化をヘッダ・ファイルに組み込み、オペレーティング・システム、コンパイラ、リンカ、及び／又はアプリケーションの新しいコンパイルのために変更することができる。
【００５０】
幾つかの実施形態において、予約済みフィールド２３０における非ゼロ値は、メモリ管理ユニット又は他のハードウェア変換論理による不正なアドレス条件のアサーション（assertion）をもたらし得ることが理解されるであろう。従来より、一般に、こうした条件により、オペレーティング・システムが、アプリケーション又はデバイス・ドライバを終了させる。しかしながら、幾つかの実施形態において、この条件を捕捉し使用して、ページ・サイズ・ヒントをアドレス変換目的のために提供することができる。また、幾つかの実施形態において、ハードウェア変換論理は、条件を知らせることを防止するように（すなわち、ハードウェア変換論理が単に非ゼロ・ビットを無視するように）イネーブル又はディスエーブルにすることができる構成可能なモードを含むことができる。従って、ページ・サイズ・ヒントが使用されるたびに、ハードウェア変換論理のモードを適切に設定することができる。
【００５１】
ここで図５を参照すると、この図は、本発明に従った方法でページ・サイズ・ヒントのサポートを組み込むソフトウェア実装ページ・サイズ・フォールト処理論理を実装するソフトウェア・ページ・フォールト・ハンドラのための動作シーケンス２５０を示す。この動作シーケンスは、例えば、ハードウェア変換論理によるページ・フォールトのアサーションに応答して開始することができ、ＯＳ、ハイパーバイザ、仮想マシン・モニタ、カーネル、又は他の下位レベル・ソフトウェアにおいて実施することができる。さらに、シーケンス２５０は、まだ割り当てられていない実効アドレスと関連付けられたページ・フォールトに応じて新しいメモリ・ページの自動割り当てを実施するが、他の実施形態においては、メモリ割り当てを、ページ・フォールト処理とは別個に処理できることが理解されるであろう。
【００５２】
シーケンス２５０は、例えば実効アドレスなどの仮想アドレスを有した状態で提示され、ブロック２５２において、環境についてのハードウェア・ページ・テーブルを実装する１つ又は複数のデータ構造におけるマッチング・ページ・テーブルを検索することから始まる。マッチング・ページ・テーブル・エントリの検索（図６と関連して以下に説明される）と関連した動作を当面の間遅らせ、制御は次のブロック２５４に移り、そこで、マッチング・ページ・テーブルが見つかったかどうかに関する判断を行う。見つかった場合、制御はブロック２５６に進み、特定されたページ・テーブル・エントリを用いて、本開示の利点を有する当業者には明らかな方法で、ページ・フォールトに対応する。しかしながら、見つからなかった場合、ブロック２５４は、制御をブロック２５８に渡し、実効アドレスの予約済みビットの１つ又は複数にアクセスして、例えばマスクを適用することにより、及び、マスクされていないビットのいずれかが非ゼロ値であるかどうかを判断することによって、ページ・サイズ・ヒントが実効アドレスに符号化されたかどうかを判断する。マスクされていないビットが全てゼロである場合、いずれのページ・サイズ・ヒントも実効アドレスに符号化されないので、ブロック２６０は、制御をブロック２６２に渡し、デフォルトのメモリ・ページ・サイズを有する新しいメモリ・ページを実効アドレスに割り当てる。新しいメモリ・ページの割り当ては、メモリ・ページの新しいページ・テーブル・エントリを作成することによりプロセスのためのメモリ・ページを予約すること、及び、そのページを主メモリにスワップすることの両方、又は他の動作、又は本開示の利点を有する当業者には明らかであろう動作の組み合わせを含むことができる。特に、ハードウェア・ページ・テーブルが異なるページ・サイズに対応する複数のページ・サイズ特有のデータ構造を組み込んでいる場合、新しいページ・テーブル・エントリの作成は、デフォルト・ページ・サイズに特有のデータ構造内に新しいページ・テーブル・エントリを作成することを含むことができる。
【００５３】
他方、ブロック２６０が、実効アドレスのマスクされていないビット内に非ゼロ値が格納されていると判断する場合、ページ・サイズ・ヒントが、実効アドレスに符号化されており、制御はブロック２６４に移り、ページ・サイズ・ヒントの要求されるメモリ・ページ・サイズが許容されるかどうかを判断する。例えば、要求されるメモリの量が利用可能でない場合、要求されるメモリ・ページ・サイズが拒否されることがある。許容されない場合、制御はブロック２６２に進み、デフォルト・ページ・サイズを割り当てるが、許容される場合、制御は代わりにブロック２６６に進み、ページ・サイズ・ヒントにより示される要求されるページ・サイズを有する新しいメモリ・ページを割り当てる。例えば、異なるデータ構造が異なるページ・サイズと関連付けられたページ・テーブル・エントリを保持する場合、ページ・サイズ・ヒントにより示されるページ・サイズ特有のデータ構造内の新しいメモリ・ページについて、新しいページ・テーブル・エントリを作成することができる。ブロック２５６、２６２、又は２６６のいずれかの完了時、ページ・フォールトは処理されたと見なされ、シーケンス２５０が完了する。
【００５４】
従って、シーケンス２５０において、実効アドレスに符号化されたページ・サイズ・ヒントを用いて、新しいページ・テーブル・エントリを作成し、ページ・サイズ・ヒントにより示されるページ・サイズに基づいて新しいメモリ・ページを割り当てることができる。しかしながら、幾つかの実施形態において、ページ・サイズ・ヒントは、既に割り当てられているメモリ・ページのページ・フォールトの処理を加速し及び／又は簡単化するために使用することができる。例えば、図６は、図５のＰＴＥブロック２５２の検索を実施するための例示的な動作シーケンスを示す。メモリ割り当てが、ページ・フォールトの処理とは別個に処理される実施においても、同様の動作シーケンスを用い得ることが理解されるであろう。
【００５５】
最初に、ブロック２８０において、ページ・フォールト・ハンドラに入力された実効アドレスの予約済みビットの１つ又は複数にアクセスして、例えば、マスクを適用すること、及び、マスクされていないビットのいずれかが非ゼロ値であるかどうかを判断することにより、ページ・サイズ・ヒントが実効アドレスに符号化されたかどうかを判断する。マスクされていないビットが全てゼロである場合、ブロック２８２は、制御をブロック２８４に渡し、種々のハードウェア・ページ・テーブルのデータ構造をウォークして、デフォルト・ページ・サイズを呈する実効アドレスを求めてマッチング・ページ・テーブル・エントリを見つけようと試みる。幾つかの実施形態において、ページ・サイズ・ヒントを欠いていることにより、デフォルト・ページ・サイズ以外のページ・サイズを有するメモリ・ページに対応するマッチング・ページ・テーブル・エントリを特定することができる。本開示の利点を有する当業者により理解されるように、マッチング・ページ・テーブル・エントリの特定を試みるために、幾つかの異なるデータ構造にアクセスする必要があることがあり、さらに、大容量ストレージから取り出す必要があることもあり得るので、ブロック２８４において実行される検索は、計算コストが高いことも理解されるであろう。従って、ブロック２８６は、マッチング・ページ・テーブル・エントリが見つかったかどうかを判断し、見つかった場合、ブロック２８８において、マッチング・ページ・テーブル・エントリが戻される。しかしながら、見つからなかった場合、制御はブロック２９０に移り、見つからなかった（not found）という表示を戻す。
【００５６】
他方、ブロック２８２が、実効アドレスのマスクされていないビット内に非ゼロ値が格納されていると判断した場合、ページ・サイズ・ヒントは実効アドレスに符号化され、制御はブロック２９２に移り、ページ・サイズ・ヒントにより示されるページ・サイズと関連付けられた１つ又は複数のデータ構造を検索する。予想されるページ・サイズが既知の場合、従って、ブロック２９２において実行される検索は、全検索と比べて計算コストが低く、従って、ページ・サイズ・ヒントにより支援される検索は、全検索よりも効率的であり、幾つかの実施形態においては、ページ・テーブル・フォールトと関連付けられた待ち時間を低減させる。
【００５７】
次に、ブロック２９４は、マッチング・ページ・テーブルが見つかったかどうかを判断し、見つかった場合、制御はブロック２８８に移り、マッチング・ページ・テーブル・エントリを戻す。他の場合には、ブロック２９４は、制御をブロック２８４に渡し、全検索を試みる。しかしながら、他の実施形態においては、全検索は必要とされず、代わりに、ブロック２９４は、制御を直接ブロック２９０に渡すことによって、見つからなかったという表示を戻すことができる。従って、ブロック２５２において、実効アドレスに符号化されたページ・サイズ・ヒントを用いて、ページ・サイズ・ヒントが示すページ・サイズに基づくページ・テーブル・エントリの位置特定を加速することができる。幾つかの実施形態において、例えば、符号化されたページ・サイズ・ヒントを欠いているメモリ・アクセス命令についてのハードウェア・ページ・テーブルをウォークするときに通常アクセスされる、少なくとも１つのデータ構造のアクセスを迂回する結果として、加速が生じ得る。
【００５８】
ページ・サイズ・ヒントは、本発明に従った多数の方法で実効又は仮想アドレスに符号化できることが理解されるであろう。幾つかの実施形態において、例えば、ページ・サイズ・ヒントは、例えば、プログラムのコンパイル、最適化、リンク、インストール、又はデプロイの際のプログラムの構築と関連して仮想アドレスに符号化することができる。こうした実施形態において、プログラムの構築中、ページ・サイズ・ヒントは、プログラム内のメモリ・アクセス命令が参照する１つ又は複数の仮想アドレスの未使用及び予約済みフィールドに符号化することができ、メモリ・アクセス命令によりプログラムを構築することができ、プログラムが実行するデータ処理システムのハードウェア変換論理によって、メモリ・アクセス命令により引き起こされるページ・フォールトを検出すると、ソフトウェア・アドレス変換動作を実行しているとき、ページ・サイズ・ヒントを使用することができる。
【００５９】
例えば、図７は、本発明の幾つかの実施形態においてサポートできる３つの異なるシナリオを含むプログラム構築の動作シーケンス３００を示す。図７の例において、ページ・サイズ・ヒントは、コンパイラ・ディレクティブ（compiler directive）に応答して（ブロック３０２〜３０４）、最適化に応答して（ブロック３０６〜３１０）、及び実行可能ファイルの生成に応答して（ブロック３１２〜３１４）、メモリ・アクセス命令に符号化されるものとして示される。例えば、ソース・コードの構文解析、中間コードの生成、種々のコード最適化の実行、コードのパッケージング、実行可能コードの生成、コードと他の実行可能コード及び／又はライブラリとのリンク、コードのデプロイ又はインストール等の、プログラムの構築中に実行される他の動作は、以下の説明を簡単化する目的のために図７から省略されるが、こうした動作は、通常、当技術分野において理解され、本明細書で説明される機能のこれらの動作のいずれかへの組み込みは、十分に本開示の利点を有する当業者の能力の範囲内にあることが理解されるであろう。しかしながら、図７は、ブロック３１６において、構築の結果として１つ又は複数の実行可能ファイルの出力を示しており、それは、その実効又は仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを有する１つ又は複数のアクセス命令を含むことができることが理解されるであろう。また、幾つかの実施形態において、図７に示される３つのシナリオの全てが、サポートされないこともあることが理解されるであろう。他の実施形態においては、異なるシナリオが、ページ・サイズ・ヒントをプログラムのメモリ・アクセス命令に符号化するために使用されることがあり、従って、本発明は、図７に示される特定のシナリオに限定されるものではないことも理解されるであろう。
【００６０】
例えば、ブロック３０２〜３０４は、アプリケーション開発者が、コンパイラ・ディレクティブを、開発中のアプリケーションのソース・コード内に挿入するシナリオを示し、このコンパイラ・ディレクティブを、コンパイラにより検出し（ブロック３０２）、コンパイラに、ページ・サイズ・ヒントをメモリ・アクセス命令に符号化するように、プログラム内の１つ又は複数のメモリ・アクセス命令を修正させる（ブロック３０４）ことができる。コンパイラ・ディレクティブは、例えば、ソース・コードの全て又はセクションのページ・サイズ・ヒントの符号化をイネーブル又はディスエーブルにすることができる。コンパイラ・ディレクティブはまた、特定のメモリ割り当て命令、特定のコードセクション、又は特定のタイプの命令（例えば、データをフェッチする命令対他のプログラム命令をフェッチする命令等）に対して所望のページ・サイズを指定することもできる。ディレクティブは、個々の命令、コードのセクション、特定の方法、クラス若しくはモジュール、又はプログラム全体と関連付けることができる。一般に、ディレクティブは、アプリケーション開発者がプログラム構築プロセスを制御し、開発中のアプリケーションに、アプリケーション開発者が所望するページ・サイズを使用させることを可能にする。しかしながら、他の実施形態においては、開発者は、他の方法でのページ・サイズ・ヒントの使用を制御することもできる。
【００６１】
他方、ブロック３０６〜３１０は、例えば最適化の際、特定のページ・サイズが特定のメモリ・アクセス命令又は要求に最適であることをコンパイラが識別するシナリオを示す。例えば、ブロック３０６は、最適化の一部として、ページ・サイズ・ヒントの適切な候補を識別しようとして、メモリ要求パターンを分析することができる。こうした候補の識別に応答して、ブロック３０８は、制御をブロック３１０に方向転換し、適切なページ・サイズを求めてページ・サイズ・ヒントを符号化するように、こうした候補と関連付けられたメモリ・アクセス命令を修正することができる。適切な候補は、例えば、プログラム内のコードのクリティカル・セクションに一貫してアクセスされるメモリの量が、デフォルト・ページ・サイズより大きいと判断されるときに存在するので、他の場合には他のメモリ・トラフィックに応じて内外にスワップされることがある複数のページ内ではなく、単一のより大きいページ内に全メモリの量を保持するのに有利となる。
【００６２】
ブロック３１２〜３１４は、コンパイラ又はリンカが、構築プロセス中に生成されるいずれかの実行可能ファイルが、特定のページ・サイズ内に適合するかどうかを判断することができる更に別のシナリオを示す。こうしたシナリオの検出に応答して、例えば、ブロック３１２は、制御をブロック３１４に渡し、例えば、ページ・サイズ・ヒントを、プログラム（又は、その特定のモジュール、ライブラリ、セクション、クラス、ファイル等）についてのメモリを割り当てる命令に符号化することによって、所定のページ・サイズでロードするように、プログラムを構成することができる。従って、例えば、コンパイルされたアプリケーションが単一の２ＭＢページ内に適合すると判断できる場合、幾つかの実施形態において、ロード時に２ＭＢページを要するように、アプリケーションを構成することが望ましく、アプリケーション全体がメモリの単一のページにロードされる。そうすることで、アプリケーションのために種々のモジュール又はコードのセクションをロードするためのページ・スワップが回避され、それにより、適切なシナリオにおけるアプリケーション性能全体が改善する。
【００６３】
従って、本発明に従った実施形態は、オペレーティング・システム、ハイパーバイザ、仮想マシン・モニタ、カーネル、又はページ・フォールトの処理と関連して用いられるデータ処理システム内の他の下位レベルのソフトウェアにおいて、ページ・サイズ・ヒントをソフトウェア・ページ・フォールト処理機能に伝達するために、仮想又は実効アドレスの未使用及び予約済みビットを別の用途に使用することを可能にする。さらに、幾つかの実施形態において、実際の符号化を、プログラムの実行前に行うことができ、幾つかの実施形態においては、プログラムのコンパイル、リンク、デプロイ、又はインストール中に行うことができる。
【００６４】
さらに、幾つかの実施形態において、構築プロセスは、仮想又は実効アドレスの未使用及び予約済みフィールド内の非ゼロ値に応答して、不正なアドレス通知の生成をディスエーブルにするモードで動作するように、データ処理システムのプログラム・ハードウェア変換論理を構成するように、プログラム内の１つ又は複数の命令の組み込みを含むこともできる。他の実施形態において、ハードウェア変換論理は、不正なアドレス通知を生成しないことがあり、幾つかの実施形態においては、適切なモードの選択は、例えば、オペレーティング・システムによってページ・サイズ・ヒント対応プログラムの実行とは別々に実行することができる。
【００６５】
本発明の種々の実施形態の説明は、説明を目的として提示されたが、網羅的であること、又は開示された実施形態に限定することを意図したものではない。当業者には、説明された実施形態の範囲及び趣旨から逸脱することなく、多くの修正及び変形が明らかであろう。本明細書で使用される用語は、実施形態の原理、実際の用途、若しくは市場で見出される技術に優る技術的改善を最も良く説明するために、又は当業者が本明細書に開示される実施形態を理解するのを可能にするために、選択された。
【符号の説明】
【００６６】
１００：データ処理環境又は装置
１０２：マルチノード・データ処理システム
１０４：プロセッサ・ノード
１０６：ホスト
１１０、２０２：プロセッサ
１１２：メモリ・デバイス
１１４：入力／出力（Ｉ／Ｏ）ハードウェア
１２０：仮想マシン
１２２：仮想プロセッサ（ＶＰ）
１２４：仮想メモリ（ＶＭｅｍ）
１２６：仮想入力／出力（ＶＩＯ）リソース
１２８：オペレーティング・システム
１３０：ミドルウェア
１３２：ジョブ及び／又はアプリケーション
１３６：ストレージ・システム
１３８：ストレージ・ファブリック
２０４：メモリ・コントローラ又はメモリ管理ユニット（ＭＭＵ）
２０６：ソフトウェア
２０８：実効アドレス−実アドレス変換（ＥＲＡＴ）ユニット
２１０：変換ルックアサイド・バッファ（ＴＬＢ）及び／又はセグメント・ルックアサイド・バッファ（ＳＬＢ）
２１２：ハードウェア・ページ・テーブル（ＨＰＴ）
２２０：実効又は仮想アドレス形式
２２２：オフセット・フィールド
２２４：インデックス・フィールド
２２６：タグ・フィールド
２３０：予約済みフィールド
２５０、３００：シーケンス
【図１】
2019523920.tif 000004
【図２】
2019523920.tif 000005
【図３】
2019523920.tif 000006
【図４】
2019523920.tif 000007
【図５】
2019523920.tif 000008
【図６】
2019523920.tif 000009
【図７】
2019523920.tif 000010
【国際調査報告】
2019523920.tif 000011
2019523920.tif 000012