JP2022541059A - ヘテロジニアスコンピューティングのための統合カーネル仮想アドレス空間 - Google Patents
ヘテロジニアスコンピューティングのための統合カーネル仮想アドレス空間 Download PDFInfo
- Publication number
- JP2022541059A JP2022541059A JP2022503804A JP2022503804A JP2022541059A JP 2022541059 A JP2022541059 A JP 2022541059A JP 2022503804 A JP2022503804 A JP 2022503804A JP 2022503804 A JP2022503804 A JP 2022503804A JP 2022541059 A JP2022541059 A JP 2022541059A
- Authority
- JP
- Japan
- Prior art keywords
- subsystem
- address space
- kernel
- memory
- address
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 claims abstract description 102
- 238000013507 mapping Methods 0.000 claims abstract description 45
- 239000000872 buffer Substances 0.000 claims abstract description 44
- 238000000034 method Methods 0.000 claims abstract description 27
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
Abstract
ヘテロジニアスコンピューティングのための統合カーネル仮想アドレス空間を実装するシステム、装置及び方法が開示されている。システムは、第1のカーネルを実行する第1のサブシステムと、入力/出力メモリ管理ユニット(IOMMU)と、第2のカーネルを実行する第2のサブシステムと、を少なくとも含む。2つのサブシステム間でメモリバッファを共有するために、第1のサブシステムは、第1のサブシステムによって制御されるシステムメモリの一部にメモリブロックを割り当てる。第1のマッピングは、第1のサブシステムのカーネルアドレス空間の第1の論理アドレスからメモリブロックに生成される。次に、IOMMUは、第2のサブシステムのカーネルアドレス空間の第2の論理アドレスからそのメモリブロックの物理アドレスをマッピングするための第2のマッピングを生成する。これらのマッピングにより、第1のサブシステム及び第2のサブシステムは、メモリブロックを参照するバッファポインタを共有することができる。【選択図】図4
Description
(関連技術の説明)
一般に、コンピューティングデバイス間でメモリバッファを共有するには、デバイスがデバイスアドレス空間又は物理アドレス空間においてポインタ又はハンドルを交換する必要がある。
一般に、コンピューティングデバイス間でメモリバッファを共有するには、デバイスがデバイスアドレス空間又は物理アドレス空間においてポインタ又はハンドルを交換する必要がある。
殆どの場合、このポインタを使用する前に、計算デバイスは、メモリ管理ユニット(MMU)ページテーブルマッピングでポインタをローカル仮想アドレス空間に変換する。これにより、ポインタ自体又はポインタを含む構造の共有が非効率的で困難になる。
添付図面と併せて以下の説明を参照することによって、本明細書に記載される方法及びメカニズムの利点をより良く理解することができる。
以下の説明では、本明細書で提示される方法及びメカニズムの十分な理解をもたらすために、多数の特定の詳細が示されている。しかし、当業者は、様々な実施形態がこれらの特定の詳細無しに実施し得ることを認識するはずである。いくつかの例では、本明細書で説明するアプローチを曖昧にしないように、周知の構造、構成要素、信号、コンピュータプログラム命令、及び、技術が詳細に示されていない。説明を簡単且つ明確にするために、図面に示される要素が必ずしも縮尺通りに描かれていないことを理解されたい。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている場合がある。
ヘテロジニアスコンピューティングのための統合カーネル仮想アドレス空間を実装するためのシステム、装置及び方法が本明細書に開示されている。一実施形態では、システムは、第1のカーネルを実行する第1のサブシステムと、入力/出力メモリ管理ユニット(IOMMU)と、第2のカーネルを実行する第2のサブシステムと、を少なくとも含む。一実施形態では、IOMMUは、第1のサブシステム及び第2のサブシステムがカーネルレベルでメモリバッファを共有することを可能にする統合されたカーネルアドレス空間を生成する。2つのサブシステム間でメモリバッファを共有するために、第1のサブシステムは、第1のサブシステムによって制御されるシステムメモリの一部にメモリブロックを割り当てる。第1のマッピングは、第1のサブシステムの第1のカーネルアドレス空間の第1の論理アドレスからメモリブロックに生成される。次に、IOMMUは、第2のサブシステムの第2のカーネルアドレス空間の第2の論理アドレスからそのメモリブロックの物理アドレスをマッピングするための第2のマッピングを生成する。これらのマッピングにより、第1のサブシステム及び第2のサブシステムは、メモリブロックを参照するカーネルアドレス空間内のバッファポインタを共有することができる。
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、第1のサブシステム110と、第2のサブシステム115と、入力/出力(I/O)インターフェース(複数可)120と、入力/出力メモリ管理ユニット(IOMMU)125と、メモリサブシステム130と、周辺機器(複数可)135と、を少なくとも含む。他の実施形態では、コンピューティングシステム100は、他の構成要素を含むことができ、及び/又は、コンピューティングシステム100は、異なるように構成することができる。
一実施形態では、第1及び第2のサブシステム110,115は、異なるカーネルアドレス空間を有するが、統合カーネルアドレス空間は、第1及び第2のサブシステム110,115用にIOMMU125によって生成される。統合カーネルアドレス空間は、第1及び第2のサブシステム110,115が互いにポインタを受け渡し、バッファを共有することを可能にする。第1のサブシステム110及び第2のサブシステム115の場合、各々のカーネルアドレス空間は、カーネル論理アドレス及びカーネル仮想アドレスを含む。一部のアーキテクチャでは、カーネルの論理アドレスとそれに関連する物理アドレスが、一定のオフセットで異なる。カーネル仮想アドレスは、カーネル論理アドレスを特徴付ける物理アドレスへの線形的な1対1のマッピングを必ずしも有しているわけではない。全てのカーネル論理アドレスはカーネル仮想アドレスであるが、カーネル仮想アドレスは必ずしもカーネル論理アドレスである必要はない。
一実施形態では、第1のサブシステム110及び第2のサブシステム115の各々は、オペレーティングシステムを実行する1つ以上のプロセッサを含む。また、プロセッサ(複数可)は、様々な実施形態において、1つ以上のソフトウェアプログラムを実行する。第1のサブシステム110及び第2のサブシステム115のプロセッサ(複数可)は、任意の数及びタイプの処理ユニット(例えば、中央処理ユニット(CPU)、グラフィック処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC))を含む。また、第1のサブシステム110は、メモリ管理ユニット(MMU)112を含み、第2のサブシステム115は、MMU117を含み、各MMUは、対応するサブシステム用の仮想アドレスから物理アドレスへの変換を処理する。第1及び第2のサブシステム110,115は、異なるカーネルアドレス空間を有するが、統合カーネルアドレス空間は、第1及び第2のサブシステム110,115用にIOMMU125によって生成され、第1及び第2のサブシステム110,115がポインタを受け渡し、メモリサブシステム130内でバッファを共有することを可能にする。
メモリサブシステム130は、任意の数及びタイプのメモリデバイスを含む。例えば、メモリサブシステム130のメモリのタイプは、高帯域メモリ(HBM)、不揮発性メモリ(NVM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)、又は、他のメモリを含むことができる。I/Oインターフェース120は、任意の数及びタイプのI/Oインターフェース(例えば、PCI(Peripheral Component Interconnect)バス、PCI-X(PCI-Extended)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表す。様々なタイプの周辺デバイス135は、I/Oインターフェース120に結合され得る。このような周辺デバイス135は、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶デバイス、及び、ネットワークインターフェースカード等を含むが、これらに限定されない。
一実施形態では、第1のサブシステム110と第2のサブシステム115との間で共有されるメモリ空間を生成するために、メモリブロックが、第1のサブシステム110によって管理されるシステムメモリの一部に割り当てられる。メモリの初期ブロックが割り当てられた後、適切なI/O仮想アドレス(VA)が、第2のサブシステム115に割り当てられる。一実施形態では、IOMMUマッピングは、第2のサブシステム115のカーネルアドレス空間からメモリブロックの物理アドレスに生成される。この実施形態では、IOMMU125は、第2のサブシステム115の仮想アドレスマッピングをメモリブロックに実施する。次に、追加のメモリが割り当てられると、ヒープ割り当て関数(heap allocate function)が呼び出され、アドレスが、以前に生成された同じI/O VAアドレスに基づいてマッピングされる。次に、第2のサブシステム115に統合アドレスを通知するメッセージが、第2のサブシステム115に送信される。
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、任意の他の様々な種類のコンピューティングシステム若しくはデバイスである。コンピューティングシステム100の構成要素の数は、実施形態毎に異なることに留意されたい。他の実施形態では、図1に示す数よりも多い又は少ない構成要素が存在する。他の実施形態では、コンピューティングシステム100は、図1に示されていない他の構成要素を含むことにも留意されたい。さらに、他の実施形態では、コンピューティングシステム100は、図1に示す以外の方法で構造化される。
図2を参照すると、ヘテロジニアスコンピューティングのための統合カーネル仮想アドレス空間を生成する一実施形態の図が示されている。図2の上部からの垂直の破線は、左から右に、第1のサブシステム202、第1のサブシステム202のMMU204、第1のサブシステム202上で実行されるデバイスドライバ206、メモリの共有領域208、IOMMU211、第2のサブシステム214のMMU212、及び、第2のサブシステム214を表す。説明のために、第1のサブシステム202は第1のオペレーティングシステムを有し、第2のサブシステム214は第2のオペレーティングシステムを有し、第2のオペレーティングシステムは、第1のオペレーティングシステムと異なることが仮定される。また、説明のために、第1のサブシステム202及び第2のサブシステム214は、ヘテロジニアスコンピューティングシステムの一部であると仮定される。一実施形態では、このヘテロジニアスコンピューティングシステムの場合、第1のサブシステム202及び第2のサブシステム214の各々は、ワークロードの一部を実行し、ワークロードを実行するために、第1のサブシステム202及び第2のサブシステム214は、バッファポインタ及びバッファを互いに共有する。図2の図は、第1のサブシステム202と第2のサブシステム214との間で共有されるメモリを割り当てる一例を示している。
一実施形態では、第1のステップ205は、ヒープ(すなわち、共有メモリ領域)を生成するためにデバイスドライバ206によって実施される。本明細書で使用する場合、「ヒープ」という用語は、物理メモリプールにマッピングされる仮想メモリプールとして定義される。次に、ステップ210では、ヒープの所望のサイズが物理メモリサブシステムに割り当てられる。ステップ215では、カーネルからヒープへのマッピングが生成される。一実施形態では、carveoutヒープが最初に生成されると、新しいフラグが、ヒープがカーネル論理アドレス空間から取得されるかどうかを示す。たとえば、kmalloc関数は、カーネル論理アドレス空間のメモリを返す。一実施形態では、Linux(登録商標)オペレーティングシステムの場合、メモリマネージャーは、Linux(登録商標) genpoolライブラリを使用して、ヒープに割り当てられたバッファを管理する。この実施形態では、バッファが割り当てられると、そのバッファは内部プールにマークされ、物理アドレスが返される。次に、carveoutヒープは、この物理アドレスをバッファ及びsg_table記述子でラップ(wraps)する。一実施形態では、バッファがカーネルアドレス空間においてマッピングされると、heap_map_kernel関数は、ステップ220でvmapの代わりにkmapを使用してバッファをマッピングする。関数kmapは、論理マッピングに基づいて、バッファを所定の仮想アドレスにマッピングする。kmap又はvmapの選択は、carveoutヒープの生成中に与えられた新しいフラグによって制御される。或いは、genpoolライブラリ、carveoutアプリケーションプログラミングインターフェース(API)、及び、新しいフラグを使用して、カーネルマッピングと共にヒープが生成される。この場合、カーネルマップは、事前にマッピングされたアドレスを返す。ユーザモードマッピングは、依然としてオンザフライで適用される。第2のサブシステム214の場合、第1のサブシステム202によって割り当てられた共有メモリバッファは、carveoutヒープwrapped genpoolと同様に管理される。新しいAPIにより、carveoutヒープに外部バッファを追加することができる。第2のサブシステム214上のローカルタスクは、同じAPIを使用してこのcarveoutヒープから割り当てる。ステップ220の後に、共有メモリ領域の割り当てが完了する。
次に、ステップ225では、入力/出力(I/O)仮想アドレスが、IOMMU211によって共有メモリ領域に割り当てられる。次に、ステップ230では、DMAアドレス空間の連続するブロックが、共有メモリ領域に対して予約される。次に、ステップ235では、共有メモリ領域は、IOMMU211によって、第2のサブシステム214のカーネルアドレス空間にマッピングされる。デバイスドライバ206がシャットダウンされるまで、IOMMUマッピングが解放されるべきではないことに留意されたい。第1のサブシステム202のカーネルアドレス空間から共有メモリ領域へのマッピングは、ステップ240で無効にされる。次に、ステップ245では、メモリ解放関数を実行することによって、カーネルアドレス空間マッピングが解放される。
図3を参照すると、2つの別個のサブシステム間でバッファを共有する一実施形態の図が示されている。図3の上部から下に延びる垂直の破線は、左から右に、第1のサブシステム302、第1のサブシステム302のMMU304、第1のサブシステム302上で実行されるデバイスドライバ306、メモリの共有領域308、IOMMU310、第2のサブシステム314のMMU312、及び、第2のサブシステム314を表す。説明のために、第1のサブシステム302は第1のオペレーティングシステムを有し、第2のサブシステム314は第2のオペレーティングシステムを有し、第2のオペレーティングシステムは、第1のオペレーティングシステムと異なると仮定される。
ループ交換305の場合、メモリブロックが割り当てられ、第1のサブシステム302のカーネルアドレス空間からメモリブロックの物理アドレスへのマッピングがデバイスドライバ306によって生成される。その後、マッピングは、MMU304によって維持される。メモリブロックは、第2のサブシステム314に排他的に割り当てられてもよいし、第1のサブシステム302と第2のサブシステム314との間で共有されてもよいし、第1のサブシステム302に排他的に割り当てられてもよい。次に、メッセージが、第1のサブシステム302から第2のサブシステム314に、メモリのブロックのアドレス及びサイズと共に送信される。一実施形態では、メッセージは、帯域外で送信されてもよい。メッセージが第2のサブシステム314によって受信された後、第2のサブシステム314のカーネルアドレス空間からメモリブロックの物理アドレスへのマッピングがMMU312によって生成され、維持される。ループ交換315の場合、データは、共有領域308を使用して、第1のサブシステム302と第2のサブシステム314との間で交換される。カーネル仮想アドレスが統合されているので、バッファポインタ1st_SS_bufと2nd_SS_bufとは同じであり、第1のサブシステム302と第2のサブシステム314との間で自由に交換することができ、genpoolライブラリを使用してさらに分割することができる。
図4を参照すると、メモリ領域を複数のカーネルアドレス空間にマッピングする一実施形態の図が示されている。一実施形態では、ヘテロジニアスコンピューティングシステム(例えば、図1のシステム100)は、それ自身の独立したオペレーティングシステムを有する複数の異なるサブシステムを含む。図4に示す垂直方向の長方形のブロックは、ヘテロジニアスコンピューティングシステムの異なる構成要素のアドレス空間を表している。図4に示すアドレス空間は、左から右に、第1のサブシステム仮想アドレス空間402、物理メモリ空間404、デバイスメモリ空間406、及び、第2のサブシステム仮想アドレス空間408である。
一実施形態では、第1のサブシステム仮想アドレス空間402は、物理メモリ空間404のメモリブロック425及びメモリブロック430にマッピングされる共有領域420を含む。一実施形態では、共有領域420のメモリブロック425及びメモリブロック430へのマッピングは、第1のサブシステムMMU412によって生成及び維持される。共有領域420が第2のサブシステムと共有されるのを可能にするために、メモリブロック425及びメモリブロック430は、IOMMU414によってデバイスメモリ空間406の共有領域435にマッピングされる。次に、共有領域435は、第2のサブシステムMMU416によって、第2のサブシステム仮想アドレス空間408の共有領域440にマッピングされる。このマッピングスキームを介して、第1のサブシステム及び第2のサブシステムは、自身のカーネルアドレス空間においてバッファポインタを相互に共有することができる。
図5を参照すると、統合カーネル仮想アドレス空間を生成する方法500の一実施形態が示されている。説明のために、本実施形態でのステップ、及び、図6~図7のステップを順番に示す。しかしながら、説明する方法の様々な実施形態では、説明する要素のうち1つ以上は、同時に実行されてもよいし、図示した順序と異なる順序で実施されてもよいし、完全に省略されてもよいことに留意されたい。他の追加の要素も必要に応じて実施される。本明細書に記載される様々なシステム又は装置の何れも、方法500を実施するように構成されている。
第1のサブシステムは、メモリサブシステムに対応する物理アドレス空間内の第1の物理アドレスにメモリブロックを割り当てる(ブロック505)。一実施形態では、第1のサブシステムは、第1のカーネルアドレス空間を有する第1のオペレーティングシステムを実行する。次に、第1のサブシステムは、第1のカーネルアドレス空間内の第1の論理アドレスの第1の物理アドレスへのマッピングを生成する(ブロック510)。第1のカーネルアドレス空間の第1の論理アドレス空間は、第1の物理アドレスからの第1の線形オフセットであることに留意されたい。次に、IOMMUは、第2のカーネルアドレス空間内の第2の論理アドレスの第1の物理アドレスへのIOMMUマッピングを生成する(ブロック515)。一実施形態では、第2のカーネルアドレス空間は、第2のサブシステムに関連付けられている。第2のカーネルアドレス空間の第2の論理アドレス空間は、第1の物理アドレスからの第2の線形オフセットであることに留意されたい。
次に、第1のサブシステムは、バッファポインタを第2のサブシステムに伝達し、バッファポインタは、第1の論理アドレスを指す(ブロック520)。次に、第2のサブシステムは、バッファポインタを用いてアクセス要求を生成し、アクセス要求をIOMMUに伝達する(ブロック525)。次に、IOMMUは、以前に生成されたIOMMUマッピングを使用して、バッファポインタの仮想アドレスを第1の物理アドレスに変換する(ブロック530)。次に、第2のサブシステムは、第1の物理アドレスでメモリブロックにアクセスする(ブロック535)。ブロック535の後に、方法500は終了する。
図6を参照すると、複数のカーネルアドレス空間内の共通の共有領域を有効にする方法600の一実施形態が示されている。第1のサブシステムは、メモリサブシステムに対応する物理アドレス空間内の第1の物理アドレスにメモリブロックを割り当てる(ブロック605)。説明のために、方法600によって説明するシステムは、第1のサブシステム及び第2のサブシステムを含むと仮定される。また、第1のサブシステムは、第1のカーネルアドレス空間を有する第1のオペレーティングシステムを実行し、第2のサブシステムは、第2のカーネルアドレス空間を有する第2のオペレーティングシステムを実行すると想定される。第1のサブシステムは、第1のカーネルアドレス空間内の第1の論理アドレスの第1の物理アドレスへのマッピングを生成する。ここで、第1のカーネルアドレス空間内の第1の論理アドレスは、第1の物理アドレスから第1のオフセットだけ離れている(ブロック610)。
次に、IOMMUは、第2のカーネルアドレス空間の第1の論理アドレスから第2のオフセットだけ離れたデバイスアドレスを選択する(ブロック615)。次に、IOMMUは、デバイスアドレス空間で選択されたデバイスアドレスの第1の物理アドレスへのIOMMUマッピングを生成する(ブロック620)。IOMMUマッピングによって、第1のカーネルアドレス空間と第2のカーネルアドレス空間の両方の共通の共有領域を、第1のサブシステムと第2のサブシステムの両方で使用することが可能になる(ブロック625)。ブロック625の後に、方法600は終了する。
図7を参照すると、2つの異なるサブシステム間でバッファポインタの共有を可能にする方法700の一実施形態が示されている。第1のサブシステムは、第1のカーネルアドレス空間の第1の領域を物理アドレス空間の第2の領域にマッピングする(ブロック705)。一実施形態では、物理アドレス空間は、第1のサブシステムによって制御されるシステムメモリに対応する。次に、IOMMUは、第2のカーネルアドレス空間の第3の領域をデバイスアドレス空間内の第4の領域にマッピングする(ブロック710)。説明のために、第2のカーネルアドレス空間は、第1のサブシステムと異なる第2のサブシステムに対応すると仮定される。次に、IOMMUは、デバイスアドレス空間内の第4の領域を物理アドレス空間内の第2の領域にマッピングして、第1及び第3の領域内のアドレスが第2の領域内の一致する(すなわち、同一の)アドレスを指すようにする(ブロック715)。第1のサブシステム及び第2のサブシステムは、物理アドレス空間内の第2の領域を参照する第1又は第2のカーネルアドレス空間内のバッファポインタを共有することができる(ブロック720)。ブロック720の後に、方法700は、終了する。
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に説明する方法及び/又はメカニズムを実施する。例えば、汎用プロセッサ又は特殊目的プロセッサによって実行可能なプログラム命令が考慮される。様々な実施形態では、このようなプログラム命令は、高レベルプログラミング言語によって表すことができる。他の実施形態では、プログラム命令は、高レベルプログラミング言語からバイナリ、中間、又は、他の形式にコンパイルされてもよい。或いは、ハードウェアの動作又は設計を記述したプログラム命令が書き込まれてもよい。このようなプログラム命令は、C等の高レベルプログラミング言語によって表されてもよい。或いは、Verilog等のハードウェア設計言語(HDL)が使用されてもよい。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に、このようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
上記の実施形態は、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されると、多数の変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含するものと解釈されることが意図されている。
Claims (20)
- システムであって、
メモリサブシステムと、
第1のカーネルアドレス空間を有する第1のサブシステムと、
第2のカーネルアドレス空間を有する第2のサブシステムと、
入力/出力メモリ管理ユニット(IOMMU)と、を備え、
前記システムは、
前記第1のサブシステムが、前記メモリサブシステムに対応する物理アドレス空間内の第1の物理アドレスにメモリブロックを割り当てることと、
前記第1のサブシステムが、前記第1のカーネルアドレス空間内の第1の論理アドレスの前記第1の物理アドレスへのマッピングを生成することであって、前記第1のカーネルアドレス空間内の前記第1の論理アドレスは、前記第1の物理アドレスから第1のオフセットだけ離れている、ことと、
前記IOMMUが、前記第2のカーネルアドレス空間内の前記第1の論理アドレスから第2のオフセットだけ離れたデバイスアドレスを選択することと、
前記デバイスアドレス空間内で選択されたデバイスアドレスの前記第1の物理アドレスへのIOMMUマッピングを生成することと、
前記IOMMUマッピングを用いて、前記第1のカーネルアドレス空間と前記第2のカーネルアドレス空間との両方において、前記第1のサブシステムと前記第2のサブシステムとの両方が使用するための共通の共有領域を有効にすることと、
を行うように構成されている、
システム。 - 前記第1のサブシステムは、前記メモリブロックを指すバッファポインタを前記第2のサブシステムに伝達するように構成されており、前記バッファポインタは、前記第1のカーネルアドレス空間内で指定される、
請求項1のシステム。 - 前記システムは、
前記第2のサブシステムが、前記バッファポインタの変換を行わずに、前記第1のカーネルアドレス空間内の前記バッファポインタを参照するメモリアクセス命令を実行することと、
前記第2のサブシステムが前記メモリブロックにアクセスする場合に、前記IOMMUマッピングを用いて、前記バッファポインタを前記物理アドレス空間に変換することと、
を行うようにさらに構成されている、
請求項2のシステム。 - 前記第1のカーネルアドレス空間内の論理アドレスは、前記物理アドレス空間内の対応するアドレスから第1のオフセットだけ離れており、
前記第2のカーネルアドレス空間内の論理アドレスは、デバイスアドレス空間内の対応するアドレスから第2のオフセットだけ離れており、
前記IOMMUマッピングは、前記メモリブロックを指す前記第2のカーネルアドレス空間内の論理アドレスが前記第1のカーネルアドレス空間内の論理アドレスと同一になるようにオーバーレイを生成する、
請求項1のシステム。 - 前記第1のサブシステムは、第1のオペレーティングシステムを実行し、
前記第2のサブシステムは、前記第1のオペレーティングシステムと異なる第2のオペレーティングシステムを実行する、
請求項1のシステム。 - 前記第1のサブシステムは、第1のメモリ管理ユニット(MMU)を備え、
前記第2のサブシステムは、前記第1のMMUと異なる第2のMMUを備える、
請求項5のシステム。 - 前記共通の共有領域は、前記物理アドレス空間内の前記メモリブロックにマッピングされる、
請求項1のシステム。 - 第1のカーネルアドレス空間を有する第1のサブシステムが、物理アドレス空間内の第1の物理アドレスにメモリブロックを割り当てることと、
前記第1のサブシステムが、前記第1のカーネルアドレス空間内の第1の論理アドレスの前記第1の物理アドレスへのマッピングを生成することであって、前記第1のカーネルアドレス空間内の前記第1の論理アドレスは、前記第1の物理アドレスから第1のオフセットだけ離れている、ことと、
入力/出力メモリ管理ユニット(IOMMU)が、第2のサブシステムの第2のカーネルアドレス空間内の前記第1の論理アドレスから第2のオフセットだけ離れたデバイスアドレスを選択することと、
前記IOMMUが、前記デバイスアドレス空間内で選択されたデバイスアドレスの前記第1の物理アドレスへのIOMMUマッピングを生成することと、
前記IOMMUマッピングを用いて、前記第1のカーネルアドレス空間と前記第2のカーネルアドレス空間との両方において、前記第1のサブシステムと前記第2のサブシステムとの両方が使用するための共通の共有領域を有効にすることと、を含む、
方法。 - 前記メモリブロックを指すバッファポインタを前記第1のサブシステムから前記第2のサブシステムに伝達することをさらに含み、前記バッファポインタは、前記第1のカーネルアドレス空間内で指定される、
請求項8の方法。 - 前記第2のサブシステムが、前記バッファポインタの変換を行わずに、前記第1のカーネルアドレス空間内の前記バッファポインタを参照するメモリアクセス命令を実行することと、
前記第2のサブシステムが前記メモリブロックにアクセスする場合に、前記IOMMUマッピングを用いて、前記バッファポインタを前記物理アドレス空間に変換することと、をさらに含む、
請求項9の方法。 - 前記第1のカーネルアドレス空間内の論理アドレスは、前記物理アドレス空間内の対応するアドレスから第1のオフセットだけ離れており、
前記第2のカーネルアドレス空間内の論理アドレスは、前記デバイスアドレス空間内の対応するアドレスから第2のオフセットだけ離れており、
前記方法は、前記IOMMUマッピングによって、前記メモリブロックを指す前記第2のカーネルアドレス空間内の論理アドレスが前記第1のカーネルアドレス空間内の論理アドレスと同一になるようにオーバーレイを生成することをさらに含む、
請求項8の方法。 - 前記第1のサブシステムは、第1のオペレーティングシステムを実行し、
前記第2のサブシステムは、前記第1のオペレーティングシステムと異なる第2のオペレーティングシステムを実行する、
請求項8の方法。 - 前記第1のサブシステムは、第1のメモリ管理ユニット(MMU)を備え、
前記第2のサブシステムは、前記第1のMMUと異なる第2のMMUを備える、
請求項12の方法。 - 前記共通の共有領域は、前記物理アドレス空間内の前記メモリブロックにマッピングされる、
請求項8の方法。 - プログラム命令を記憶するメモリと、
前記メモリに結合された少なくとも1つのプロセッサと、を備え、
前記プログラム命令は、前記少なくとも1つのプロセッサによって実行されると、
第1のカーネルアドレス空間を有する第1のサブシステムが、物理アドレス空間内の第1の物理アドレスにメモリブロックを割り当てることと、
前記第1のサブシステムが、前記第1のカーネルアドレス空間内の第1の論理アドレスの前記第1の物理アドレスへのマッピングを生成することであって、前記第1のカーネルアドレス空間内の前記第1の論理アドレスは、前記第1の物理アドレスから第1のオフセットだけ離れている、ことと、
入力/出力メモリ管理ユニット(IOMMU)が、第2のサブシステムの第2のカーネルアドレス空間内の前記第1の論理アドレスから第2のオフセットだけ離れたデバイスアドレスを選択することと、
前記IOMMUが、前記デバイスアドレス空間内で選択されたデバイスアドレスの前記第1の物理アドレスへのIOMMUマッピングを生成することと、
前記IOMMUマッピングを用いて、前記第1のカーネルアドレス空間と前記第2のカーネルアドレス空間との両方において、前記第1のサブシステムと前記第2のサブシステムとの両方が使用するための共通の共有領域を有効にすることと、
を前記少なくとも1つのプロセッサに実行させる、
装置。 - 前記プログラム命令は、前記メモリブロックを指すバッファポインタを前記第1のサブシステムから前記第2のサブシステムに伝達するように前記少なくとも1つのプロセッサに実行させ、前記バッファポインタは、前記第1のカーネルアドレス空間内で指定される、
請求項15の装置。 - 前記プログラム命令は、
前記第2のサブシステムが、前記バッファポインタの変換を行わずに、前記第1のカーネルアドレス空間内の前記バッファポインタを参照するメモリアクセス命令を実行することと、
前記第2のサブシステムが前記メモリブロックにアクセスする場合に、前記IOMMUマッピングを用いて、前記バッファポインタを前記物理アドレス空間に変換することと、
を前記少なくとも1つのプロセッサに実行させる、
請求項16の装置。 - 前記第1のカーネルアドレス空間内の論理アドレスは、前記物理アドレス空間内の対応するアドレスから第1のオフセットだけ離れており、
前記第2のカーネルアドレス空間内の論理アドレスは、前記デバイスアドレス空間内の対応するアドレスから第2のオフセットだけ離れており、
前記IOMMUマッピングは、前記メモリブロックを指す前記第2のカーネルアドレス空間内の論理アドレスが前記第1のカーネルアドレス空間内の論理アドレスと同一になるようにオーバーレイを生成する、
請求項15の装置。 - 前記第1のサブシステムは、第1のオペレーティングシステムを実行し、
前記第2のサブシステムは、前記第1のオペレーティングシステムと異なる第2のオペレーティングシステムを実行する、
請求項15の装置。 - 前記第1のサブシステムは、第1のメモリ管理ユニット(MMU)を備え、
前記第2のサブシステムは、前記第1のMMUと異なる第2のMMUを備える、
請求項19の装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/519,311 US10853263B1 (en) | 2019-07-23 | 2019-07-23 | Unified kernel virtual address space for heterogeneous computing |
US16/519,311 | 2019-07-23 | ||
PCT/IB2020/056906 WO2021014382A1 (en) | 2019-07-23 | 2020-07-22 | Unified kernel virtual address space for heterogeneous computing |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2022541059A true JP2022541059A (ja) | 2022-09-21 |
JPWO2021014382A5 JPWO2021014382A5 (ja) | 2023-07-18 |
Family
ID=73554876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022503804A Pending JP2022541059A (ja) | 2019-07-23 | 2020-07-22 | ヘテロジニアスコンピューティングのための統合カーネル仮想アドレス空間 |
Country Status (6)
Country | Link |
---|---|
US (2) | US10853263B1 (ja) |
EP (1) | EP4004743A4 (ja) |
JP (1) | JP2022541059A (ja) |
KR (1) | KR20220036972A (ja) |
CN (1) | CN114286987A (ja) |
WO (1) | WO2021014382A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10853263B1 (en) | 2019-07-23 | 2020-12-01 | Ati Technologies Ulc | Unified kernel virtual address space for heterogeneous computing |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7035963B2 (en) * | 2000-12-27 | 2006-04-25 | Intel Corporation | Method for resolving address space conflicts between a virtual machine monitor and a guest operating system |
US6961941B1 (en) * | 2001-06-08 | 2005-11-01 | Vmware, Inc. | Computer configuration for resource management in systems including a virtual machine |
US8041878B2 (en) | 2003-03-19 | 2011-10-18 | Samsung Electronics Co., Ltd. | Flash file system |
US7493465B2 (en) * | 2004-05-17 | 2009-02-17 | Oracle International Corporation | Method and system for extended memory with user mode input/output operations |
US7444493B2 (en) | 2004-09-30 | 2008-10-28 | Intel Corporation | Address translation for input/output devices using hierarchical translation tables |
US7634584B2 (en) * | 2005-04-27 | 2009-12-15 | Solarflare Communications, Inc. | Packet validation in virtual network interface architecture |
US7225287B2 (en) | 2005-06-01 | 2007-05-29 | Microsoft Corporation | Scalable DMA remapping on a computer bus |
US7793067B2 (en) | 2005-08-12 | 2010-09-07 | Globalfoundries Inc. | Translation data prefetch in an IOMMU |
US7543131B2 (en) | 2005-08-12 | 2009-06-02 | Advanced Micro Devices, Inc. | Controlling an I/O MMU |
US7500048B1 (en) * | 2005-12-15 | 2009-03-03 | Vmware, Inc. | Transparent page sharing on commodity operating systems |
US7548999B2 (en) | 2006-01-17 | 2009-06-16 | Advanced Micro Devices, Inc. | Chained hybrid input/output memory management unit |
US7653803B2 (en) | 2006-01-17 | 2010-01-26 | Globalfoundries Inc. | Address translation for input/output (I/O) devices and interrupt remapping for I/O devices in an I/O memory management unit (IOMMU) |
US8032899B2 (en) * | 2006-10-26 | 2011-10-04 | International Business Machines Corporation | Providing policy-based operating system services in a hypervisor on a computing system |
US7873770B2 (en) | 2006-11-13 | 2011-01-18 | Globalfoundries Inc. | Filtering and remapping interrupts |
US7849287B2 (en) | 2006-11-13 | 2010-12-07 | Advanced Micro Devices, Inc. | Efficiently controlling special memory mapped system accesses |
US7707383B2 (en) | 2006-11-21 | 2010-04-27 | Intel Corporation | Address translation performance in virtualized environments |
US8032897B2 (en) | 2007-07-31 | 2011-10-04 | Globalfoundries Inc. | Placing virtual machine monitor (VMM) code in guest context to speed memory mapped input/output virtualization |
US8145876B2 (en) | 2007-08-06 | 2012-03-27 | Advanced Micro Devices, Inc. | Address translation with multiple translation look aside buffers |
US8352705B2 (en) | 2008-01-15 | 2013-01-08 | Vmware, Inc. | Large-page optimization in virtual memory paging systems |
US8307360B2 (en) | 2008-01-22 | 2012-11-06 | Advanced Micro Devices, Inc. | Caching binary translations for virtual machine guest |
US8234432B2 (en) | 2009-01-26 | 2012-07-31 | Advanced Micro Devices, Inc. | Memory structure to store interrupt state for inactive guests |
US9535849B2 (en) | 2009-07-24 | 2017-01-03 | Advanced Micro Devices, Inc. | IOMMU using two-level address translation for I/O and computation offload devices on a peripheral interconnect |
US8386745B2 (en) | 2009-07-24 | 2013-02-26 | Advanced Micro Devices, Inc. | I/O memory management unit including multilevel address translation for I/O and computation offload |
US8392628B2 (en) * | 2010-07-16 | 2013-03-05 | Hewlett-Packard Development Company, L.P. | Sharing memory spaces for access by hardware and software in a virtual machine environment |
US8719466B2 (en) * | 2011-12-16 | 2014-05-06 | Oracle International Corporation | Direct data transfer for device drivers |
US20130262736A1 (en) * | 2012-03-30 | 2013-10-03 | Ati Technologies Ulc | Memory types for caching policies |
US9373182B2 (en) * | 2012-08-17 | 2016-06-21 | Intel Corporation | Memory sharing via a unified memory architecture |
US9628279B2 (en) * | 2014-09-30 | 2017-04-18 | Microsoft Technology Licensing, Llc | Protecting application secrets from operating system attacks |
US10705952B2 (en) * | 2015-11-04 | 2020-07-07 | Sandisk Technologies Llc | User space data storage management |
US10459850B2 (en) | 2016-09-20 | 2019-10-29 | Advanced Micro Devices, Inc. | System and method for virtualized process isolation including preventing a kernel from accessing user address space |
US10678432B1 (en) * | 2016-10-04 | 2020-06-09 | Pure Storage, Inc. | User space and kernel space access to memory devices through private queues |
KR101932604B1 (ko) | 2016-11-11 | 2019-03-15 | 주식회사 모션디바이스 | 모션 시뮬레이터의 조종간 |
US10481951B2 (en) * | 2016-11-15 | 2019-11-19 | Red Hat Israel, Ltd. | Multi-queue device assignment for application groups |
US11099880B2 (en) * | 2017-02-22 | 2021-08-24 | Intel Corporation | Virtualization of process address space identifiers for scalable virtualization of input/output devices |
US10198202B2 (en) * | 2017-02-24 | 2019-02-05 | Red Hat, Inc. | Safe userspace device access for network function virtualization using an IOMMU to map supervisor memory to a reserved range of application virtual addresses |
US11042394B2 (en) * | 2017-10-13 | 2021-06-22 | Electronics And Telecommunications Research Institute | Method for processing input and output on multi kernel system and apparatus for the same |
KR20190091035A (ko) * | 2018-01-26 | 2019-08-05 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작 방법 |
US11792307B2 (en) * | 2018-03-28 | 2023-10-17 | Apple Inc. | Methods and apparatus for single entity buffer pool management |
US11036405B2 (en) * | 2018-09-07 | 2021-06-15 | Vmware, Inc. | Runtime information transfer between kernel modules |
US10853263B1 (en) | 2019-07-23 | 2020-12-01 | Ati Technologies Ulc | Unified kernel virtual address space for heterogeneous computing |
-
2019
- 2019-07-23 US US16/519,311 patent/US10853263B1/en active Active
-
2020
- 2020-07-22 WO PCT/IB2020/056906 patent/WO2021014382A1/en unknown
- 2020-07-22 EP EP20844551.0A patent/EP4004743A4/en active Pending
- 2020-07-22 KR KR1020227005983A patent/KR20220036972A/ko unknown
- 2020-07-22 JP JP2022503804A patent/JP2022541059A/ja active Pending
- 2020-07-22 CN CN202080060590.0A patent/CN114286987A/zh active Pending
- 2020-11-25 US US17/105,331 patent/US11960410B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20210081328A1 (en) | 2021-03-18 |
EP4004743A4 (en) | 2023-08-16 |
EP4004743A1 (en) | 2022-06-01 |
US11960410B2 (en) | 2024-04-16 |
US10853263B1 (en) | 2020-12-01 |
CN114286987A (zh) | 2022-04-05 |
WO2021014382A1 (en) | 2021-01-28 |
KR20220036972A (ko) | 2022-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12112395B2 (en) | Unified memory systems and methods | |
US9547535B1 (en) | Method and system for providing shared memory access to graphics processing unit processes | |
CN101847105B (zh) | 一种计算机及多操作系统共享内存的方法 | |
CA2577865C (en) | System and method for virtualization of processor resources | |
KR101091224B1 (ko) | 이종 처리 유닛을 위한 중앙집중형 디바이스 가상화 계층 | |
CN101088078B (zh) | 虚拟化中图形地址的一步地址转换的方法和系统 | |
EP2202643B1 (en) | Methods and apparatus for providing user level DMA and memory access management | |
US8395631B1 (en) | Method and system for sharing memory between multiple graphics processing units in a computer system | |
EP2581828B1 (en) | Method for creating virtual machine, virtual machine monitor and virtual machine system | |
JP7387873B2 (ja) | ネットワーク化された入出力メモリ管理ユニット | |
US20060070069A1 (en) | System and method for sharing resources between real-time and virtualizing operating systems | |
US20150205738A1 (en) | Controlling direct memory access page mappings | |
CN109766179B (zh) | 一种显存分配方法以及装置 | |
US7249241B1 (en) | Method and apparatus for direct virtual memory address caching | |
CN113485791B (zh) | 配置方法和访问方法、装置、虚拟化系统和存储介质 | |
US11960410B2 (en) | Unified kernel virtual address space for heterogeneous computing | |
US20200201691A1 (en) | Enhanced message control banks | |
US8719466B2 (en) | Direct data transfer for device drivers | |
CN117453352B (zh) | 一种Xen下的设备直通方法 | |
US12045475B1 (en) | Resizable scratchpad memory | |
US11113440B1 (en) | Memory migration in hybrid emulation | |
CN114461391A (zh) | 一种可重映射的gpu主存访问管理方法和系统 | |
CN116795743A (zh) | 并行处理系统中的高带宽扩展存储器 | |
JPWO2021014382A5 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230707 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230707 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240710 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20240716 |