JP2019523920A - ページ・フォールト解決法 - Google Patents

ページ・フォールト解決法 Download PDF

Info

Publication number
JP2019523920A
JP2019523920A JP2018560062A JP2018560062A JP2019523920A JP 2019523920 A JP2019523920 A JP 2019523920A JP 2018560062 A JP2018560062 A JP 2018560062A JP 2018560062 A JP2018560062 A JP 2018560062A JP 2019523920 A JP2019523920 A JP 2019523920A
Authority
JP
Japan
Prior art keywords
page
page size
virtual address
address
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018560062A
Other languages
English (en)
Other versions
JP6764485B2 (ja
Inventor
カプール、シャクティ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2019523920A publication Critical patent/JP2019523920A/ja
Application granted granted Critical
Publication of JP6764485B2 publication Critical patent/JP6764485B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/684TLB miss handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】 ページ・フォールト解決法を提供する。【解決手段】 実効又は仮想アドレスと関連付けられたページ・フォールトを処理する際、ソフトウェア・ページ・フォールト・ハンドラが使用する実効又は仮想アドレス内の未使用及び予約済みフィールドにページ・サイズ・ヒントを符号化し、アプリケーションが、メモリのページの割り当てのためのページ・サイズ・プリファレンスをオペレーティング・システム又は他のソフトウェア・ベースの変換機能に伝達すること、及び/又は、ハードウェア・ページ・テーブル内のページ・テーブル・エントリの検索を加速することを可能にすることができる。【選択図】 図5

Description

本発明は、一般に、コンピュータ及びコンピュータ・ソフトウェアに関し、特定的には、メモリ・アドレス変換に関する。
メモリ管理、すなわち、コンピュータに格納されたデータを管理する際に行われる動作は、多くの場合、コンピュータのシステム性能全体における大きな要因である。他のタスクの中でも、メモリ管理は、コンピュータ上でのデータの取り出し及び格納の監視、並びに、どのユーザ及びコンピュータ・プログラムがアクセスすることが許可されるかを制限することによりコンピュータの特定のセキュリティ・タスクを管理する。
現代のコンピュータは、一般に、コンピュータ及びそれらが基づいている基礎となるアーキテクチャ上の設計において、性能を向上させ、より大きな柔軟性を提供するための仮想メモリ管理として知られるメモリ管理技術に依存する。
仮想メモリ・システムにおいては、コンピュータのメモリ・システムを実装する基礎となるハードウェアは、コンピュータのソフトウェアから事実上隠されている。例えば幅が64ビット又はそれを上回る相対的に大きい仮想メモリ空間が、こうしたコンピュータのために定められ、コンピュータ上で実行されるコンピュータ・プログラムが、仮想メモリ空間内の記憶場所を指し示す仮想アドレスを用いてメモリ・システムにアクセスする。しかしながら、コンピュータ内の物理メモリ・デバイスには、物理メモリ・デバイス内の特定の記憶場所に直接マッピングする「実(real)」アドレスを介してアクセスされる。「アドレス変換」を行って、物理メモリの実メモリ・アドレスを仮想メモリ空間における仮想アドレスにマッピングするために、コンピュータのハードウェア及び/又はソフトウェアが提供される。従って、コンピュータ上のコンピュータ・プログラムが、仮想アドレスを用いてメモリにアクセスしようとするたびに、コンピュータは、仮想アドレスを対応する実アドレスに自動変換するので、仮想アドレスにマッピングされた適切な物理デバイス内の適切な記憶場所にアクセスできるようになる。
仮想アドレッシングの1つの特徴は、コンピュータが、該コンピュータの主メモリの物理メモリ・デバイス内に、仮想メモリ空間全体のためのストレージを含む必要がないことである。代わりに、ディスク・ドライブ及び他の大容量ストレージ・デバイスのような下位レベルのストレージを補助ストレージとして使用することができ、必要に応じて、メモリ・アドレスは、主メモリと補助ストレージとの間でスワップ(swap)される「ページ」にグループ化される。
さらに、一部のコンピュータ設計はセグメント化の概念も含み、このセグメント化は、仮想メモリを異なるセグメント(各々がページのブロックにマッピングされる)に分割して、メモリ保護を容易にし、大きい増大するデータ構造の処理を簡単化し、他の場合には任意の所定の時間にコンピュータ内で複数のプロセスを処理できる場合にメモリ管理を実行するためのより大きな柔軟性を与える。セグメント化が用いられる場合、付加的な間接参照のレイヤが使用され、付加的な変換を実行することが必要である。一般に、セグメント化及びページングを組み込むシステムにおいて、コンピュータ・プログラムは、仮想アドレスにマッピングする「実効(effective)」アドレスを用いてメモリ・システムにアクセスし、従って、最初に実効アドレスから仮想アドレスへ、次に仮想アドレスから実アドレスへの変換が必要である。
コンピュータにおけるアクセス要求の頻度のために、アドレス変換は、システム性能全体に大きな影響を及ぼし得る。従って、その内部でアドレス変換が実行されるクリティカル・タイミング・パスと関連付けられた処理のオーバーヘッドを最小にすることが望ましい。
仮想メモリ・システムにおけるアドレス変換は、一般に、種々のアドレス変換データ構造にアクセスすることを組み込む。ページ・テーブルと呼ばれる1つのこうした構造は、ページごとに仮想アドレスを実アドレスにマッピングする複数のエントリを含む。同様に、セグメント化を処理するために、セグメントごとに実効アドレスを仮想アドレスにマッピングするエントリを含む、セグメント・テーブルが提供されることが多い。
多くの場合、コンピュータにおいて絶えず行われる多数のメモリ・アクセスに起因して、コンピュータにより使用されるメモリ・アドレス空間の全てをマッピングするために必要とされるエントリの数は著しいものになることがあり、エントリを、専用メモリではなく主ストレージに格納することが必要であり、そのことにより、こうしたエントリへのアクセスが極めて低速になる。こうしたスキームを用いるアドレス変換を加速するために、一般に、変換ルックアサイド・バッファ(translation lookaside buffer、TLB)及びセグメント・ルックアサイド・バッファ(segment lookaside buffer、SLB)と呼ばれる高速メモリを用いて、コンピュータによる迅速なアクセスのために最近使用された(recently-used)エントリをキャッシュに入れる。要求されるエントリがTLB又はSLB内に格納されていない場合、主ストレージからエントリをロードする際、性能上の不利益(performance penalty)を招くが、一般に、TLB及びSLBにおけるヒット率は並外れて高く、主ストレージからのエントリのロードと関連した不利益は、エントリがTLB及びSLBから即座にアクセス可能なときの性能利得により十分に補われる。
さらに他の設計において、実効アドレスと実アドレスとの間の直接マッピングを提供するエントリを含む実効−実アドレス変換(ERAT)テーブルを提供することによって、性能をさらに加速するために、付加的なレベルのキャッシングを用いることができる。従って、ERATテーブルは、事実上、SLB及びTLB両方からの情報を含み、2つのレベルの変換を実行する必要性を排除する。幾つかの設計においては、別個のデータ及び命令ERATテーブルが、それぞれ、プロセッサ内の命令及びデータ処理論理に近接して提供され、プロセッサ内のクリティカル性能パスにおけるアドレス変換の影響を最小にする。
もともと、ページングは、例えば、ページ毎に4K又は4096のアドレス可能な記憶場所といった固定のページ・サイズに基づいていた。しかしながら、セグメント化を用いる場合、異なるセグメントにおいて異なるページ・サイズをサポートすることができる。特にコンピュータ内で多くのプロセスが同時に実行されている場合、より小さいページ・サイズは、メモリ・システムの有効利用のために最適であることが多い。しかしながら、コンピュータ及びそこで実行されているプログラムのメモリ要件が増大し続けるにつれて、あらゆる所定のプロセス又はプログラムにより必要とされるメモリのページ数が増大し続け、その結果、多くの状況に、より大きなページ・サイズが状況により効率的であり得る。
多くの設計においては、ブート時に、大きいページ、すなわち4Kページより大きいページを割り当てる必要がある。この事前割り当ての必要性を回避するために、幾つかのオペレーティング・システムは、「トランスペアレントな(transparent)」ヒュージ・ページ(huge page)を実装し、連続的なページを集めてより大きいページに変換しようと試みる。しかしながら、一般に、オペレーティング・システムは、大きいページを割り当てる可能性を認識しておらず、デフォルトとして4Kページの割り当てを行う。
ページ・フォールト解決法を提供する。
本発明の実施形態によると、プロセッサのハードウェア変換論理により発生し、プロセッサにより実行されるプログラム・コードが要求する仮想アドレスと関連付けられるページ・フォールト(page fault)を検出すること、仮想アドレスから、仮想アドレスの未使用及び予約済み(unused and reserved)フィールドに符号化されるページ・サイズ・ヒントを判断すること、及び判断したページ・サイズ・ヒントを用いて仮想アドレスについてのソフトウェア・アドレス変換動作を実行することによって、複数のメモリ・ページ・サイズをサポートするタイプのデータ処理システムにおいて、ページ・フォールトに対処することができる。
本発明の別の実施形態によると、ページ・サイズ・ヒントを、メモリ・アクセス命令により参照される仮想アドレスの未使用及び予約済みフィールドに符号化すること、及びプログラムが実行するデータ処理システムのハードウェア変換論理による、メモリ・アクセス命令に起因するページ・フォールトの検出時、ソフトウェア・アドレス変換動作を実行しているときに前記ページ・サイズ・ヒントが使用されるように、前記メモリ・アクセス命令により前記プログラムを構築することによって、プログラムを構築することができる。
本発明を特徴付けるこれら及び他の利点及び特徴は、本明細書に添付され、そのさらに別の部分を形成する特許請求の範囲内に示される。しかしながら、本発明、並びにその利点及びその使用により達成される目的をより良く理解するために、本発明の例示的な実施形態を説明する図面及び付随の記述事項を参照されたい。
ここで、添付図面を参照して、単なる例として本発明の実施形態を説明する。
本明細書で説明される種々の技術による、例示的なハードウェア環境のブロック図である。 本明細書で説明される種々の技術による、例示的なソフトウェア環境のブロック図である。 図1〜図2の環境においてアドレス変換を実行するために使用できる例示的なハードウェア及びソフトウェア・エンティティを示すブロック図である。 図1〜図2の環境において使用可能な例示的な実効アドレス形式のブロック図である。 図1〜図2の環境においてページ・フォールトに対処するための例示的な動作シーケンスを示すフローチャートである。 図5で参照されるPTEブロックの検索を実施するための例示的な動作シーケンスを示すフローチャートである。 図1〜図2の環境においてプログラムを構築するための例示的な動作シーケンスを示すフローチャートである。
ここで、幾つかの図の全体を通して同様の番号が同様の部品を示す図面を参照する。図1〜図2は、本発明に従った、種々のクラウド及び/又は非クラウド・コンピューティング環境におけるメモリ・アドレス変換の実施に適したデータ処理環境又は装置100における主要なハードウェア及びソフトウェア・コンポーネントを示す。図1に示されるように、装置100は、物理ハードウェアが複数のホスト又はコンピュータ・システム106内に配置された複数の物理プロセッサ・ノード104間に分散され、ホスト106が1つ又は複数のプール108内に配置された、マルチノード・データ処理システム102を含むことができる。各プロセッサ・ノード104は、1つ又は複数のプロセッサ110、1つ又は複数のメモリ・デバイス112、及び幾つかの実施形態において、入力/出力(I/O)ハードウェア114(例えば、1つ又は複数の入力/出力(I/O)アダプタ)及び/又はネットワーキング・ハードウェア116のような付加的なハードウェアを含む。適切なネットワーキング機能(図示せず)を、種々のプロセッサ・ノード104とホスト106、並びに他の外部システムとの間のデータ通信を与えるために用いることもできる。
装置100は、仮想化環境を実装するのに適した多数の異なるアーキテクチャ、並びにマルチユーザ及びシングルユーザ環境の両方を含む非仮想化環境、及び埋め込まれた環境に適した種々のアーキテクチャのいずれかを用いて実装することができる。従って、装置100は、種々のデスクトップ・コンピュータ、スーパーコンピュータ、サーバ、ラップトップコンピュータ、タブレット、モバイル機器、及び他のプログラム可能電子デバイス等を表すこともできる。
各プロセッサ110は、シングル又はマルチスレッド・プロセッサ、及び/又はシングル又はマルチコア・プロセッサとして実装できるが、各メモリ112は、例えばDRAMベースの主ストレージなどの1つ又は複数のレベルのメモリ・デバイス、並びに1つ又は複数のレベルのデータ、命令、及び/又は組み合わせキャッシュを含むと考えることができ、当技術分野において周知のように、特定のキャッシュは個々のプロセッサ又は複数のプロセッサにサービスする。さらに、装置100のメモリは、例えばプロセッサ内のいずれかのキャッシュ・メモリなど、装置100内のどこかに物理的に配置されたメモリ・ストレージ、並びに、例えば大容量ストレージ・デバイス又は装置100に結合された別のコンピュータ上に格納された仮想メモリとして使用される任意のストレージ容量を含むと考えることができる。
装置100は、1つ又は複数のカーネル、ハイパーバイザ、オペレーティング・システム等の制御下で動作し、以下により詳細に説明されるような種々のコンピュータ・ソフトウェア・アプリケーション、コンポーネント、プログラム、オブジェクト、モジュール、データ構造等を実行するか、又は他の方法でこれらに依存する。さらに、種々のアプリケーション、コンポーネント、プログラム、オブジェクト、モジュール等は、例えば、分散型又はクライアント・サーバ・コンピューティング環境において、ネットワークを介して装置100に結合された別のコンピュータ内の1つ又は複数のプロセッサ上で実行することもでき、それにより、コンピュータ・プログラムの機能を実施するのに必要な処理を、ネットワーク上で複数のコンピュータに割り当てることができる。
例えば、図2は、装置100のホスト106内に常駐し得る種々のソフトウェア・コンポーネント118〜132を示す。ハイパーバイザ又は仮想マシン・モニタ(VMM)118は、1つ又は複数の仮想マシン(VM)120をホストすることができ、各仮想マシン120に対して、ここでは1つ又は複数の仮想プロセッサ(VP)122、仮想メモリ(VMem)124及び仮想入力/出力(VIO)リソース126により表される、ホスト106の物理ハードウェア・リソースの一部(例えば、プロセッサ、メモリ、及び/又は1つ又は複数のプロセッサ・ノード104と関連したIOリソース)を割り当てることができる。次いで、各仮想マシン120は、オペレーティング・システム128、及び随意的にミドルウェア130、並びに1つ又は複数のジョブ及び/又はアプリケーション132をホストすることができる。論理パーティションとも呼ぶことができる各仮想マシン120、仮想サーバ又は仮想コンピュータは、別個の物理コンピュータをエミュレートするような方法で動作することができ、従って、事実上、コンピュータがホストすることができるあらゆるソフトウェア・コンポーネントをホストできることが理解されるであろう。
付加的なハードウェア及び/又はソフトウェア・コンポーネント、例えば、大容量ストレージ・ハードウェア、プリンタ若しくはディスプレイなどの外部入力/出力デバイス、及び、例えば、これを通して装置のハードウェア及び/又はソフトウェア構成を管理者により管理することができるハードウェア管理コンソール(HMC)などの管理ハードウェア及び/又はソフトウェアも、装置100内に常駐し得る。さらに、示される実施形態において、1つ又は複数のストレージ・ファブリック138を通じた1つ又は複数のストレージ・システム136への接続のような、1つ又は複数の外部ネットワーク134への接続をサポートすることもできる。仮想化環境は、無数の方法で実装することができ、かつ、無数のハードウェア及び/又はソフトウェアの変形を含むことができ、従って、本発明は、本明細書で開示される特定の実装に制限されるものではない。
本発明は、システム、方法、及び/又はコンピュータ・プログラム製品とすることができることが理解されるであろう。コンピュータ・プログラム製品は、1つ又は複数のプロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの:すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び/又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び/又はエッジ・サーバを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体内に格納する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、又は、「C」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネットサービスプロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個人化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施する命令を含む製品を製造するようにすることもできる。
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにすることもできる。
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
さらに、コンピュータ可読プログラム命令は、その1つ又は複数をひとまとめにして「プログラム・コード」と呼ぶことができ、そのような命令が本発明の特定の実施形態において実施されるアプリケーションに基づいて、本明細書で識別することができる。しかしながら、以下の任意の特定のプログラム命名は、単に便宜のために使用され、このため、本発明は、そのような命名によって識別される及び/又は暗示される、いずれかの特定のアプリケーションにおいてのみ使用されることには限定されるべきでないことを認識されたい。さらに、コンピュータ・プログラムがルーチン、プロシージャ、メソッド、モジュール、オブジェクト等に編成され得る通常、数限りない様式、並びに通常のコンピュータ内に存在する様々なソフトウェア層(例えば、オペレーティング・システム、ライブラリ、API、アプリケーション、アプレット等)の間にプログラム機能が割り当てることができる様々な様式を考慮すると、本発明は、本明細書において説明される特定の編成及びプログラム機能の割り当てに限定されないことが認識されるであろう。
図1及び図2示される例示的な環境は、本発明を限定することを意図していないことが、当業者には認識されるであろう。実際、当業者であれば、本発明の範囲を逸脱することなく、他の代替的なハードウェア環境及び/又はソフトウェア環境を使用できることが理解するであろう。
ページ・フォールト解決法のための埋め込まれたページ・サイズ・ヒント
アドレス変換は、最新のデータ処理システムにサポートされ、通常、仮想メモリと実メモリとの間の変換を解決するために、ハードウェア及びソフトウェアの両方に依存する。例えば、図3は、例示的なデータ処理システム200におけるアドレス変換機能を示す。このデータ処理システムにおいて、複数のページ・サイズが、セグメント化のようにサポートされ、2レベルの変換が行われる、すなわち最初に実効アドレスから仮想アドレスへ、次に仮想アドレスから実アドレスへの変換が行われる。しかしながら、本発明は、2レベルの変換に限定されるものではなく、アドレスが仮想アドレス空間と実アドレス空間との間で変換される異なる環境において実施することができる。このため、以下の説明では、プログラム命令により参照され実アドレス空間内のアドレスに変換されるアドレスを、「仮想アドレス」という。
例えば図3に示されるように、仮想メモリ・アドレスを読み取ろうとする若しくはこれに書き込もうとするなどのメモリ・アクセス要求、又はメモリを割り当てる要求は、最初に、幾つかの実施形態において、別個のデータ特有及び命令特有のユニット(dERAT及びiERAT)を用いて実施することができる、例えば実効アドレス−実アドレス変換(Effective to Real Address Translation、ERAT)ユニット208など、プロセッサ202内のハードウェア変換論理により処理することができる。ERAT208においてヒットが生じた場合、プロセッサ202内でアドレス変換を処理できるが、ミスが生じた場合、メモリ・アクセス要求は、一般に、プロセッサ202と同じチップであることも又はそれとは異なるチップであることもある、メモリ・コントローラ又はメモリ管理ユニット(MMU)204に転送される。MMU204は、1つ又は複数の変換ルックアサイド・バッファ(TLB)及び/又はセグメント・ルックアサイド・バッファ(SLB)210を含むハードウェア変換論理を用いて要求を処理することができる。TLB及び/又はSLB210におけるヒットに応答して、メモリ・アクセス要求は、MMU210内で処理できるが、ミスが生じた場合、まとめてハードウェア・ページ・テーブル(HPT)212と呼ばれる種々のソフトウェア・データ構造にアクセスするために、通常、ページ・フォールトが、ソフトウェア206に、例えばオペレーティング・システム(OS)、ハイパーバイザ、仮想マシン・モニタ、カーネル、又はデータ処理システム内の他の下位レベル・ソフトウェアに知らせられ、これによりページ・フォールトが解決される。
各ERAT208、SLB/TLB210及びHPT212は、2つの異なるアドレスの間、例えば仮想又は実効アドレスと実アドレスの間でマッピングする少なくともアドレス変換データを含み得ることが理解されるであろう。幾つかの実施形態において、このアドレス変換データは、ページ・テーブル・エントリ(PTE)として実装し、そう呼ぶことができる。しかしながら、PTEは、特定のプロセス若しくはプロセスのタイプ、又は特定のアクセス・タイプ(例えば、読み取り専用)へのアクセスを制限する保護データ、有効/無効インジケータ又はダーティ(dirty)インジケータのようなステータス・データ、カウンタ若しくは最長時間未使用(least recently used)インジケータ、ページ・サイズ・データ等のような追跡データといった、付加的な情報を含み得ることが理解されるであろう。さらに、幾つかの実施形態において、各ERAT208、SLB/TLB210及びHPT212のPTEを同じように構成することができ、他の実施形態において、PTEは、メモリ階層の異なるレベルにおいて互いに異なることがあり、かつ、他のレベルにおける異なる、付加的な、又はより少ないデータを含み得るが、メモリ階層の異なるレベル間で行き来するPTE又は仮想/実効アドレスへの言及は、階層のそのレベルに実装される特定のデータに適した形式でのPTE又は仮想/実効アドレスの書式設定と関係する、データの修正、付加的なデータの補足、及び/又はPTE又は仮想/実効アドレスと関連したデータの廃棄を含むことができる。
本発明の種々の実施形態において、多種多様のアドレス変換の実装を用いることができ、従って、本発明は、図3の実装に限定されるものではないことが理解されるであろう。例えば、Non−Uniform Memory Access(NUMA)環境、マルチコア環境、及び他の環境において、アドレス変換論理及び/又は機能を、データ処理システムの全体にわたって異なるように分散させることができ、データ構造、バッファ、テーブル等の種々の組み合わせを、本発明に従ったデータ処理システムのアドレス変換機能により用いられるアドレス変換データ又はPTEを維持するために用いることができる。例えば、幾つかの実施形態において、HPT212は、ハードウェア変換論理においてミスするアドレス変換動作と関連付けられた待ち時間を最小にしようとして、複数のテーブル、マルチレベル・テーブル、ネスト化テーブル(nested table)、仮想化テーブルを用いて実装することができる。複数のデータ構造に潜在的にアクセスする必要性、及び、より低速のメモリ又はさらに大容量又は永続性ストレージからそのデータ構造を取り出す潜在的な必要性のために、幾つかの実施形態において、アドレス変換動作の実施と関連付けられた待ち時間は変化し得ることも理解されるであろう。
さらに、本発明の種々の実施形態において、複数のページ・サイズがサポートされ得ることが理解されるであろう。一般に、デフォルト・サイズ(例えば、幾つかの実施形態において、4K又は4096バイト)より大きいページを、ラージ(large)ページ又はヒュージ・ページと呼ぶことがある。例えば、プログラムが比較的大量の連続データ及び/又は命令を含む場合、及び/又は大きいデータ・ブロックに頻繁に及び/又は繰り返しアクセスされる場合など、例えば、何らかのタイプのワークロードにおいて、ラージ・ページは有用であり得る。対照的に、他のワークロード、例えばメモリ・アクセスがより多く分散され、ランダムであるワークロードにおいて、より小さいページ・サイズは、より良好な性能を提供し得る。
幾つかの従来の手法において、ブート時にデフォルト・サイズより大きいページが割り当てられることが必要であり、一方、他の従来の手法においては、「トランスペアレントな」ヒュージ・ページの使用により事前割り当てを回避することができ、そこで、オペレーティング・システム又は同様のソフトウェアは、連続したページを集めてラージ・ページ又はヒュージ・ページに変換しようと試みる。しかしながら、一般に、オペレーティング・システムは、ラージ・ページ又はヒュージ・ページの使用に特に適した条件を認識しておらず、従って、オペレーティング・システム及び他のソフトウェア・ベースのアドレス変換論理は、通常、異なるタイプのワークロード又はシナリオを考慮するように、異なるサイズのページをインテリジェントに割り当てる能力が制限されている。
しかしながら、本発明に従った実施形態は、ページ・サイズ・ヒントを、オペレーティング・システム、ハイパーバイザ/仮想マシン・マネージャ、又はデータ処理システムにおける他のソフトウェア実装ページ・フォールト処理論理に提供することにより、データ処理システムにおけるメモリの割り当て及びページ・フォールトの処理を最適化するために使用することができる。次に、ページ・サイズ・ヒントを、例えば、こうしたデータ処理システム内で実行されているプログラム内のプログラム・コード命令により要求される仮想アドレスに、特に、仮想アドレスの予約済み及び/又は未使用フィールド内に埋め込むことができる。次に、ページ・サイズ・ヒントをソフトウェア実装ページ・フォールト処理論理により読み取り、メモリ・アクセス要求に応じて割り当てられるページ・サイズを制御し、及び/又はメモリ・アクセス要求に応じて1つ又は複数のハードウェア・ページ・テーブルからのアドレス変換データの検索を最適化することができる。
本発明に従った幾つかの実施形態において、例えば、プロセッサのハードウェア変換論理により生じるページ・フォールトを、ソフトウェア・ページ・フォールト・ハンドラによって検出することができ、仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断し、次に、判断したページ・サイズ・ヒントを用いて、仮想アドレスに対してソフトウェア・アドレス変換動作を実行することができる。以下により明らかになるように、幾つかの実施形態において、そうすることにより、ページ・サイズ関するヒントを、実行中のプログラムによりソフトウェア・ページ・フォールト・ハンドラにシームレスに伝達し、ハードウェア・ページ・テーブル等のようなデータ構造へのアクセスと関連付けられた待ち時間を部分的に減らすことにより、メモリ割り当て及び/又はアドレス変換を加速することが可能になる。
この点で、ハードウェア変換論理は、例えばプロセッサ、プロセッサ・コア、メモリ・コントローラ、メモリ管理ユニット、キャッシュ・コントローラ等内で実装することができ、ERAT、SLB、TLB等のような種々のデータ構造を含む種々のタイプのハードウェア実装アドレス変換機能を含むと考えることができる。同様に、ソフトウェア・ページ・フォールト・ハンドラは、例えば、オペレーティング・システム、カーネル、ハイパーバイザ、仮想マシン・モニタ、又は種々のタイプのページ・テーブルを含む種々のタイプの変換データ構造にアクセスするための他の下位レベル・ソフトウェア内に実装することができる、種々のタイプのソフトウェア実装アドレス変換機能を含むと考えることができる。
幾つかの実施形態において、ソフトウェア・ページ・フォールト・ハンドラは、種々のタイプのソフトウェア・アドレス変換動作を実施するように構成することができる。実行され得る1つのタイプのソフトウェア・アドレス変換動作は、ページ・テーブル・エントリ、又は仮想アドレスから実アドレスへのアドレス変換を完了するのに用いられる他のアドレス変換データの検索である。実行され得る別のタイプのソフトウェア・アドレス変換動作は、例えば、要求される仮想アドレスが実アドレスにまだマッピングされておらず、どのメモリ・ページもまだその仮想アドレスに対して割り当てられていないと判断することに応答して、新しいメモリ・ページを割り当てることである。付加的なソフトウェア・アドレス変換動作は、メモリ・ページの修正又は割り当て解除、主メモリへの及びそれからのメモリ・ページのスワップ等といった種々の管理動作を含むことができる。
ここで図4を参照すると、ページ・サイズ・ヒントの通信と関連して用いるのに適した例示的な実効又は仮想アドレス形式が220で示される。形式220は、特に、本発明の幾つかの実施形態と関連して用いることができる多数の典型的なアドレス形式のいずれかを表し、実効又は仮想アドレスに対応するメモリ・ページへのオフセットを表すオフセット・フィールド222、並びに、合わせて仮想ページについての一意の識別子を表すインデックス・フィールド224及びタグ・フィールド226を含む。例えば、インデックス・フィールド224は、PTEを含むデータ構造をアドレス指定するために使用することができ、タグ・フィールド226は、インデックスが付けられたページを同じインデックスにマッピングされた他のページと区別するために使用することができる。幾つかの実施形態においては、タグ・フィールド226が省略されることがあり、インデックス・フィールド224は、データ構造内のページをアドレス指定するのに十分である。
形式220は、ステータス情報、アクセス制御情報、又は本開示の利点を有する当業者により理解されるような他の情報のような情報を含むことができる、1つ又は複数のフラグ228を随意的に含むこともできる。
形式220は、未使用及び予約済みの1つ又は複数のビットを含む予約済みフィールド230を含むこともできる。本発明の文脈における、未使用及び予約済みとは、将来の使用のためにシステムにより明示的に予約され、かつ、アドレス変換目的のため若しくは他の場合にはメモリ内の記憶場所にアドレス指定するために使用されていない仮想又は実効アドレス内のフィールドを指す。このフィールドは、予約済みフィールド230内にあり、従って、本発明に従った実施形態において、ページ・サイズ・ヒントを符号化することができる。
1つの例示的な実装として、例えば、Power8アーキテクチャで実装されるような、64ビット基数(Radix)変換の場合、10ビット(例えば、ビット2〜11のビッグ・エンディアン(Big Endian)又はビット61〜52のリトル・エンディアン(Little Endian)が、アーキテクチャにより予約され、アドレス変換のため又は他の場合にはメモリを参照するために使用されていない。1つの例示的な実施形態において、このフィールドの1つ又は複数のビットを用いて、以下のテーブルIに示されるようなページ・サイズ・ヒントを提供することができる。
Figure 2019523920
上記の符号化において、実効アドレスは、コンパイラ、リンカ及びアプリケーションが、変換のためにオペレーティング・システム又は他のソフトウェア・ベースのアドレス変換機能を要求するための規則(convention)になり得る。さらに、幾つかの実施形態において、この符号化をヘッダ・ファイルに組み込み、オペレーティング・システム、コンパイラ、リンカ、及び/又はアプリケーションの新しいコンパイルのために変更することができる。
幾つかの実施形態において、予約済みフィールド230における非ゼロ値は、メモリ管理ユニット又は他のハードウェア変換論理による不正なアドレス条件のアサーション(assertion)をもたらし得ることが理解されるであろう。従来より、一般に、こうした条件により、オペレーティング・システムが、アプリケーション又はデバイス・ドライバを終了させる。しかしながら、幾つかの実施形態において、この条件を捕捉し使用して、ページ・サイズ・ヒントをアドレス変換目的のために提供することができる。また、幾つかの実施形態において、ハードウェア変換論理は、条件を知らせることを防止するように(すなわち、ハードウェア変換論理が単に非ゼロ・ビットを無視するように)イネーブル又はディスエーブルにすることができる構成可能なモードを含むことができる。従って、ページ・サイズ・ヒントが使用されるたびに、ハードウェア変換論理のモードを適切に設定することができる。
ここで図5を参照すると、この図は、本発明に従った方法でページ・サイズ・ヒントのサポートを組み込むソフトウェア実装ページ・サイズ・フォールト処理論理を実装するソフトウェア・ページ・フォールト・ハンドラのための動作シーケンス250を示す。この動作シーケンスは、例えば、ハードウェア変換論理によるページ・フォールトのアサーションに応答して開始することができ、OS、ハイパーバイザ、仮想マシン・モニタ、カーネル、又は他の下位レベル・ソフトウェアにおいて実施することができる。さらに、シーケンス250は、まだ割り当てられていない実効アドレスと関連付けられたページ・フォールトに応じて新しいメモリ・ページの自動割り当てを実施するが、他の実施形態においては、メモリ割り当てを、ページ・フォールト処理とは別個に処理できることが理解されるであろう。
シーケンス250は、例えば実効アドレスなどの仮想アドレスを有した状態で提示され、ブロック252において、環境についてのハードウェア・ページ・テーブルを実装する1つ又は複数のデータ構造におけるマッチング・ページ・テーブルを検索することから始まる。マッチング・ページ・テーブル・エントリの検索(図6と関連して以下に説明される)と関連した動作を当面の間遅らせ、制御は次のブロック254に移り、そこで、マッチング・ページ・テーブルが見つかったかどうかに関する判断を行う。見つかった場合、制御はブロック256に進み、特定されたページ・テーブル・エントリを用いて、本開示の利点を有する当業者には明らかな方法で、ページ・フォールトに対応する。しかしながら、見つからなかった場合、ブロック254は、制御をブロック258に渡し、実効アドレスの予約済みビットの1つ又は複数にアクセスして、例えばマスクを適用することにより、及び、マスクされていないビットのいずれかが非ゼロ値であるかどうかを判断することによって、ページ・サイズ・ヒントが実効アドレスに符号化されたかどうかを判断する。マスクされていないビットが全てゼロである場合、いずれのページ・サイズ・ヒントも実効アドレスに符号化されないので、ブロック260は、制御をブロック262に渡し、デフォルトのメモリ・ページ・サイズを有する新しいメモリ・ページを実効アドレスに割り当てる。新しいメモリ・ページの割り当ては、メモリ・ページの新しいページ・テーブル・エントリを作成することによりプロセスのためのメモリ・ページを予約すること、及び、そのページを主メモリにスワップすることの両方、又は他の動作、又は本開示の利点を有する当業者には明らかであろう動作の組み合わせを含むことができる。特に、ハードウェア・ページ・テーブルが異なるページ・サイズに対応する複数のページ・サイズ特有のデータ構造を組み込んでいる場合、新しいページ・テーブル・エントリの作成は、デフォルト・ページ・サイズに特有のデータ構造内に新しいページ・テーブル・エントリを作成することを含むことができる。
他方、ブロック260が、実効アドレスのマスクされていないビット内に非ゼロ値が格納されていると判断する場合、ページ・サイズ・ヒントが、実効アドレスに符号化されており、制御はブロック264に移り、ページ・サイズ・ヒントの要求されるメモリ・ページ・サイズが許容されるかどうかを判断する。例えば、要求されるメモリの量が利用可能でない場合、要求されるメモリ・ページ・サイズが拒否されることがある。許容されない場合、制御はブロック262に進み、デフォルト・ページ・サイズを割り当てるが、許容される場合、制御は代わりにブロック266に進み、ページ・サイズ・ヒントにより示される要求されるページ・サイズを有する新しいメモリ・ページを割り当てる。例えば、異なるデータ構造が異なるページ・サイズと関連付けられたページ・テーブル・エントリを保持する場合、ページ・サイズ・ヒントにより示されるページ・サイズ特有のデータ構造内の新しいメモリ・ページについて、新しいページ・テーブル・エントリを作成することができる。ブロック256、262、又は266のいずれかの完了時、ページ・フォールトは処理されたと見なされ、シーケンス250が完了する。
従って、シーケンス250において、実効アドレスに符号化されたページ・サイズ・ヒントを用いて、新しいページ・テーブル・エントリを作成し、ページ・サイズ・ヒントにより示されるページ・サイズに基づいて新しいメモリ・ページを割り当てることができる。しかしながら、幾つかの実施形態において、ページ・サイズ・ヒントは、既に割り当てられているメモリ・ページのページ・フォールトの処理を加速し及び/又は簡単化するために使用することができる。例えば、図6は、図5のPTEブロック252の検索を実施するための例示的な動作シーケンスを示す。メモリ割り当てが、ページ・フォールトの処理とは別個に処理される実施においても、同様の動作シーケンスを用い得ることが理解されるであろう。
最初に、ブロック280において、ページ・フォールト・ハンドラに入力された実効アドレスの予約済みビットの1つ又は複数にアクセスして、例えば、マスクを適用すること、及び、マスクされていないビットのいずれかが非ゼロ値であるかどうかを判断することにより、ページ・サイズ・ヒントが実効アドレスに符号化されたかどうかを判断する。マスクされていないビットが全てゼロである場合、ブロック282は、制御をブロック284に渡し、種々のハードウェア・ページ・テーブルのデータ構造をウォークして、デフォルト・ページ・サイズを呈する実効アドレスを求めてマッチング・ページ・テーブル・エントリを見つけようと試みる。幾つかの実施形態において、ページ・サイズ・ヒントを欠いていることにより、デフォルト・ページ・サイズ以外のページ・サイズを有するメモリ・ページに対応するマッチング・ページ・テーブル・エントリを特定することができる。本開示の利点を有する当業者により理解されるように、マッチング・ページ・テーブル・エントリの特定を試みるために、幾つかの異なるデータ構造にアクセスする必要があることがあり、さらに、大容量ストレージから取り出す必要があることもあり得るので、ブロック284において実行される検索は、計算コストが高いことも理解されるであろう。従って、ブロック286は、マッチング・ページ・テーブル・エントリが見つかったかどうかを判断し、見つかった場合、ブロック288において、マッチング・ページ・テーブル・エントリが戻される。しかしながら、見つからなかった場合、制御はブロック290に移り、見つからなかった(not found)という表示を戻す。
他方、ブロック282が、実効アドレスのマスクされていないビット内に非ゼロ値が格納されていると判断した場合、ページ・サイズ・ヒントは実効アドレスに符号化され、制御はブロック292に移り、ページ・サイズ・ヒントにより示されるページ・サイズと関連付けられた1つ又は複数のデータ構造を検索する。予想されるページ・サイズが既知の場合、従って、ブロック292において実行される検索は、全検索と比べて計算コストが低く、従って、ページ・サイズ・ヒントにより支援される検索は、全検索よりも効率的であり、幾つかの実施形態においては、ページ・テーブル・フォールトと関連付けられた待ち時間を低減させる。
次に、ブロック294は、マッチング・ページ・テーブルが見つかったかどうかを判断し、見つかった場合、制御はブロック288に移り、マッチング・ページ・テーブル・エントリを戻す。他の場合には、ブロック294は、制御をブロック284に渡し、全検索を試みる。しかしながら、他の実施形態においては、全検索は必要とされず、代わりに、ブロック294は、制御を直接ブロック290に渡すことによって、見つからなかったという表示を戻すことができる。従って、ブロック252において、実効アドレスに符号化されたページ・サイズ・ヒントを用いて、ページ・サイズ・ヒントが示すページ・サイズに基づくページ・テーブル・エントリの位置特定を加速することができる。幾つかの実施形態において、例えば、符号化されたページ・サイズ・ヒントを欠いているメモリ・アクセス命令についてのハードウェア・ページ・テーブルをウォークするときに通常アクセスされる、少なくとも1つのデータ構造のアクセスを迂回する結果として、加速が生じ得る。
ページ・サイズ・ヒントは、本発明に従った多数の方法で実効又は仮想アドレスに符号化できることが理解されるであろう。幾つかの実施形態において、例えば、ページ・サイズ・ヒントは、例えば、プログラムのコンパイル、最適化、リンク、インストール、又はデプロイの際のプログラムの構築と関連して仮想アドレスに符号化することができる。こうした実施形態において、プログラムの構築中、ページ・サイズ・ヒントは、プログラム内のメモリ・アクセス命令が参照する1つ又は複数の仮想アドレスの未使用及び予約済みフィールドに符号化することができ、メモリ・アクセス命令によりプログラムを構築することができ、プログラムが実行するデータ処理システムのハードウェア変換論理によって、メモリ・アクセス命令により引き起こされるページ・フォールトを検出すると、ソフトウェア・アドレス変換動作を実行しているとき、ページ・サイズ・ヒントを使用することができる。
例えば、図7は、本発明の幾つかの実施形態においてサポートできる3つの異なるシナリオを含むプログラム構築の動作シーケンス300を示す。図7の例において、ページ・サイズ・ヒントは、コンパイラ・ディレクティブ(compiler directive)に応答して(ブロック302〜304)、最適化に応答して(ブロック306〜310)、及び実行可能ファイルの生成に応答して(ブロック312〜314)、メモリ・アクセス命令に符号化されるものとして示される。例えば、ソース・コードの構文解析、中間コードの生成、種々のコード最適化の実行、コードのパッケージング、実行可能コードの生成、コードと他の実行可能コード及び/又はライブラリとのリンク、コードのデプロイ又はインストール等の、プログラムの構築中に実行される他の動作は、以下の説明を簡単化する目的のために図7から省略されるが、こうした動作は、通常、当技術分野において理解され、本明細書で説明される機能のこれらの動作のいずれかへの組み込みは、十分に本開示の利点を有する当業者の能力の範囲内にあることが理解されるであろう。しかしながら、図7は、ブロック316において、構築の結果として1つ又は複数の実行可能ファイルの出力を示しており、それは、その実効又は仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを有する1つ又は複数のアクセス命令を含むことができることが理解されるであろう。また、幾つかの実施形態において、図7に示される3つのシナリオの全てが、サポートされないこともあることが理解されるであろう。他の実施形態においては、異なるシナリオが、ページ・サイズ・ヒントをプログラムのメモリ・アクセス命令に符号化するために使用されることがあり、従って、本発明は、図7に示される特定のシナリオに限定されるものではないことも理解されるであろう。
例えば、ブロック302〜304は、アプリケーション開発者が、コンパイラ・ディレクティブを、開発中のアプリケーションのソース・コード内に挿入するシナリオを示し、このコンパイラ・ディレクティブを、コンパイラにより検出し(ブロック302)、コンパイラに、ページ・サイズ・ヒントをメモリ・アクセス命令に符号化するように、プログラム内の1つ又は複数のメモリ・アクセス命令を修正させる(ブロック304)ことができる。コンパイラ・ディレクティブは、例えば、ソース・コードの全て又はセクションのページ・サイズ・ヒントの符号化をイネーブル又はディスエーブルにすることができる。コンパイラ・ディレクティブはまた、特定のメモリ割り当て命令、特定のコードセクション、又は特定のタイプの命令(例えば、データをフェッチする命令対他のプログラム命令をフェッチする命令等)に対して所望のページ・サイズを指定することもできる。ディレクティブは、個々の命令、コードのセクション、特定の方法、クラス若しくはモジュール、又はプログラム全体と関連付けることができる。一般に、ディレクティブは、アプリケーション開発者がプログラム構築プロセスを制御し、開発中のアプリケーションに、アプリケーション開発者が所望するページ・サイズを使用させることを可能にする。しかしながら、他の実施形態においては、開発者は、他の方法でのページ・サイズ・ヒントの使用を制御することもできる。
他方、ブロック306〜310は、例えば最適化の際、特定のページ・サイズが特定のメモリ・アクセス命令又は要求に最適であることをコンパイラが識別するシナリオを示す。例えば、ブロック306は、最適化の一部として、ページ・サイズ・ヒントの適切な候補を識別しようとして、メモリ要求パターンを分析することができる。こうした候補の識別に応答して、ブロック308は、制御をブロック310に方向転換し、適切なページ・サイズを求めてページ・サイズ・ヒントを符号化するように、こうした候補と関連付けられたメモリ・アクセス命令を修正することができる。適切な候補は、例えば、プログラム内のコードのクリティカル・セクションに一貫してアクセスされるメモリの量が、デフォルト・ページ・サイズより大きいと判断されるときに存在するので、他の場合には他のメモリ・トラフィックに応じて内外にスワップされることがある複数のページ内ではなく、単一のより大きいページ内に全メモリの量を保持するのに有利となる。
ブロック312〜314は、コンパイラ又はリンカが、構築プロセス中に生成されるいずれかの実行可能ファイルが、特定のページ・サイズ内に適合するかどうかを判断することができる更に別のシナリオを示す。こうしたシナリオの検出に応答して、例えば、ブロック312は、制御をブロック314に渡し、例えば、ページ・サイズ・ヒントを、プログラム(又は、その特定のモジュール、ライブラリ、セクション、クラス、ファイル等)についてのメモリを割り当てる命令に符号化することによって、所定のページ・サイズでロードするように、プログラムを構成することができる。従って、例えば、コンパイルされたアプリケーションが単一の2MBページ内に適合すると判断できる場合、幾つかの実施形態において、ロード時に2MBページを要するように、アプリケーションを構成することが望ましく、アプリケーション全体がメモリの単一のページにロードされる。そうすることで、アプリケーションのために種々のモジュール又はコードのセクションをロードするためのページ・スワップが回避され、それにより、適切なシナリオにおけるアプリケーション性能全体が改善する。
従って、本発明に従った実施形態は、オペレーティング・システム、ハイパーバイザ、仮想マシン・モニタ、カーネル、又はページ・フォールトの処理と関連して用いられるデータ処理システム内の他の下位レベルのソフトウェアにおいて、ページ・サイズ・ヒントをソフトウェア・ページ・フォールト処理機能に伝達するために、仮想又は実効アドレスの未使用及び予約済みビットを別の用途に使用することを可能にする。さらに、幾つかの実施形態において、実際の符号化を、プログラムの実行前に行うことができ、幾つかの実施形態においては、プログラムのコンパイル、リンク、デプロイ、又はインストール中に行うことができる。
さらに、幾つかの実施形態において、構築プロセスは、仮想又は実効アドレスの未使用及び予約済みフィールド内の非ゼロ値に応答して、不正なアドレス通知の生成をディスエーブルにするモードで動作するように、データ処理システムのプログラム・ハードウェア変換論理を構成するように、プログラム内の1つ又は複数の命令の組み込みを含むこともできる。他の実施形態において、ハードウェア変換論理は、不正なアドレス通知を生成しないことがあり、幾つかの実施形態においては、適切なモードの選択は、例えば、オペレーティング・システムによってページ・サイズ・ヒント対応プログラムの実行とは別々に実行することができる。
本発明の種々の実施形態の説明は、説明を目的として提示されたが、網羅的であること、又は開示された実施形態に限定することを意図したものではない。当業者には、説明された実施形態の範囲及び趣旨から逸脱することなく、多くの修正及び変形が明らかであろう。本明細書で使用される用語は、実施形態の原理、実際の用途、若しくは市場で見出される技術に優る技術的改善を最も良く説明するために、又は当業者が本明細書に開示される実施形態を理解するのを可能にするために、選択された。
100:データ処理環境又は装置
102:マルチノード・データ処理システム
104:プロセッサ・ノード
106:ホスト
110、202:プロセッサ
112:メモリ・デバイス
114:入力/出力(I/O)ハードウェア
120:仮想マシン
122:仮想プロセッサ(VP)
124:仮想メモリ(VMem)
126:仮想入力/出力(VIO)リソース
128:オペレーティング・システム
130:ミドルウェア
132:ジョブ及び/又はアプリケーション
136:ストレージ・システム
138:ストレージ・ファブリック
204:メモリ・コントローラ又はメモリ管理ユニット(MMU)
206:ソフトウェア
208:実効アドレス−実アドレス変換(ERAT)ユニット
210:変換ルックアサイド・バッファ(TLB)及び/又はセグメント・ルックアサイド・バッファ(SLB)
212:ハードウェア・ページ・テーブル(HPT)
220:実効又は仮想アドレス形式
222:オフセット・フィールド
224:インデックス・フィールド
226:タグ・フィールド
230:予約済みフィールド
250、300:シーケンス

Claims (20)

  1. 複数のメモリ・ページ・サイズをサポートするタイプのデータ処理システムにおいてページ・フォールトを処理する方法であって、
    プロセッサのハードウェア変換論理により発生し、前記プロセッサが実行するプログラム・コードにより要求される仮想アドレスと関連付けられたページ・フォールトを検出することと、
    前記仮想アドレスから、前記仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断することと、
    前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについてのソフトウェア・アドレス変換動作を実行することと、
    を含む方法。
  2. 前記ページ・サイズ・ヒントは、前記プログラム・コードを実行する前に前記未使用及び予約済みフィールドに符号化される、請求項1に記載の方法。
  3. 前記ページ・サイズ・ヒントは、前記プログラム・コードのコンパイル、リンク、デプロイ、又はインストール中に前記未使用及び予約済みフィールドに符号化される、請求項2に記載の方法。
  4. 前記ハードウェア変換論理は、第1及び第2のモードで動作するように構成可能であり、前記第1のモードにおいて、前記ハードウェア変換論理は、前記仮想アドレスの前記未使用及び予約済みフィールド内の1つ又は複数の値に応答して不正なアドレス通知を生成し、前記第2のモードにおいて、前記仮想アドレスの前記未使用及び予約済みフィールド内の前記1つ又は複数の値に応答した前記ハードウェア変換論理による前記不正なアドレス通知の生成がディスエーブルにされ、前記方法は、前記第2のモードにおいて前記ハードウェア変換論理を構成することをさらに含む、請求項1に記載の方法。
  5. 前記ハードウェア変換論理は、前記第1のモードにおいて、前記仮想アドレスの前記未使用及び予約済みフィールド内の非ゼロ値に応答して不正なアドレス通知を生成するように構成される、請求項4に記載の方法。
  6. 利用可能なメモリに基づいて、前記判断したページ・サイズ・ヒントに対応するページ・サイズを選択的に割り当てることをさらに含む、請求項1に記載の方法。
  7. 前記ページ・サイズ・ヒントを判断することは、ハードウェア・ページ・テーブルの1つ又は複数のデータ構造を検索する前に実行され、前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについての前記ソフトウェア・アドレス変換動作を実行することは、前記判断したページ・サイズ・ヒントを用いて前記1つ又は複数のデータ構造にアクセスすることを含む、請求項1に記載の方法。
  8. 前記1つ又は複数のデータ構造は、特定のページ・サイズのページについてのアドレス変換情報を格納するように構成された少なくとも1つのページ・サイズ特有データ構造を含み、前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについての前記ソフトウェア・アドレス変換動作を実行することは、前記判断したページ・サイズ・ヒントを用いて、前記ページ・サイズ・ヒントと関連付けられた前記ページ・サイズについてのアドレス変換情報を格納するように構成された前記ページ・サイズ特有データ構造にアクセスすることを含む、請求項7に記載の方法。
  9. 前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについての前記ソフトウェア・アドレス変換動作を実行することは、符号化されたページ・サイズ・ヒントを欠いているメモリ・アクセス命令のために前記ハードウェア・ページ・テーブルをウォークするときにアクセスされる少なくとも1つの他のデータ構造のアクセスを迂回することを含む、請求項8に記載の方法。
  10. 前記プロセッサが実行するプログラム・コードにより要求される第2の仮想アドレスと関連付けられた第2のページ・フォールト及び符号化されたページ・サイズ・ヒントを欠いていることに応答して、前記ハードウェア・ページ・テーブルの複数のデータ構造をウォークし、前記第2の仮想アドレスに対応するページ・テーブル・エントリを識別することをさらに含む、請求項9に記載の方法。
  11. 前記ページ・サイズ・ヒントを判断することは、前記仮想アドレスについてのメモリのページを割り当てる前に実行され、前記方法は、前記ページ・サイズ・ヒントにより示されるページ・サイズを有する前記仮想アドレスに対して前記メモリのページを割り当てることをさらに含む、請求項1に記載の方法。
  12. 前記ページ・サイズ・ヒントにより示される前記ページ・サイズが許容されると判断することに応答して、前記ページ・サイズ・ヒントにより示されるページ・サイズを有する前記仮想アドレスに対して前記メモリのページを割り当てることが許容される、請求項11に記載の方法。
  13. 前記プロセッサが実行するプログラム・コードにより要求される第2の仮想アドレスと関連付けられた第2のページ・フォールト及び符号化されたページ・サイズ・ヒントを欠いていることに応答して、デフォルト、ページ・サイズを有する前記仮想アドレスに対してメモリのページを割り当てることをさらに含む、請求項11に記載の方法。
  14. 前記仮想アドレスから、前記未使用及び予約済みフィールドにおける複数のビットの少なくともサブセット内の非ゼロ値を検出することによって、ページ・サイズ・ヒントが前記仮想アドレスの前記未使用及び予約済みフィールドに符号化されることを判断することをさらに含む、請求項1に記載の方法。
  15. プログラムを構築する方法であって、
    ページ・サイズ・ヒントを、メモリ・アクセス命令により参照される仮想アドレスの未使用及び予約済みフィールドに符号化することと、
    前記メモリ・アクセス命令により前記プログラムを構築することであって、前記プログラムが実行するデータ処理システムのハードウェア変換論理によって、前記メモリ・アクセス命令により発生するページ・フォールトの検出時、ソフトウェア・アドレス変換動作を実行するときに前記ページ・サイズ・ヒントが使用される、構築することと、
    を含む、方法。
  16. 前記ページ・サイズ・ヒントを前記メモリ・アクセス命令により参照される前記仮想アドレスの前記未使用及び予約済みフィールドに符号化することは、前記プログラムのコンパイル又はリンク中に実行される、請求項15に記載の方法。
  17. 前記ページ・サイズ・ヒントを前記メモリ・アクセス命令により参照される前記仮想アドレスの前記未使用及び予約済みフィールドに符号化することは、前記プログラムの実行可能ファイルが前記ページ・サイズ・ヒントと関連付けられたページ・サイズ内に適合すると判断することに応答して実行される、請求項15に記載の方法。
  18. 前記ページ・サイズ・ヒントを、前記メモリ・アクセス命令により参照される前記仮想アドレスの前記未使用及び予約済みフィールドに符号化することは、前記プログラムの最適化中、データ・メモリ要求パターンを分析することに応答して実行される、請求項15に記載の方法。
  19. 複数のメモリ・ページ・サイズをサポートする装置であって、
    ハードウェア変換論理を含む少なくとも1つのプロセッサと、
    前記少なくとも1つのプロセッサによる実行時に、
    前記ハードウェア変換論理により発生し、前記プロセッサが実行するプログラム・コードにより要求される仮想アドレスと関連付けられたページ・フォールトを検出することと、
    前記仮想アドレスから、前記仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断することと、
    前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについてのソフトウェア・アドレス変換動作を実行することと
    によって、ページ・フォールトを処理するように構成されたプログラム・コードと、
    を含む、装置。
  20. 少なくとも1つのプロセッサによる実行時に、
    前記プロセッサのハードウェア変換論理により発生し、前記プロセッサが実行するプログラム・コードにより要求される仮想アドレスと関連付けられたページ・フォールトを検出すること、
    前記仮想アドレスから、前記仮想アドレスの未使用及び予約済みフィールドに符号化されたページ・サイズ・ヒントを判断すること、及び
    前記判断したページ・サイズ・ヒントを用いて前記仮想アドレスについてのソフトウェア・アドレス変換動作を実行すること
    によって、ページ・フォールトを処理するように構成されたプログラム・コードを含む、プログラム。
JP2018560062A 2016-05-24 2017-05-12 ページ・フォールト解決法 Active JP6764485B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/163,372 2016-05-24
US15/163,372 US10528476B2 (en) 2016-05-24 2016-05-24 Embedded page size hint for page fault resolution
PCT/IB2017/052790 WO2017203387A1 (en) 2016-05-24 2017-05-12 Page fault resolution

Publications (2)

Publication Number Publication Date
JP2019523920A true JP2019523920A (ja) 2019-08-29
JP6764485B2 JP6764485B2 (ja) 2020-09-30

Family

ID=60412685

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018560062A Active JP6764485B2 (ja) 2016-05-24 2017-05-12 ページ・フォールト解決法

Country Status (6)

Country Link
US (1) US10528476B2 (ja)
JP (1) JP6764485B2 (ja)
CN (1) CN109074316B (ja)
DE (1) DE112017001027B4 (ja)
GB (1) GB2565495B (ja)
WO (1) WO2017203387A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230012670A (ko) * 2021-07-16 2023-01-26 성균관대학교산학협력단 Numa 시스템의 동작 방법

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4325370A3 (en) * 2016-04-25 2024-04-24 Netlist, Inc. Method and apparatus for uniform memory access in a storage cluster
US11768769B2 (en) * 2016-04-25 2023-09-26 Netlist, Inc. Uniform memory access in a system having a plurality of nodes
US10572337B2 (en) 2017-05-01 2020-02-25 International Business Machines Corporation Live partition mobility enabled hardware accelerator address translation fault resolution
KR102581318B1 (ko) 2018-04-04 2023-09-25 삼성전자주식회사 반도체 메모리 모듈 및 반도체 메모리 모듈을 포함하는 메모리 시스템
US10990463B2 (en) 2018-03-27 2021-04-27 Samsung Electronics Co., Ltd. Semiconductor memory module and memory system including the same
US11461100B2 (en) * 2018-12-21 2022-10-04 Intel Corporation Process address space identifier virtualization using hardware paging hint
US10936507B2 (en) * 2019-03-28 2021-03-02 Intel Corporation System, apparatus and method for application specific address mapping
KR20210141156A (ko) * 2020-05-15 2021-11-23 삼성전자주식회사 페이지 장애에 기초하여 메모리 고장을 예견하고, 예견되는 메모리 고장을 관리하는 시스템의 운영 체계 핸들링
US11429590B2 (en) 2020-10-15 2022-08-30 International Business Machines Corporation Protecting against invalid memory references
US11983532B2 (en) 2020-12-30 2024-05-14 International Business Machines Corporation Optimize bound information accesses in buffer protection
US11966331B2 (en) 2020-12-30 2024-04-23 International Business Machines Corporation Dedicated bound information register file for protecting against out-of-bounds memory references

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60118937A (ja) 1983-11-30 1985-06-26 Sharp Corp マルチ・タスク制御用デバイス
JPH09319658A (ja) * 1996-05-24 1997-12-12 Nec Corp 可変ページサイズのメモリ管理方式
US6549997B2 (en) * 2001-03-16 2003-04-15 Fujitsu Limited Dynamic variable page size translation of addresses
US7043622B2 (en) * 2002-12-23 2006-05-09 Lsi Logic Corporation Method and apparatus for handling storage requests
US7100018B2 (en) * 2003-07-31 2006-08-29 Silicon Graphics, Inc. System and method for encoding page size information
GB0325788D0 (en) 2003-11-05 2003-12-10 Ibm Memory allocation
US20060036830A1 (en) 2004-07-31 2006-02-16 Dinechin Christophe De Method for monitoring access to virtual memory pages
US7734842B2 (en) * 2006-03-28 2010-06-08 International Business Machines Corporation Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages
US7681012B2 (en) * 2007-01-30 2010-03-16 Texas Instruments Incorporated Method, system and device for handling a memory management fault in a multiple processor device
US9081501B2 (en) 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
GB2478727B (en) * 2010-03-15 2013-07-17 Advanced Risc Mach Ltd Translation table control
US8745307B2 (en) * 2010-05-13 2014-06-03 International Business Machines Corporation Multiple page size segment encoding
WO2012129729A1 (en) * 2011-03-31 2012-10-04 Intel Corporation Memory mirroring and redundancy generation for high availability
US20130141446A1 (en) 2011-12-06 2013-06-06 Advanced Micro Devices, Inc. Method and Apparatus for Servicing Page Fault Exceptions
WO2013085794A1 (en) * 2011-12-06 2013-06-13 Advanced Micro Devices, Inc. Method and apparatus for servicing page fault exceptions
US9058284B1 (en) 2012-03-16 2015-06-16 Applied Micro Circuits Corporation Method and apparatus for performing table lookup
US20130318307A1 (en) * 2012-05-23 2013-11-28 Alexander Rabinovitch Memory mapped fetch-ahead control for data cache accesses
US9235529B2 (en) 2012-08-02 2016-01-12 Oracle International Corporation Using broadcast-based TLB sharing to reduce address-translation latency in a shared-memory system with optical interconnect
US8930596B2 (en) 2012-11-30 2015-01-06 International Business Machines Corporation Concurrent array-based queue
US9507727B2 (en) * 2013-07-17 2016-11-29 Bitdefender IPR Management Ltd. Page fault injection in virtual machines
US9864698B2 (en) 2013-11-04 2018-01-09 International Business Machines Corporation Resolving cache lookup of large pages with variable granularity
KR102225525B1 (ko) 2014-04-08 2021-03-09 삼성전자 주식회사 하드웨어 기반 메모리 관리 장치 및 메모리 관리 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230012670A (ko) * 2021-07-16 2023-01-26 성균관대학교산학협력단 Numa 시스템의 동작 방법
KR102552592B1 (ko) 2021-07-16 2023-07-07 성균관대학교산학협력단 Numa 시스템의 동작 방법

Also Published As

Publication number Publication date
CN109074316A (zh) 2018-12-21
DE112017001027B4 (de) 2023-05-04
GB201819512D0 (en) 2019-01-16
WO2017203387A1 (en) 2017-11-30
US10528476B2 (en) 2020-01-07
US20170344489A1 (en) 2017-11-30
GB2565495A (en) 2019-02-13
JP6764485B2 (ja) 2020-09-30
GB2565495B (en) 2021-11-03
CN109074316B (zh) 2023-05-12
DE112017001027T5 (de) 2018-12-27

Similar Documents

Publication Publication Date Title
JP6764485B2 (ja) ページ・フォールト解決法
US10365938B2 (en) Systems and methods for managing data input/output operations in a virtual computing environment
KR100996753B1 (ko) 시퀀서 어드레스를 관리하기 위한 방법, 맵핑 관리자 및 멀티 시퀀서 멀티스레딩 시스템
US8261267B2 (en) Virtual machine monitor having mapping data generator for mapping virtual page of the virtual memory to a physical memory
JP5735070B2 (ja) パーティション分割されたシステムにおいて、デバイスがメモリにアクセスするための、ゲスト・アドレスからホスト・アドレスへの変換
US9286101B2 (en) Free page hinting
US7757034B1 (en) Expansion of virtualized physical memory of virtual machine
US9280486B2 (en) Managing memory pages based on free page hints
US10534720B2 (en) Application aware memory resource management
US8312201B2 (en) Managing memory allocations loans
US11132290B2 (en) Locality domain-based memory pools for virtualized computing environment
US20120159103A1 (en) System and method for providing stealth memory
US11119942B2 (en) Facilitating access to memory locality domain information
KR20060099404A (ko) 가상 머신들 간에서 페이지들을 공유하기 위한 방법,시스템 및 컴퓨터 판독가능 매체
US10691590B2 (en) Affinity domain-based garbage collection
US20130073779A1 (en) Dynamic memory reconfiguration to delay performance overhead
US20230029331A1 (en) Dynamically allocatable physically addressed metadata storage
US20200081827A1 (en) Recycling segment pages while preserving integrity of memory addressing

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191030

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200908

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200911

R150 Certificate of patent or registration of utility model

Ref document number: 6764485

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150