JP6701284B2 - Routing of direct memory access requests in a virtualized computing environment - Google Patents

Routing of direct memory access requests in a virtualized computing environment Download PDF

Info

Publication number
JP6701284B2
JP6701284B2 JP2018159455A JP2018159455A JP6701284B2 JP 6701284 B2 JP6701284 B2 JP 6701284B2 JP 2018159455 A JP2018159455 A JP 2018159455A JP 2018159455 A JP2018159455 A JP 2018159455A JP 6701284 B2 JP6701284 B2 JP 6701284B2
Authority
JP
Japan
Prior art keywords
virtual address
address
value
offset value
processing path
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.)
Active
Application number
JP2018159455A
Other languages
Japanese (ja)
Other versions
JP2018198088A (en
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.)
ATI Technologies ULC
Advanced Micro Devices Inc
Original Assignee
ATI Technologies ULC
Advanced Micro Devices Inc
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 ATI Technologies ULC, Advanced Micro Devices Inc filed Critical ATI Technologies ULC
Publication of JP2018198088A publication Critical patent/JP2018198088A/en
Application granted granted Critical
Publication of JP6701284B2 publication Critical patent/JP6701284B2/en
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/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/1016Performance 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/25Using a specific main memory architecture
    • G06F2212/253Centralized memory
    • G06F2212/2532Centralized memory comprising a plurality of modules
    • 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
    • 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/657Virtual address space management
    • 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]

Description

入出力メモリ管理ユニット(IOMMU)は、ダイレクトメモリアクセス(DMA)対応デバイス(例えば、グラフィックスカード、ネットワークカード、サウンドカード等)とメインメモリとの間の通信を提供することができる。IOMMUは、DMA対応デバイスから受信したダイレクトメモリアクセス要求で特定される仮想メモリアドレスを、メインメモリの物理アドレスに変換することができる。IOMMUは、中央処理装置(CPU)を介してルーティングされることなく、メモリアクセスがDMA対応デバイスに提供されるように構成することができる。例えば、IOMMUは、仮想メモリアドレスを特定するメモリアクセス要求をDMA対応デバイスから受信し、仮想メモリアドレスを物理メモリアドレスにマッピングするページテーブル内の仮想メモリアドレスをルックアップすることができる。次に、物理メモリアドレスに記憶された情報は、DMA対応デバイスによって読み書きされる。   An input/output memory management unit (IOMMU) can provide communication between a direct memory access (DMA) enabled device (eg, graphics card, network card, sound card, etc.) and main memory. The IOMMU can convert the virtual memory address specified by the direct memory access request received from the DMA compatible device into the physical address of the main memory. The IOMMU can be configured such that memory access is provided to the DMA enabled device without being routed through a central processing unit (CPU). For example, the IOMMU can receive a memory access request specifying a virtual memory address from a DMA-enabled device and look up the virtual memory address in a page table that maps the virtual memory address to a physical memory address. The information stored at the physical memory address is then read and written by the DMA enabled device.

いくつかの可能な実施形態によれば、方法は、デバイスが、仮想アドレスを特定するダイレクトメモリアクセス要求を受信するステップを含むことができる。この方法は、デバイスが、仮想アドレスが仮想アドレスの特定の範囲内に存在するか否かを判別するステップを含むことができる。方法は、デバイスが、仮想アドレスが仮想アドレスの特定の範囲内に存在するか否かを判別するステップに基づいて、第1アクション又は第2アクションを選択的に実行するステップを含むことができる。第1アクションは、仮想アドレスが仮想アドレスの特定の範囲内に存在しない場合に、仮想アドレスをメモリデバイスに関連付けられた物理アドレスに変換するための第1アドレス変換アルゴリズムを実行するステップを含むことができる。第2アクションは、仮想アドレスが仮想アドレスの特定の範囲内に存在する場合に、仮想アドレスをメモリデバイスに関連付けられた物理アドレスに変換するための第2アドレス変換アルゴリズムを実行するステップを含むことができる。第2アドレス変換アルゴリズムは、第1アドレス変換アルゴリズムと異なっていてもよい。   According to some possible embodiments, the method may include the device receiving a direct memory access request identifying the virtual address. The method may include the device determining whether the virtual address is within a particular range of virtual addresses. The method may include the step of the device selectively performing the first action or the second action based on determining whether the virtual address is within a particular range of virtual addresses. The first action may include performing a first address translation algorithm to translate the virtual address into a physical address associated with the memory device if the virtual address is not within a particular range of virtual addresses. it can. The second action may include executing a second address translation algorithm to translate the virtual address into a physical address associated with the memory device if the virtual address is within a particular range of virtual addresses. it can. The second address translation algorithm may be different than the first address translation algorithm.

いくつかの可能な実施形態によれば、デバイスは、コントローラを備えてもよい。コントローラは、仮想アドレス値を特定するメモリアクセス要求を周辺デバイスから受信することができる。コントローラは、コントローラがアクセス可能なメモリに記憶された情報に基づいて、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することができる。コントローラは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することに基づいて、第1アクション又は第2アクションを選択的に実行することができる。コントローラは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれない場合に、第1アクションを実行することができる。第1アクションは、仮想アドレス値を、メモリデバイス内のメモリ位置を特定する物理アドレス値に変換するための第1アドレス変換アルゴリズムを実行することを含むことができる。コントローラは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれる場合に、第2アクションを実行することができる。第2アクションは、仮想アドレス値を物理アドレス値に変換するための第2アドレス変換アルゴリズムを実行することを含むことができる。第2アドレス変換アルゴリズムは、第1アドレス変換アルゴリズムと異なっていてもよい。   According to some possible embodiments, the device may comprise a controller. The controller can receive a memory access request specifying the virtual address value from the peripheral device. The controller can determine whether the virtual address value falls within a particular range of virtual address values based on information stored in a memory accessible to the controller. The controller may selectively perform the first action or the second action based on determining whether the virtual address value falls within a particular range of virtual address values. The controller may perform the first action if the virtual address value is not within a particular range of virtual address values. The first action may include executing a first address translation algorithm to translate the virtual address value into a physical address value that identifies a memory location within the memory device. The controller may perform the second action when the virtual address value falls within a particular range of virtual address values. The second action can include performing a second address translation algorithm to translate the virtual address value into a physical address value. The second address translation algorithm may be different than the first address translation algorithm.

いくつかの可能な実施形態によれば、システムは、仮想アドレス値を特定するメモリアクセス要求を受信することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することに基づいて、第1アドレス変換アルゴリズム又は第2アドレス変換アルゴリズムを選択的に実行して、仮想アドレス値を、メモリデバイスに関連付けられた物理アドレス値に変換することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれない場合に、第1アドレス変換アルゴリズムを実行することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれる場合に、第2アドレス変換アルゴリズムを実行することができる。第2アドレス変換アルゴリズムは、第1アドレス変換アルゴリズムと異なっていてもよい。システムは、第1アドレス変換アルゴリズム又は第2アドレス変換アルゴリズムを選択的に実行することに基づいて、メモリアクセス要求と、物理アドレス値を特定する情報と、をメモリデバイスに向けてルーティングすることができる。   According to some possible embodiments, the system may receive a memory access request identifying a virtual address value. The system can determine whether the virtual address value falls within a particular range of virtual address values. The system selectively executes a first address translation algorithm or a second address translation algorithm based on determining whether the virtual address value is included in a specific range of the virtual address value to determine the virtual address value. Can be converted into a physical address value associated with the memory device. The system may perform a first address translation algorithm if the virtual address value is not within a particular range of virtual address values. The system may perform a second address translation algorithm if the virtual address value falls within a particular range of virtual address values. The second address translation algorithm may be different than the first address translation algorithm. The system can route a memory access request and information identifying a physical address value to a memory device based on selectively executing a first address translation algorithm or a second address translation algorithm. ..

本明細書で説明される例示的な実施形態の概要を示す図である。FIG. 3 is a diagram outlining an exemplary embodiment described herein. 本明細書で説明される実施形態を実装することができる例示的なシステムの図である。FIG. 1 is a diagram of an example system in which the embodiments described herein can be implemented. 仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てるための例示的なプロセスのフローチャートである。6 is a flowchart of an exemplary process for allocating memory registers used when routing direct memory access requests in a virtualized computing environment. 図3に示す例示的なプロセスに関する例示的な実施形態の図である。FIG. 4 is a diagram of an example embodiment of the example process shown in FIG. 3. 図3に示す例示的なプロセスに関する例示的な実施形態の図である。FIG. 4 is a diagram of an example embodiment of the example process shown in FIG. 3. 仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする例示的なプロセスのフローチャートである。6 is a flowchart of an exemplary process for routing direct memory access requests in a virtualized computing environment. 図5に示す例示的なプロセスに関する例示的な実施形態の図である。FIG. 6 is a diagram of an example embodiment of the example process shown in FIG. 5. 図5に示す例示的なプロセスに関する例示的な実施形態の図である。FIG. 6 is a diagram of an example embodiment of the example process shown in FIG. 5. 図5に示す例示的なプロセスに関する例示的な実施形態の図である。FIG. 6 is a diagram of an example embodiment of the example process shown in FIG. 5. 図5に示す例示的なプロセスに関する例示的な実施形態の図である。FIG. 6 is a diagram of an example embodiment of the example process shown in FIG. 5. 図5に示す例示的なプロセスに関する例示的な実施形態の図である。FIG. 6 is a diagram of an example embodiment of the example process shown in FIG. 5. 図5に示す例示的なプロセスに関する他の例示的な実施形態の図である。FIG. 6 is a diagram of another exemplary embodiment of the exemplary process shown in FIG. 5. 図5に示す例示的なプロセスに関する他の例示的な実施形態の図である。FIG. 6 is a diagram of another exemplary embodiment of the exemplary process shown in FIG. 5.

例示的な実施形態の以下の詳細な説明は、添付図面を参照する。異なる図面における同一の参照番号は、同一又は類似の要素を特定し得る。   The following detailed description of the exemplary embodiments refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements.

ダイレクトメモリアドレス(DMA)機能を有する周辺デバイスは、メモリアクセス要求を入出力メモリ管理ユニット(IOMMU)に提供することによって、仮想化されたコンピューティング環境で動作することができる。IOMMUは、メモリアクセス要求で特定される仮想アドレスを、メインメモリブロックに関連付けられた物理アドレスに変換することができる。このようにして、IOMMUは、仮想化されたコンピューティング環境で動作する周辺デバイスと、メインメモリとの間の通信を提供することができる。しかし、IOMMUを介してメモリアクセス要求をルーティングすることは、アドレス変換アルゴリズムを実行するのにIOMMUが必要とする演算能力の量、及び、様々な他のIOMMUプロセスを実行するのに必要な演算能力の量のために、低速及び/又はコストがかかる可能性がある。   Peripheral devices with direct memory address (DMA) functionality can operate in a virtualized computing environment by providing memory access requests to the input/output memory management unit (IOMMU). The IOMMU can translate the virtual address specified in the memory access request into a physical address associated with the main memory block. In this manner, the IOMMU can provide communication between peripheral devices operating in a virtualized computing environment and main memory. However, routing memory access requests through the IOMMU determines the amount of computing power that the IOMMU requires to perform the address translation algorithm, and the computing power needed to perform various other IOMMU processes. Can be slow and/or costly.

メモリアクセス要求のルーティングを高速化するために、IOMMU処理から特定の要求を除外する場合がある。例えば、ディスプレイデバイスのピクセルをリフレッシュするのに用いられるフレームバッファに関連付けられたアドレスを特定する要求は、IOMMU処理から除外されてもよい。しかしながら、このような除外は、セキュリティ問題を引き起こし、仮想化されたコンピューティング環境において周辺デバイスを動作させるのに必要なメモリアドレス変換を提供しない可能性がある。本明細書で説明する実施形態は、或る条件を満たす場合に、高速ルートを介してメモリアクセス要求をメインメモリにルーティングし、条件を満たさない場合に、低速ルートを介してメモリアクセス要求をメインメモリにルーティングするメカニズムを提供する。両方のルートは、メモリアドレス変換を提供し、これにより、周辺デバイスの性能を向上させながら、仮想化されたコンピューティング環境で周辺デバイスが動作することを可能にする。   Certain requests may be excluded from IOMMU processing to speed up the routing of memory access requests. For example, the request to identify the address associated with the frame buffer used to refresh the pixels of the display device may be excluded from IOMMU processing. However, such exclusions pose security issues and may not provide the memory address translation required to operate peripheral devices in a virtualized computing environment. The embodiments described herein route a memory access request to a main memory via a fast route when a certain condition is satisfied, and a main memory access request through a slow route when the condition is not satisfied. Provides a mechanism to route to memory. Both routes provide memory address translation, which allows the peripheral device to operate in a virtualized computing environment while improving the performance of the peripheral device.

図1は、本明細書で説明する例示的な実施形態の概要100を示す図である。図1に示すように、DMA対応デバイス(例えば、周辺デバイス)は、仮想アドレスを特定するDMA要求を、ルーティングコントローラに提供することができる。ルーティングコントローラは、DMA要求が、IOMMUを用いて当該要求を処理する第1ルート又はIOMMUを用いずに当該要求を処理する第2ルートを介してルーティングされるか否かを決定するルーティング決定を行うデバイスを含むことができる。ルーティングコントローラは、要求を分析して、1つ以上の条件を満たすか否かを判別することができる。例えば、ルーティングコントローラは、第2ルートを介するルーティングが有効であるか否か、仮想アドレスが第2ルートを介してルーティングされる仮想アドレスの範囲内にあるか否か、要求されたアクセスタイプ(例えば、読み出しアクセス、書き込みアクセス等)が許可されているか否か等を判別することができる。ルーティングコントローラは、割り当てられたレジスタセットを用いてこの分析を実行してもよい。   FIG. 1 is a diagram illustrating an overview 100 of an exemplary embodiment described herein. As shown in FIG. 1, a DMA-capable device (eg, a peripheral device) can provide a DMA request to a routing controller that specifies a virtual address. The routing controller makes a routing decision that determines whether the DMA request is routed through a first route that processes the request with the IOMMU or a second route that processes the request without the IOMMU. The device may be included. The routing controller can analyze the request to determine if it meets one or more conditions. For example, the routing controller may determine whether routing through the second route is valid, whether the virtual address is within the range of virtual addresses routed through the second route, the requested access type (eg, , Read access, write access, etc.) is permitted. The routing controller may perform this analysis with the assigned register set.

さらに図1に示すように、条件を満たさない場合に、ルーティングコントローラは、第1ルートを介してDMA要求をルーティングしてもよい。第1ルートは、IOMMUを含んでもよく、及び/又は、第1アドレス変換アルゴリズムを用いてメモリアクセス要求を処理して、仮想アドレスを、メインメモリに関連付けられた物理アドレスに変換することを含んでもよい。IOMMUは、アドレス変換を実行した後に、物理アドレスを特定する情報を含むダイレクトメモリアクセス要求を、メインメモリにルーティングするためのメモリコントローラにルーティングしてもよい。   Further, as shown in FIG. 1, if the condition is not met, the routing controller may route the DMA request via the first route. The first route may include an IOMMU and/or may include processing a memory access request using a first address translation algorithm to translate a virtual address into a physical address associated with main memory. Good. After performing the address translation, the IOMMU may route the direct memory access request including the information identifying the physical address to the memory controller for routing to the main memory.

一方、条件を満たす場合に、ルーティングコントローラは、第2ルートを介してDMA要求をルーティングしてもよい。第2ルートは、IOMMUを含まなくてもよく、及び/又は、第1アドレス変換アルゴリズムと異なる(より高速な)第2アドレス変換アルゴリズムを用いてメモリアクセス要求を処理することを含んでもよい。この場合、ルーティングコントローラは、割り当てられたレジスタセットを用いて仮想アドレスから物理アドレスを判別してもよく、物理アドレスを用いてメインメモリにルーティングするためにDMA要求をメモリコントローラにルーティングしてもよい。   On the other hand, if the condition is met, the routing controller may route the DMA request via the second route. The second route may not include the IOMMU and/or may include processing the memory access request using a second (faster) second address translation algorithm different from the first address translation algorithm. In this case, the routing controller may use the assigned set of registers to determine the physical address from the virtual address, and may use the physical address to route the DMA request to the memory controller for routing to main memory. .

第2アドレス変換アルゴリズムは、第1アドレス変換アルゴリズムよりも複雑でなく、より高速に実行されてもよい。さらに、又は代替として、第2ルートは、第1ルートでIOMMUが実行するいくつかの処理を除外してもよい。これにより、第2ルートは、DMA要求を、第1ルートより早くメインメモリに提供することができる。このようにして、ルーティングコントローラは、仮想化されたコンピューティング環境で動作するDMA対応デバイスの性能を向上させるとともに、DMA要求を分析することによってセキュリティを強化することができる。   The second address translation algorithm is less complex and may run faster than the first address translation algorithm. Additionally or alternatively, the second route may exclude some processing performed by the IOMMU on the first route. As a result, the second route can provide the DMA request to the main memory earlier than the first route. In this way, the routing controller can improve the performance of DMA-enabled devices operating in a virtualized computing environment and enhance security by analyzing DMA requests.

図2は、本明細書で説明する実施形態を実装し得る例示的なシステム200を示す図である。図2に示すように、システム200は、1つ以上の周辺デバイス210−1〜210−N(N≧1)(以下、「周辺デバイス210」と総称する)と、ルーティングコントローラ220と、IOMMU230と、メモリコントローラ240と、メインメモリ250と、を含む。システム200の各デバイスは、有線接続、無線接続等を介して接続されてもよい。   FIG. 2 is a diagram illustrating an exemplary system 200 that may implement the embodiments described herein. As shown in FIG. 2, the system 200 includes one or more peripheral devices 210-1 to 210-N (N≧1) (hereinafter collectively referred to as “peripheral device 210”), a routing controller 220, and an IOMMU 230. , A memory controller 240 and a main memory 250. Each device in system 200 may be connected via a wired connection, a wireless connection, or the like.

周辺デバイス210は、中央処理装置から独立して、ダイレクトメモリアクセスを介してメインメモリ250にアクセス可能な1つ以上のデバイスを含んでもよい。例えば、周辺デバイス210は、グラフィックス処理ユニット(GPU)、加速処理ユニット(APU)、ネットワークインタフェースカード、サウンドカード、ディスクドライブ、マザーボード等のDMA対応デバイスを含んでもよい。いくつかの実施形態では、周辺デバイス210は、他のコンピューティングデバイスのメインメモリ250へのリモートDMAアクセスを有するコンピューティングデバイスである。他の例として、周辺デバイス210は、他のプロセッサコアのメインメモリ250へのDMAアクセスを有するプロセッサコアを含んでもよい。周辺デバイス210は、(例えば、入力及び/又は命令に基づいて)DMA要求を生成してもよく、DMA要求をルーティングコントローラ220に提供してもよい。   Peripheral devices 210 may include one or more devices that are accessible to main memory 250 via direct memory access, independent of the central processing unit. For example, the peripheral device 210 may include a graphics processing unit (GPU), an acceleration processing unit (APU), a network interface card, a sound card, a disk drive, a DMA-compatible device such as a motherboard. In some embodiments, peripheral device 210 is a computing device that has remote DMA access to main memory 250 of other computing devices. As another example, peripheral device 210 may include a processor core having DMA access to main memory 250 of another processor core. Peripheral device 210 may generate a DMA request (eg, based on input and/or instructions) and may provide the DMA request to routing controller 220.

ルーティングコントローラ220は、DMA要求を受信、処理、ルーティング、及び/又は、提供可能な1つ以上のデバイスを含んでもよい。例えば、ルーティングコントローラ220は、周辺デバイス210からDMA要求を受信してもよく、DMA要求を分析して、当該DMA要求を第1ルート又は第2ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングするか否かを判別してもよい。上述したように、第1ルートはIOMMU230を含んでもよく、第2ルートはIOMMU230を含まなくてもよい。さらに、又は代替として、第1ルートは、第2ルートよりも多くDMA要求を処理することを含んでもよい。このため、第1ルートは、第2ルートよりも低速なルートであってもよい。ルーティングコントローラ220は、DMA要求の分析に基づいて、DMA要求をIOMMU230又はメモリコントローラ240に提供してもよい。いくつかの実施形態では、ルーティングコントローラ220は、DMA要求に含まれる仮想アドレスから物理アドレスを決定する。さらに、又は代替として、ルーティングコントローラ220は、DMA要求を他のデバイスに提供して、物理アドレスを決定してもよい。いくつかの実施形態では、周辺デバイス210の外部に存在するように示されているが、ルーティングコントローラ220は、周辺デバイス210内に統合されてもよい。さらに、又は代替として、システム200は、1つ以上の周辺デバイス210に関連付けられたルーティングをそれぞれ制御する複数のルーティングコントローラ220を含んでもよい。   The routing controller 220 may include one or more devices capable of receiving, processing, routing, and/or providing DMA requests. For example, the routing controller 220 may receive a DMA request from the peripheral device 210, analyze the DMA request, and route the DMA request to the memory controller 240 and/or the main memory 250 via the first route or the second route. It may be determined whether to route to. As described above, the first route may include the IOMMU 230 and the second route may not include the IOMMU 230. Additionally or alternatively, the first route may include processing more DMA requests than the second route. Therefore, the first route may be a slower route than the second route. The routing controller 220 may provide the DMA request to the IOMMU 230 or the memory controller 240 based on the analysis of the DMA request. In some embodiments, the routing controller 220 determines the physical address from the virtual address included in the DMA request. Additionally or alternatively, the routing controller 220 may provide the DMA request to other devices to determine the physical address. Although shown in some embodiments to be external to peripheral device 210, routing controller 220 may be integrated within peripheral device 210. Additionally or alternatively, system 200 may include a plurality of routing controllers 220 that each control routing associated with one or more peripheral devices 210.

IOMMU230は、DMA要求を受信、処理、及び/又は、提供可能な1つ以上のデバイスを含んでもよい。例えば、IOMMU230は、ルーティングコントローラ220からDMA要求を受信してもよく、DMA要求をメモリコントローラ240及び/又はメインメモリ250に提供する前に当該DMA要求を処理してもよい。IOMMU230は、例えば、仮想アドレスを物理アドレスに変換すること、DMA要求で要求されたアクセス及び/又はアクセスタイプを許可するのを検証すること等によって、DMA要求を処理してもよい。いくつかの実施形態では、IOMMU230は、第1ルートを介してルーティングされたDMA要求を処理する(例えば、アドレス変換を実行する)ために、DMA要求が第2ルートを介してルーティングされる場合にルーティングコントローラ220及び/又は他のデバイスによって用いられた第2アルゴリズムとは異なる第1アルゴリズムを使用する。いくつかの実施形態では、IOMMU230は、周辺機器相互接続(PCI)バス、PCI expressバス等を介して周辺デバイス210に電気的に接続される。   IOMMU 230 may include one or more devices capable of receiving, processing, and/or providing DMA requests. For example, IOMMU 230 may receive a DMA request from routing controller 220 and may process the DMA request before providing it to memory controller 240 and/or main memory 250. The IOMMU 230 may process the DMA request by, for example, translating a virtual address into a physical address, verifying that the access and/or access type requested in the DMA request is granted, and the like. In some embodiments, the IOMMU 230 may process the DMA request routed via the first route to process the DMA request (eg, perform address translation) when the DMA request is routed via the second route. It uses a first algorithm that is different from the second algorithm used by the routing controller 220 and/or other devices. In some embodiments, the IOMMU 230 is electrically connected to the peripheral device 210 via a peripheral component interconnect (PCI) bus, PCI express bus, or the like.

メモリコントローラ240は、メインメモリ250との間で行き来する情報のフローを管理することができ、並びに/又は、メインメモリ250からの読み出し及び/若しくはメインメモリ250への書き込みが可能な1つ以上のデバイスを含むことができる。例えば、メモリコントローラ240は、IOMMU230からのメモリアクセス要求を、周辺デバイス210から第1ルートを介して受信してもよいし、ルーティングコントローラ220からのメモリアクセス要求を、周辺デバイス210から第2ルートを介して受信してもよい。メモリアクセス要求は、メインメモリ250の物理アドレスを特定してもよく、物理アドレスに関連して実行される動作(例えば、読み出し動作、書き込み動作等)を特定してもよく、並びに/又は、当該物理アドレスから読み出され及び/若しくは当該物理アドレスに書き込まれる情報(例えば、データ、命令等)を特定してもよい。メモリコントローラ240は、メモリアクセス要求に基づいて、メインメモリ250から情報を読み出してもよいし、メインメモリ250に情報を書き込んでもよい。   The memory controller 240 can manage the flow of information to and from the main memory 250 and/or one or more that can read from and/or write to the main memory 250. The device may be included. For example, the memory controller 240 may receive a memory access request from the IOMMU 230 from the peripheral device 210 via the first route, or may receive a memory access request from the routing controller 220 from the peripheral device 210 via the second route. It may be received via. The memory access request may identify a physical address of the main memory 250, an operation performed in association with the physical address (eg, a read operation, a write operation, etc.) and/or Information (eg, data, instructions, etc.) read from and/or written to a physical address may be identified. The memory controller 240 may read information from the main memory 250 or write information to the main memory 250 based on the memory access request.

メインメモリ250は、情報を記憶する1つ以上のデバイスを含んでもよい。例えば、メインメモリ250は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)等を含んでもよい。メインメモリ250は、物理メモリアドレスによって特定された情報を記憶することができる。   Main memory 250 may include one or more devices that store information. For example, the main memory 250 may include a random access memory (RAM), a read only memory (ROM), and the like. The main memory 250 can store the information specified by the physical memory address.

システム200は、本明細書で説明する1つ以上のプロセスを実行してもよい。システム200は、メインメモリ250等のコンピュータ可読媒体に記憶された命令(例えば、ソフトウェア命令)を実行するプロセッサに応じて、これらのプロセスを実行してもよい。コンピュータ可読媒体は、本明細書では、非一時的なメモリデバイスとして定義される。メモリデバイスは、単一の物理的な記憶装置のメモリ空間、又は、複数の物理的な記憶装置間に亘るメモリ空間を含む。   System 200 may perform one or more processes described herein. System 200 may perform these processes in response to a processor executing instructions (eg, software instructions) stored in a computer-readable medium such as main memory 250. Computer-readable media is defined herein as a non-transitory memory device. The memory device includes a memory space of a single physical storage device or a memory space between a plurality of physical storage devices.

図2に示すデバイスの数は、一例として提供されている。実際には、システム200は、追加のデバイス、より少ないデバイス、異なるデバイス、又は、図2に示すデバイスとは配置の異なるデバイスを含んでもよい。また、システム200の1つ以上のデバイスは、システム200の1つ以上の他のデバイスによって実行されるように、上述した1つ以上の機能を実行してもよい。   The number of devices shown in FIG. 2 is provided as an example. In practice, system 200 may include additional devices, fewer devices, different devices, or devices that are arranged differently than the devices shown in FIG. Also, one or more devices of system 200 may perform one or more of the functions described above as performed by one or more other devices of system 200.

図3は、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てるための例示的なプロセス300のフローチャートである。いくつかの実施形態では、図3の1つ以上のプロセスブロックは、ルーティングコントローラ220によって実行される。いくつかの実施形態では、図3の1つ以上のプロセスブロックは、周辺デバイス210、IOMMU230、メモリコントローラ240及び/又はメインメモリ250等のような、他のデバイス、又は、ルーティングコントローラ220から分離した、若しくはルーティングコントローラ220を含むデバイスのグループによって実行される。   FIG. 3 is a flowchart of an exemplary process 300 for allocating memory registers used when routing direct memory access requests in a virtualized computing environment. In some embodiments, one or more process blocks of FIG. 3 are performed by routing controller 220. In some embodiments, one or more of the process blocks of FIG. 3 are separate from other devices, such as peripheral device 210, IOMMU 230, memory controller 240 and/or main memory 250, or routing controller 220. , Or a group of devices including the routing controller 220.

図3に示すように、プロセス300は、メモリアクセス要求に関連するルーティング決定を行うために用いられる仮想アドレスの範囲を定義するベースアドレスレジスタ及び長さレジスタを割り当てること(ブロック310)を含んでもよい。例えば、ルーティングコントローラ220は、ベースアドレスレジスタ及び長さレジスタを割り当ててもよい。ベースアドレスレジスタは、仮想アドレスの範囲に関連するベースアドレスを特定する情報(例えば、仮想アドレスの範囲の一端を特定するベース仮想アドレス)を記憶してもよく、長さレジスタは、当該範囲の長さ(例えば、当該範囲に含まれる仮想アドレスの量)を特定する情報を記憶してもよい。同時に、ベースアドレス及びアドレスの量は、メモリアクセス要求に関連するルーティング決定を行うために、ルーティングコントローラ220によって用いられる仮想アドレスの範囲を定義することができる。   As shown in FIG. 3, process 300 may include allocating base address registers and length registers (block 310) that define a range of virtual addresses used to make routing decisions associated with memory access requests. .. For example, the routing controller 220 may allocate base address registers and length registers. The base address register may store information identifying the base address associated with the range of virtual addresses (eg, the base virtual address identifying one end of the range of virtual addresses), and the length register stores the length of the range. Information (e.g., the amount of virtual addresses included in the range) may be stored. At the same time, the base address and the amount of addresses can define a range of virtual addresses used by the routing controller 220 to make routing decisions associated with memory access requests.

(単純なアドレス値を用いる)一例として、ベースアドレスレジスタがベースアドレスを1,001として特定すると仮定する。さらに、長さレジスタが500個の仮想アドレスの量を特定すると仮定する。これらの2つの値に基づいて、ルーティングコントローラ220は、1,001から1,500までの500の仮想アドレスの範囲を決定することができる。ルーティングコントローラ220は、この範囲に含まれない仮想アドレスを特定するメモリアクセス要求を受信すると、IOMMU230を含む第1ルートを介してメモリアクセス要求をルーティングしてもよい。一方、ルーティングコントローラ220は、この範囲に含まれる仮想アドレスを特定するメモリアクセス要求を受信すると、IOMMU230を含まない第2ルートを介してメモリアクセス要求をルーティングしてもよい。   As an example (using a simple address value), assume that the base address register specifies the base address as 1,001. Further assume that the length register specifies a quantity of 500 virtual addresses. Based on these two values, the routing controller 220 can determine a range of 500 virtual addresses from 1,001 to 1,500. The routing controller 220 may route the memory access request via the first route including the IOMMU 230 when receiving the memory access request specifying the virtual address that is not included in the range. On the other hand, when the routing controller 220 receives a memory access request that specifies a virtual address included in this range, the routing controller 220 may route the memory access request via the second route that does not include the IOMMU 230.

いくつかの実施形態では、仮想アドレスの範囲は、メインメモリ250に記憶されたフレームバッファを表す物理アドレスの範囲にマッピングされる。フレームバッファは、ディスプレイデバイス上に提供されるピクセルのカラー値を記憶してもよく、周辺デバイス210(例えば、GPU)によってアクセスされて、(例えば、ピクセルのカラー値を取得し、カラー値に基づいてピクセルを表示することができるディスプレイデバイスに値を提供することによって)ピクセルを周期的にリフレッシュしてもよい。   In some embodiments, the range of virtual addresses is mapped to a range of physical addresses representing the frame buffer stored in main memory 250. The frame buffer may store the color values of the pixels provided on the display device and may be accessed by the peripheral device 210 (eg, GPU) (eg, to obtain the color values of the pixels and based on the color values). The pixels may be refreshed periodically (by providing a value to a display device capable of displaying the pixels).

さらに図3に示すように、プロセス300は、仮想アドレスを物理アドレスに変換するために用いられるリロケーションレジスタを割り当てること(ブロック320)を含んでもよい。例えば、ルーティングコントローラ220は、リロケーションレジスタを割り当ててもよい。リロケーションレジスタは、リロケーション値を特定する情報を記憶してもよい。ルーティングコントローラ220は、リロケーション値を用いて、メモリアクセス要求で特定された仮想アドレスをメインメモリ250に関連する物理アドレスに変換してもよい。   As further shown in FIG. 3, process 300 may include allocating relocation registers used to translate virtual addresses to physical addresses (block 320). For example, the routing controller 220 may allocate the relocation register. The relocation register may store information identifying a relocation value. The routing controller 220 may use the relocation value to translate the virtual address specified in the memory access request into a physical address associated with the main memory 250.

いくつかの実施形態では、ルーティングコントローラ220は、ベースアドレス値、長さ値及び/又はリロケーション値を変更してもよい。例えば、ルーティングコントローラ220は、仮想アドレスの範囲及び/又は当該範囲の一部がエラー(例えば、メモリエラー)に関連付けられているという指標を受信してもよい。この場合、ルーティングコントローラ220は、(例えば、エラーが仮想メモリに関連付けられている場合等に)ベースアドレス及び/又は長さを変更してもよい。さらに、又は代替として、ルーティングコントローラ220は、(例えば、エラーが物理メモリに関連付けられている場合に)リロケーション値を変更してもよい。ルーティングコントローラ220は、変更を他のデバイス(例えば、周辺デバイス210、IOMMU230等)に通知してもよい。   In some embodiments, the routing controller 220 may change the base address value, length value and/or relocation value. For example, the routing controller 220 may receive a range of virtual addresses and/or an indication that a portion of the range is associated with an error (eg, a memory error). In this case, the routing controller 220 may change the base address and/or length (eg, if the error is associated with virtual memory). Additionally or alternatively, the routing controller 220 may change the relocation value (eg, if the error is associated with physical memory). The routing controller 220 may notify other devices (eg, the peripheral device 210, the IOMMU 230, etc.) of the change.

ベースアドレスレジスタ、長さレジスタ及びリロケーションレジスタを含むレジスタセット(例えば、トリプレット)は、メモリアクセス要求に関連するルーティング決定を行う場合にルーティングコントローラ220をサポートするために共に動作してもよい。いくつかの実施形態では、ルーティングコントローラ220は、(例えば、0セットのレジスタ、4セットのレジスタ、8セットのレジスタ等の)複数のセットのレジスタを割り当てる。この場合、(例えば、特定の周辺デバイス210、周辺デバイス210のセット、全ての周辺デバイス210等の)ルーティング決定を有効又は無効にするために、複数のセットのグループ全体が(例えば、IOMMU230に関連するルーティングコントロールフィールドを用いて)有効又は無効にされてもよい。   A set of registers (eg, triplets) including base address registers, length registers and relocation registers may work together to support routing controller 220 in making routing decisions associated with memory access requests. In some embodiments, the routing controller 220 allocates multiple sets of registers (eg, 0 set of registers, 4 sets of registers, 8 sets of registers, etc.). In this case, an entire group of sets (eg, associated with IOMMU 230) may be used to enable or disable routing decisions (eg, a particular peripheral device 210, a set of peripheral devices 210, all peripheral devices 210, etc.). May be enabled or disabled (using the Routing Control field).

さらに、又は代替として、特定のレジスタセットは、ブロック330に関連して本明細書で説明するように、(例えば、1つ以上の周辺デバイス210の)ルーティング決定を行う場合に特定のレジスタセットの使用を有効又は無効にするために、イネーブルフィールドを用いて有効又は無効にされてもよい。さらに、又は代替として、ルーティングコントローラ220は、ブロック340に関連して本明細書で説明するように、アクセスコントロールフィールドを用いて、特定のレジスタセット及び/又は特定の周辺デバイス210のセットについてのアクセスコントロールを設定してもよい。   Additionally, or alternatively, the particular register set may be of a particular register set when making routing decisions (eg, of one or more peripheral devices 210), as described herein in connection with block 330. It may be enabled or disabled using the enable field to enable or disable use. Additionally or alternatively, the routing controller 220 uses the access control field to access a particular register set and/or a particular peripheral device 210 set, as described herein in connection with block 340. Controls may be set.

ルーティングコントローラ220は、ベースアドレスレジスタ、長さレジスタ及びリロケーションレジスタ(例えば、レジスタセット)間の関係の指標を記憶してもよい。例えば、ルーティングコントローラ220は、レジスタセットセット内の各レジスタを、(例えば、メモリマップされた入出力(MMIO)アドレスページ内の)隣接するメモリアドレスに記憶してもよい。   The routing controller 220 may store an indication of the relationship between the base address register, the length register and the relocation register (eg, register set). For example, the routing controller 220 may store each register in the register set set at an adjacent memory address (eg, in a memory-mapped input/output (MMIO) address page).

さらに図3に示すように、プロセス300は、異なるルートを介してメモリアクセス要求のルーティングを有効又は無効にするためにイネーブルフィールドを割り当てること(ブロック330)を含んでもよい。例えば、ルーティングコントローラ220は、イネーブルフィールドを割り当ててもよい。いくつかの実施形態では、イネーブルフィールドは、リロケーションレジスタに含まれる。ルーティングコントローラ220は、イネーブルフィールドを用いて、メモリアクセス要求のルーティング決定を行う(例えば、複数のルートのうち1つのルートを選択する)か否か、単一のルートを介してメモリアクセス要求を転送するか否かを判別してもよい。例えば、イネーブルフィールドがルーティング無効であることを示す場合、ルーティングコントローラ220は、IOMMU230を含む第1ルートを介してメモリアクセス要求を転送してもよい。一方、イネーブルフィールドがルーティング有効であることを示す場合、ルーティングコントローラ220は、メモリアクセス要求を分析して、第1ルート又はIOMMU230を含まない第2ルートを介してメモリアクセス要求をルーティングするか否かを判別してもよい。   Further, as shown in FIG. 3, process 300 may include assigning an enable field to enable or disable routing of memory access requests via different routes (block 330). For example, the routing controller 220 may assign the enable field. In some embodiments, the enable field is included in the relocation register. The routing controller 220 uses the enable field to forward the memory access request through a single route, whether to make a routing decision for the memory access request (eg, to select one route out of multiple routes). It may be determined whether or not to do. For example, if the enable field indicates that routing is disabled, the routing controller 220 may forward the memory access request via the first route that includes the IOMMU 230. On the other hand, if the enable field indicates that routing is enabled, the routing controller 220 analyzes the memory access request and determines whether to route the memory access request through the first route or the second route that does not include the IOMMU 230. May be determined.

いくつかの実施形態では、ルーティングコントローラ220は、複数の周辺デバイス210のルーティングを制御する。この場合、ルーティングコントローラ220は、ルーティング決定に関連する周辺デバイス210を示すイネーブルフィールドのセットを割り当ててもよい。例えば、ルーティングコントローラ220は、周辺デバイス210の第1セットから受信したメモリアクセス要求のルーティング決定を行ってもよく、周辺デバイス210の第2セットから受信したメモリアクセス要求のルーティング決定を行わなくてもよい(例えば、周辺デバイス210の第2セットから受信した要求をIOMMU230に転送してもよい)。ルーティングコントローラ220は、イネーブルフィールドのセットに記憶された情報に基づいて、特定の周辺デバイス210から受信したメモリアクセス要求のルーティング決定を行うか否かを判別してもよい。   In some embodiments, the routing controller 220 controls the routing of multiple peripheral devices 210. In this case, the routing controller 220 may assign a set of enable fields that indicate the peripheral devices 210 that are involved in the routing decision. For example, the routing controller 220 may make the routing decision for the memory access request received from the first set of peripheral devices 210 and may not make the routing decision for the memory access request received from the second set of peripheral devices 210. Yes (eg, a request received from the second set of peripheral devices 210 may be forwarded to IOMMU 230). The routing controller 220 may determine whether to make a routing decision for a memory access request received from a particular peripheral device 210 based on the information stored in the set of enable fields.

さらに図3に示すように、プロセス300は、要求されたアクセスタイプを許可又は拒否するためにアクセスコントロールフィールドを割り当てること(ブロック340)を含んでもよい。例えば、ルーティングコントローラ220は、アクセスコントロールフィールドを割り当ててもよい。いくつかの実施形態では、アクセスコントロールフィールドは、リロケーションレジスタに含まれてもよい。ルーティングコントローラ220は、アクセスコントロールフィールドを用いて、メモリアクセス要求によって特定される、要求されたアクセスタイプ(例えば、読み出しアクセス、書き込みアクセス、アクセス不可等)を許可又は拒否するかどうかを判別してもよい。   As further shown in FIG. 3, process 300 may include assigning access control fields to allow or deny the requested access types (block 340). For example, the routing controller 220 may assign the access control field. In some embodiments, the access control field may be included in the relocation register. The routing controller 220 may also use the access control field to determine whether to permit or deny the requested access type (eg, read access, write access, no access, etc.) identified by the memory access request. Good.

いくつかの実施形態では、ルーティングコントローラ220は、複数の周辺デバイス210のルーティングを制御する。この場合、ルーティングコントローラ220は、周辺デバイス210のセットに関連するアクセスタイプを許可又は拒否するかどうかを示すアクセスコントロールフィールドのセットを割り当ててもよい。例えば、ルーティングコントローラ220は、周辺デバイス210の第1セットから受信したメモリアクセス要求に対して第1アクセスタイプ(例えば、読み出しアクセス)を適用し、周辺デバイス210の第2セットから受信したメモリアクセス要求に対して第2アクセスタイプ(例えば、読み出し/書き込みアクセス)を適用してもよい。ルーティングコントローラ220は、アクセスコントロールフィールドのセットに記憶された情報に基づいて、特定の周辺デバイス210から受信したメモリアクセス要求に適用されるアクセスタイプを判別してもよい。   In some embodiments, the routing controller 220 controls the routing of multiple peripheral devices 210. In this case, the routing controller 220 may assign a set of access control fields that indicate whether to allow or deny the access types associated with the set of peripheral devices 210. For example, the routing controller 220 may apply the first access type (eg, read access) to the memory access request received from the first set of peripheral devices 210, and the memory access request received from the second set of peripheral devices 210. A second access type (eg, read/write access) may be applied to. The routing controller 220 may determine the access type applied to the memory access request received from a particular peripheral device 210 based on the information stored in the set of access control fields.

さらに図3に示すように、プロセス300は、割り当てられたレジスタを検証すること(ブロック350)を含んでもよい。例えば、ルーティングコントローラ220は、ベースアドレスレジスタ、長さレジスタ及び/又はリロケーションレジスタを検証してもよい。いくつかの実施形態では、ルーティングコントローラ220は、(例えば、IOMMU230を含む、及び/又は、ページテーブルを用いてアドレス変換を実行する)第1ルートを介してルーティングされる場合、並びに、(例えば、IOMMU230を含まない、及び/又は、メモリリロケーションアルゴリズムを用いてアドレス変換を実行する)第2ルートを介してルーティングされる場合に、特定の仮想アドレスが同一の物理アドレスに変換されるのを確実にすることによって、割り当てられたレジスタを検証する。   Further, as shown in FIG. 3, process 300 may include validating the allocated register (block 350). For example, the routing controller 220 may verify the base address register, length register and/or relocation register. In some embodiments, the routing controller 220 is routed via a first route (eg, including the IOMMU 230 and/or performing address translation using a page table), and (eg, Ensures that a particular virtual address is translated to the same physical address when routed through a second route (not including IOMMU 230 and/or performing address translation using a memory relocation algorithm) Verify the allocated register by doing.

いくつかの実施形態では、ルーティングコントローラ220は、仮想アドレスの複数の範囲を設定するプロセス300を繰り返す。異なる範囲は、異なるベースアドレス値、異なる長さの値、異なるリロケーション値等に関連してもよい。いくつかの実施形態では、ルーティングコントローラ220は、異なる範囲に対して、(例えば、同一のリロケーションレジスタに記憶された)同一のリロケーション値を用いる。さらに、又は代替として、ルーティングコントローラ220は、異なる範囲に対して同一のイネーブルフィールド及び/又はアクセスコントロールフィールドを用いてもよいし、異なる範囲に対して異なるイネーブルフィールド及び/又はアクセスコントロールフィールドを用いてもよい。このようにして、ルーティングコントローラ220は、メモリアクセス要求(例えば、仮想化されたコンピューティング環境におけるグラフィックス処理に関連するメモリアクセス要求)のより高速なルーティングのために、物理メモリの非連続範囲を設定してもよい。   In some embodiments, the routing controller 220 repeats the process 300 of setting multiple ranges of virtual addresses. Different ranges may be associated with different base address values, different length values, different relocation values, etc. In some embodiments, the routing controller 220 uses the same relocation value (eg, stored in the same relocation register) for different ranges. Additionally or alternatively, the routing controller 220 may use the same enable field and/or access control field for different ranges, or different enable fields and/or access control fields for different ranges. Good. In this way, the routing controller 220 may provide a non-contiguous range of physical memory for faster routing of memory access requests (eg, memory access requests associated with graphics processing in a virtualized computing environment). You may set it.

ルーティングコントローラ220が仮想アドレスの複数の範囲を割り当てる場合、ルーティングコントローラ220は、レジスタによって特定される複数の仮想アドレス範囲が重複しないことを確実にすることによって、割り当てられたレジスタを検証してもよい。例えば、ルーティングコントローラ220は、複数のベースアドレスレジスタ及び各々の長さレジスタを用いて、複数の仮想アドレス範囲を定義してもよい。ルーティングコントローラ220は、特定の仮想アドレスが複数の範囲に含まれるか否かを判別することによって、複数の範囲が重複しないことを確実にしてもよい。複数の範囲が重複しているとルーティングコントローラ220が判別した場合には、ルーティングコントローラ220は、エラー通知を提供し、及び/又は、これらの範囲が重複しないように1つ以上のレジスタを再割り当てしてもよい。   When the routing controller 220 allocates multiple ranges of virtual addresses, the routing controller 220 may verify the allocated registers by ensuring that the multiple virtual address ranges identified by the registers do not overlap. .. For example, the routing controller 220 may use multiple base address registers and each length register to define multiple virtual address ranges. The routing controller 220 may ensure that the ranges do not overlap by determining whether a particular virtual address is included in the ranges. If the routing controller 220 determines that the ranges overlap, the routing controller 220 provides an error notification and/or reallocates one or more registers so that the ranges do not overlap. You may.

図3はプロセス300の例示的なブロックを示しているが、いくつかの実施形態では、プロセス300は、図3に示されたブロックの追加ブロック、より少ないブロック、異なるブロック、異なる配置のブロックを含んでもよい。さらに、又は代替として、プロセス300のブロックのうち2つ以上のブロックは、並行して実行されてもよい。   Although FIG. 3 illustrates exemplary blocks of process 300, in some embodiments process 300 may include additional blocks, fewer blocks, different blocks, and differently arranged blocks of the blocks shown in FIG. May be included. Additionally or alternatively, two or more of the blocks of process 300 may be executed in parallel.

図4A及び図4Bは、図3に示す例示的なプロセス300に関する例示的な実施形態400を示す図である。図4A及び図4Bは、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てる例を示している。   4A and 4B are diagrams illustrating an exemplary embodiment 400 for the exemplary process 300 shown in FIG. 4A and 4B illustrate an example of allocating memory registers used when routing direct memory access requests in a virtualized computing environment.

図4Aに示すように、ルーティングコントローラ220がベースアドレスレジスタ405を割り当てると仮定する。図示するように、ベースアドレスレジスタ405が64ビットレジスタ(例えば、ビット0〜63)を含むと仮定する。さらに、ビット0〜11及び52〜63が予約されていると仮定する。いくつかの実施形態では、予約されたビットは、デバッグ目的で用いられる。最後に、ビット12〜51(例えば、合計40ビット)を用いて、200の値を有するベースアドレスを特定すると仮定する。   Suppose the routing controller 220 allocates a base address register 405, as shown in FIG. 4A. As shown, base address register 405 is assumed to include a 64-bit register (eg, bits 0-63). Further assume that bits 0-11 and 52-63 are reserved. In some embodiments, reserved bits are used for debugging purposes. Finally, suppose bits 12-51 (eg, 40 bits total) are used to identify the base address having a value of 200.

さらに図4Aに示すように、ルーティングコントローラ220が長さレジスタ410を割り当てると仮定する。図示するように、長さレジスタ410が64ビットレジスタ(例えば、ビット0〜63)を含むと仮定する。さらに、ビット0〜11及び52〜63が予約されていると仮定する。最後に、ビット12〜51(例えば、合計40ビット)を用いて、500の値の長さを特定すると仮定する。   Further assume that routing controller 220 allocates length register 410, as shown in FIG. 4A. As shown, length register 410 is assumed to include 64-bit registers (eg, bits 0-63). Further assume that bits 0-11 and 52-63 are reserved. Finally, suppose bits 12-51 (eg, 40 bits total) are used to identify the length of the value of 500.

さらに図4Aに示すように、ベースアドレスレジスタ405及び長さレジスタ410に記憶された値が、IOMMU230を含まないルートを介してルーティングされる仮想アドレス空間415内の仮想アドレスの範囲を定義すると仮定する。符号420で示すように、ベースアドレスは、仮想アドレスの範囲の開始を特定する。仮想アドレスの範囲は、200の仮想アドレスで開始する。符号425で示すように、長さは、その範囲に含まれる仮想アドレスの数を特定する。この場合、符号430で示すように、200〜699の仮想アドレス範囲に500個の仮想アドレスが含まれる。   As further shown in FIG. 4A, assume that the values stored in base address register 405 and length register 410 define a range of virtual addresses within virtual address space 415 that are routed through routes that do not include IOMMU 230. . The base address identifies the beginning of the range of virtual addresses, as indicated at 420. The range of virtual addresses starts at 200 virtual addresses. As indicated by reference numeral 425, the length specifies the number of virtual addresses included in the range. In this case, as indicated by reference numeral 430, 500 virtual addresses are included in the virtual address range of 200 to 699.

いくつかの実施形態では、仮想アドレス空間415は、メインメモリ250に記憶されたフレームバッファに対応する仮想アドレスの範囲を表す。フレームバッファは、ディスプレイデバイスのピクセルのカラー値を記憶してもよく、ピクセルを周期的にリフレッシュするGPUによってアクセスされてもよい。フレームバッファに関連するメモリアクセス要求を、IOMMU230を含まないより高速なルートを介してルーティングすることによって、ルーティングコントローラ220は、IOMMU230を含むより低速なルートを介してメモリアクセス要求をルーティングする場合と比較して、より迅速にディスプレイリフレッシュを実行することができる。   In some embodiments, virtual address space 415 represents a range of virtual addresses corresponding to frame buffers stored in main memory 250. The frame buffer may store color values for pixels of the display device and may be accessed by a GPU that periodically refreshes the pixels. By routing the memory access request associated with the frame buffer through a faster route that does not include the IOMMU 230, the routing controller 220 compares the case where the memory access request is routed through a slower route that includes the IOMMU 230. Then, the display refresh can be executed more quickly.

図4Bに示すように、ルーティングコントローラ220がリロケーションレジスタ435を割り当てると仮定する。図示するように、リロケーションレジスタ435が64ビットレジスタ(例えば、ビット0〜63)を含むと仮定する。さらに、ビット2〜11及び52〜63が予約されていると仮定する。符号440で示すように、ビット12〜51(例えば、合計40ビット)を用いて、値が400のリロケーション値を特定すると仮定する。符号445で示すように、ルーティングコントローラ220がメモリアクセス要求のルーティング決定を行うか否かを示すイネーブルビットとして、ビット0を用いると仮定する。符号450で示すように、メモリアクセス要求(例えば、読み出しアクセス、書き込みアクセス、読み出し及び書き込みアクセス等)について許可されたアクセスタイプを特定するアクセスコントロールビットとして、ビット1を用いると仮定する。   Suppose the routing controller 220 allocates a relocation register 435, as shown in FIG. 4B. As shown, assume that relocation register 435 comprises a 64-bit register (eg, bits 0-63). Further assume that bits 2-11 and 52-63 are reserved. Assume that bits 12-51 (e.g., 40 bits total) are used to identify a relocation value of value 400, as indicated by reference numeral 440. As indicated by reference numeral 445, it is assumed that bit 0 is used as an enable bit indicating whether the routing controller 220 makes a routing decision for a memory access request. As indicated by reference numeral 450, it is assumed that bit 1 is used as an access control bit that specifies an access type permitted for a memory access request (eg, read access, write access, read and write access, etc.).

上述したように、図4A及び図4Bは単なる一例である。他の例も可能であり、図4A及び図4Bに関して説明したものとは異なっていてもよい。   As mentioned above, FIGS. 4A and 4B are merely examples. Other examples are possible and may be different than those described with respect to Figures 4A and 4B.

図5は、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングするための例示的なプロセス500のフローチャートである。いくつかの実施形態では、図5の1つ以上のプロセスブロックは、ルーティングコントローラ220によって実行される。いくつかの実施形態では、図5の1つ以上のプロセスブロックは、周辺デバイス210、IOMMU230、メモリコントローラ240及び/又はメインメモリ250等のような、他のデバイス、又は、ルーティングコントローラ220から分離した、若しくはルーティングコントローラ220を含むデバイスのグループによって実行される。   FIG. 5 is a flowchart of an exemplary process 500 for routing direct memory access requests in a virtualized computing environment. In some embodiments, one or more process blocks of FIG. 5 are performed by routing controller 220. In some embodiments, one or more of the process blocks of FIG. 5 are separate from other devices, such as peripheral device 210, IOMMU 230, memory controller 240 and/or main memory 250, or routing controller 220. , Or a group of devices including the routing controller 220.

図5に示すように、プロセス500は、仮想アドレスを特定するメモリアクセス要求を周辺デバイスから受信すること(ブロック510)を含んでもよい。例えば、ルーティングコントローラ220は、メモリアクセス要求を周辺デバイス210から受信してもよい。メモリアクセス要求は、いくつかの実施形態において、ダイレクトメモリアクセス要求を含む。さらに、又は代替として、メモリアクセス要求は、周辺デバイス210に関連するゲスト物理アドレス等の仮想アドレスを特定してもよい。   As shown in FIG. 5, process 500 may include receiving a memory access request identifying a virtual address from a peripheral device (block 510). For example, the routing controller 220 may receive the memory access request from the peripheral device 210. The memory access request comprises a direct memory access request in some embodiments. Additionally or alternatively, the memory access request may identify a virtual address, such as a guest physical address associated with the peripheral device 210.

いくつかの実施形態では、メモリアクセス要求は、メモリアクセス要求に関連するアクセスタイプを特定する。例えば、メモリアクセス要求は、メインメモリ250から情報を読み出す要求、メインメモリ250に情報を書き込む要求等を含んでもよい。さらに、又は代替として、メモリアクセス要求は、メインメモリ250から読み出される情報、及び/又は、メインメモリ250に書き込まれる情報を特定してもよい。   In some embodiments, the memory access request identifies an access type associated with the memory access request. For example, the memory access request may include a request to read information from the main memory 250, a request to write information to the main memory 250, and the like. Additionally or alternatively, the memory access request may specify information read from main memory 250 and/or information written to main memory 250.

さらに図5に示すように、プロセス500は、ルーティングが有効であるか否かを判別すること(ブロック520)を含んでもよい。例えば、ルーティングコントローラ220は、(例えば、リロケーションレジスタに含まれる)イネーブルビットを読み出すことによって、ルーティングが有効であるか否かを判別してもよい。イネーブルビットの値は、ルーティングが、(例えば、イネーブルビットが例えば1という第1値を含む場合)有効であり、(例えば、イネーブルビットが例えば0という第2値を含む場合)無効であるという指標を提供してもよい。   Further, as shown in FIG. 5, the process 500 may include determining if the routing is valid (block 520). For example, the routing controller 220 may determine whether the routing is valid by reading an enable bit (eg, contained in the relocation register). The value of the enable bit is an indicator that the routing is valid (eg, if the enable bit contains a first value, eg 1,) and is invalid (eg, if the enable bit contains a second value, eg 0). May be provided.

ルーティングが有効でない場合(ブロック520:いいえ)、プロセス500は、メモリアクセス要求を、第1ルートを介してメインメモリにルーティングすること(ブロック530)を含んでもよい。例えば、ルーティングコントローラ220は、ルーティングが有効でないと判別した場合に(例えば、イネーブルビットが、ルーティングが有効でないことを示す場合に)、メモリアクセス要求を、第1ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングしてもよい。   If routing is not enabled (block 520: NO), process 500 may include routing the memory access request to main memory via the first route (block 530). For example, when the routing controller 220 determines that the routing is not valid (eg, when the enable bit indicates that the routing is not valid), the memory access request is sent to the memory controller 240 and/or the memory access request via the first route. Alternatively, it may be routed to the main memory 250.

いくつかの実施形態では、メモリコントローラ240及び/又はメインメモリ250への第1ルートはIOMMU230を含み、メモリコントローラ240及び/又はメインメモリ250への第2ルートはIOMMU230を含まない。さらに、又は代替として、第1ルートは、第2ルートよりも(例えば、IOMMU230による)メモリアクセス要求のさらなる処理を含んでもよい。さらに、又は代替として、第1ルートは、第2ルートと比べて、メモリコントローラ240及び/又はメインメモリ250に対するより高いレイテンシ(例えば、より高い平均レイテンシ)を有してもよい。   In some embodiments, the first route to memory controller 240 and/or main memory 250 includes IOMMU 230 and the second route to memory controller 240 and/or main memory 250 does not include IOMMU 230. Additionally or alternatively, the first route may include further processing of the memory access request (eg, by IOMMU 230) than the second route. Additionally or alternatively, the first route may have a higher latency (eg, higher average latency) for the memory controller 240 and/or main memory 250 as compared to the second route.

さらに、又は代替として、第1ルートを介してルーティングされたメモリアクセス要求は、第2ルートを介してルーティングされたメモリアクセス要求に関連して使用されたアルゴリズムとは異なるアルゴリズムを介してアドレス変換されてもよい。例えば、第1ルートにおけるアドレス変換は、1つ以上のページテーブルを用いて、仮想アドレスを物理アドレスに変換してもよい。いくつかの実施形態では、第1ルートは、複数のページテーブルを用いてアドレス変換を実行する。逆に、第2ルートにおけるアドレス変換は、何れのページテーブルも用いないことがある。むしろ、第2ルートにおけるアドレス変換は、別の値(例えば、仮想アドレス値、仮想アドレス値とベースアドレス値とに基づいて判別されたオフセット値等)に値を加えることによって、又は、当該別の値から値を引くことによって物理アドレスを判別する、メモリリロケーションアルゴリズムを用いてもよい。このようにして、第2ルートにおけるアドレス変換は、(例えば、メモリリロケーションが、ページテーブルを用いるよりも高速であるため)第1ルートにおけるアドレス変換よりも高速となり得る。   Additionally or alternatively, the memory access request routed via the first route is address translated via a different algorithm than the algorithm used in connection with the memory access request routed via the second route. May be. For example, the address translation in the first route may translate a virtual address into a physical address using one or more page tables. In some embodiments, the first route uses multiple page tables to perform address translation. Conversely, the address translation in the second route may not use any page table. Rather, the address translation in the second route is performed by adding a value to another value (for example, a virtual address value, an offset value determined based on the virtual address value and the base address value, or the like), or A memory relocation algorithm that determines a physical address by subtracting a value from a value may be used. In this way, address translation in the second route may be faster than address translation in the first route (eg, because memory relocation is faster than using a page table).

ルーティングが有効である場合(ブロック520:はい)、プロセス500は、仮想アドレス及びベースアドレスを比較することによってオフセット値を計算すること(ブロック540)を含んでもよい。例えば、ルーティングコントローラ220は、ルーティングが有効であると判別した場合に(例えば、イネーブルビットが、ルーティングが有効であることを示す場合に)、メモリアクセス要求で特定された仮想アドレスとベースアドレスとを比較することによって、オフセット値を計算してもよい。   If the routing is valid (block 520: yes), process 500 may include calculating an offset value by comparing the virtual address and the base address (block 540). For example, when the routing controller 220 determines that the routing is valid (for example, when the enable bit indicates that the routing is valid), the routing controller 220 determines the virtual address and the base address specified by the memory access request. The offset value may be calculated by comparing.

いくつかの実施形態では、ルーティングコントローラ220は、仮想アドレスとベースアドレスとの差としてオフセット値を計算する。例えば、ルーティングコントローラ220は、仮想アドレス(例えば、仮想アドレスを表す値)からベースアドレス(例えば、ベースアドレスを表す値)を減算して、オフセット値を計算してもよい。一例として、ベースアドレス値が1,000であり、仮想アドレス値が1,300であると仮定すると、ルーティングコントローラ220は、300(1,300−1,000=300)というオフセット値を計算してもよい。   In some embodiments, the routing controller 220 calculates the offset value as the difference between the virtual address and the base address. For example, the routing controller 220 may calculate the offset value by subtracting the base address (eg, the value representing the base address) from the virtual address (eg, the value representing the virtual address). As an example, assuming that the base address value is 1,000 and the virtual address value is 1,300, the routing controller 220 calculates an offset value of 300 (1,300-1,000=300). Good.

さらに図5に示すように、プロセス500は、仮想アドレスが、メモリアクセス要求のルーティングに関連する仮想アドレスの範囲内に存在するか否かを判別すること(ブロック550)を含んでもよい。例えば、ルーティングコントローラ220は、仮想アドレスが、図3に関連して本明細書で説明したように決定された範囲内に存在するか否かを判別してもよい。いくつかの実施形態では、ルーティングコントローラ220は、仮想アドレスが、オフセット値に基づく範囲内に存在するか否かを判別する。例えば、ルーティングコントローラ220は、オフセット値を第1閾値(例えば、0)及び/又は第2閾値(例えば、長さレジスタで特定される長さ値)と比較して、仮想アドレスが当該範囲内に存在するか否かを判別することができる。   As further shown in FIG. 5, process 500 may include determining whether the virtual address is within a range of virtual addresses associated with routing memory access requests (block 550). For example, the routing controller 220 may determine whether the virtual address is within the range determined as described herein with respect to FIG. In some embodiments, the routing controller 220 determines if the virtual address is within a range based on the offset value. For example, the routing controller 220 compares the offset value with a first threshold (eg, 0) and/or a second threshold (eg, a length value specified in the length register) to ensure that the virtual address is within the range. It can be determined whether or not it exists.

ルーティングコントローラ220は、いくつかの実施形態において、メモリアクセス要求に適用する、割り当てられたレジスタのセットを判別する。例えば、複数のレジスタセットが割り当てられてもよく、ルーティングコントローラ220は、メモリアクセス要求に適用するレジスタセットを選択してもよい。さらに、又は代替として、ルーティングコントローラ220は、メモリアクセス要求で特定される仮想アドレスが特定のレジスタセットに関連する仮想アドレスの範囲内に存在すると判別されるまで、複数のレジスタセットをメモリアクセス要求に適用してもよい。この場合、ルーティングコントローラ220は、特定のレジスタセットをメモリアクセス要求に適用してもよい。仮想アドレスが何れの範囲内に存在しない場合に、ルーティングコントローラ220は、第1ルートを介してメモリアクセス要求をルーティングしてもよい。   The routing controller 220, in some embodiments, determines the set of allocated registers to apply to the memory access request. For example, multiple register sets may be assigned and the routing controller 220 may select the register set to apply to the memory access request. In addition, or in the alternative, the routing controller 220 may send multiple register sets to the memory access request until it is determined that the virtual address specified in the memory access request is within the range of virtual addresses associated with the particular register set. You may apply. In this case, the routing controller 220 may apply a particular set of registers to the memory access request. If the virtual address is not in any range, the routing controller 220 may route the memory access request via the first route.

いくつかの実施形態では、仮想アドレスの第1範囲は、仮想アドレスの第2範囲と重複する。この場合、ルーティングコントローラ220は、これらの範囲のうち1つの範囲を選択し、選択された範囲に関連するレジスタセットをメモリアクセス要求に適用してもよい。   In some embodiments, the first range of virtual addresses overlaps the second range of virtual addresses. In this case, the routing controller 220 may select one of these ranges and apply the register set associated with the selected range to the memory access request.

仮想アドレスが範囲内に存在しない場合(ブロック550:いいえ)、プロセス500は、メモリアクセス要求を、第1ルートを介してメインメモリにルーティングすること(ブロック530)を含んでもよい。例えば、ルーティングコントローラ220は、仮想アドレスが範囲内に存在しないと判別した場合、ブロック530に関連して本明細書で説明したように、メモリアクセス要求を、第1ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングしてもよい。   If the virtual address is not in range (block 550: NO), process 500 may include routing the memory access request to main memory via the first route (block 530). For example, if the routing controller 220 determines that the virtual address is not within the range, it issues a memory access request to the memory controller 240 via the first route as described herein with respect to block 530. And/or may be routed to the main memory 250.

いくつかの実施形態では、ルーティングコントローラ220は、オフセット値が第1閾値又は第2閾値を満たす場合に、仮想アドレスが範囲内に存在しないと判別する。第1閾値は0と等しくてもよく、第2閾値は長さ値に対応してもよい。例えば、ルーティングコントローラ220は、オフセット値が0よりも小さい場合に、仮想アドレスが範囲内に存在しないと判別してもよい。例えば、ルーティングコントローラ220が、900という仮想アドレスを特定するメモリアクセス要求を受信すると仮定する。さらに、ベースアドレス値が1,000であると仮定する。この例において、オフセット値は、−100(900−1,000=−100)である。−100は0より小さいため、このオフセット値は、(例えば、範囲が1,000で開始するため)900という仮想アドレスが範囲外であることを示す。   In some embodiments, the routing controller 220 determines that the virtual address is not in range if the offset value satisfies the first threshold or the second threshold. The first threshold may be equal to 0 and the second threshold may correspond to the length value. For example, the routing controller 220 may determine that the virtual address does not exist within the range when the offset value is smaller than 0. For example, assume that routing controller 220 receives a memory access request specifying a virtual address of 900. Further assume that the base address value is 1,000. In this example, the offset value is -100 (900-1,000=-100). Since -100 is less than 0, this offset value indicates that the virtual address of 900 (for example, because the range starts at 1,000) is out of range.

さらに、又は代替として、ルーティングコントローラ220は、オフセット値が長さ値以上である場合、仮想アドレスが範囲内に存在しないと判別してもよい。例えば、オフセット値が300であり、長さ値が200であると仮定する。オフセット値が長さ値よりも大きいため、ルーティングコントローラ220は、仮想アドレスが範囲内に存在しないと判別して、第1ルートを介してメモリアクセス要求をルーティングする。この例では、1,000というベースアドレス値は、範囲の開始アドレス1,000を示し、200という長さ値は、(例えば、1,000〜1,199まで200の値がある)範囲の終了値1,199を示す。オフセット値300(1,300−1,000)を生成した1,300という仮想アドレスは、範囲外にある。同様に、長さ値に等しいオフセット値200を生成する1,200という仮想アドレスは、範囲外にある。   Additionally or alternatively, the routing controller 220 may determine that the virtual address is not in range if the offset value is greater than or equal to the length value. For example, assume that the offset value is 300 and the length value is 200. Since the offset value is larger than the length value, the routing controller 220 determines that the virtual address does not exist within the range and routes the memory access request via the first route. In this example, a base address value of 1,000 indicates the starting address of the range of 1,000 and a length value of 200 indicates the end of the range (for example, there are 200 values from 1,000 to 1,199). A value of 1,199 is shown. The virtual address of 1,300 that generated the offset value 300 (1,300-1,000) is outside the range. Similarly, the virtual address of 1,200, which produces an offset value of 200 equal to the length value, is out of range.

このようにして、ルーティングコントローラ220は、オフセット値が0未満である場合、又は、オフセット値が長さ値以上である場合に、仮想アドレスが範囲内に存在しないと判別することができる。ルーティングコントローラ220は、オフセット値を用いて仮想アドレスが範囲内に存在するか否かを判別することによって、仮想アドレスを範囲の終了値と直接比較することに対して、仮想アドレスが範囲内に存在するか否かを判別するのに必要な計算資源の量を低減することができる。   In this way, the routing controller 220 can determine that the virtual address does not exist within the range when the offset value is less than 0 or when the offset value is greater than or equal to the length value. The routing controller 220 compares the virtual address directly with the end value of the range by determining whether the virtual address is within the range using the offset value, whereas the virtual address exists within the range. It is possible to reduce the amount of computational resources required to determine whether or not to do.

仮想アドレスが範囲内に存在する場合(ブロック550:はい)、プロセス500は、要求されたアクセスタイプが許可されているか否かを判別する(ブロック560)ことを含んでもよい。例えば、ルーティングコントローラ220は、仮想アドレスが範囲内に存在すると判別した場合に、メモリアクセス要求で特定されたアクセスタイプが許可されているか否かを判別してもよい。   If the virtual address is within the range (block 550: yes), process 500 may include determining whether the requested access type is permitted (block 560). For example, when determining that the virtual address exists within the range, the routing controller 220 may determine whether or not the access type specified by the memory access request is permitted.

いくつかの実施形態では、ルーティングコントローラ220は、オフセット値が第1閾値及び第2閾値を満たす場合に、仮想アドレスが範囲内に存在すると判別する。第1閾値は0であってもよく、第2閾値は長さ値に対応してもよい。例えば、ルーティングコントローラ220は、オフセット値が0以上である場合、及び、オフセット値が長さ値よりも小さい場合に、仮想アドレスが範囲内に存在する判別してもよい。例えば、ルーティングコントローラ220が、1,300という仮想アドレスを特定するメモリアクセス要求を受信すると仮定する。また、ベースアドレス値が1,000であると仮定する。この例では、オフセット値は300(1,300−1,000=300)である。300は0より大きいため、このオフセット値は、1,300という仮想アドレスが(例えば、長さ値に依拠する)範囲内に存在することを示す。   In some embodiments, the routing controller 220 determines that the virtual address is within the range if the offset value satisfies the first threshold and the second threshold. The first threshold may be 0 and the second threshold may correspond to the length value. For example, the routing controller 220 may determine that the virtual address is within the range when the offset value is 0 or more and when the offset value is smaller than the length value. For example, assume that routing controller 220 receives a memory access request specifying a virtual address of 1,300. Also assume that the base address value is 1,000. In this example, the offset value is 300 (1,300-1,000=300). Since 300 is greater than 0, this offset value indicates that the virtual address of 1,300 is within the range (eg, depending on the length value).

オフセット値が300である上記の例を続けると、長さ値が500であると仮定する。オフセット値が長さ値よりも小さいので、ルーティングコントローラ220は、仮想アドレスが範囲内に存在すると判別する。この例では、ベースアドレス値1,000は、範囲の開始アドレスを1,000と特定し、長さ値500は、(例えば、1,000〜1,499までに500の値がある)範囲について1,499という終了値を特定する。オフセット値300(1,300−1,000)を生成した1,300という仮想アドレスは、この範囲内に存在する。   Continuing with the example above where the offset value is 300, assume that the length value is 500. Since the offset value is smaller than the length value, the routing controller 220 determines that the virtual address exists within the range. In this example, the base address value of 1,000 identifies the starting address of the range as 1,000 and the length value of 500 is for the range (eg, there are 500 values between 1,000 and 1,499). The ending value of 1,499 is specified. The virtual address of 1,300 that generated the offset value 300 (1,300-1,000) exists within this range.

ルーティングコントローラ220は、いくつかの実施形態では、要求されたアクセスタイプが許可されるか否かを、(例えば、リロケーションレジスタに含まれる)アクセスコントロールビットを読み出すことによって判別する。アクセスコントロールビットの値は、特定のアクセスタイプ(例えば、読み出しアクセス、書き込みアクセス等)を許可又は拒否するか否かの指標を提供してもよい。   The routing controller 220, in some embodiments, determines whether the requested access type is allowed by reading an access control bit (eg, included in the relocation register). The value of the access control bits may provide an indication of whether to allow or deny a particular access type (eg, read access, write access, etc.).

要求されたアクセスタイプが許可されていない場合(ブロック560:いいえ)、プロセス500は、メモリアクセス要求を、第1ルートを介してメインメモリにルーティングすること(ブロック530)を含んでもよい。例えば、ルーティングコントローラ220は、(例えば、アクセスコントロールビットの読み出しに基づいて)要求されたアクセスタイプが許可されていないと判別した場合に、ブロック530に関連して本明細書で説明したように、メモリアクセス要求を、第1ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングしてもよい。さらに、又は代替として、ルーティングコントローラ220は、要求されたアクセスタイプが許可されていない場合に、エラー表示を提供してもよい。   If the requested access type is not allowed (block 560: NO), process 500 may include routing the memory access request to main memory via the first route (block 530). For example, if the routing controller 220 determines that the requested access type is not allowed (eg, based on reading the access control bits), then as described herein with respect to block 530, The memory access request may be routed to the memory controller 240 and/or the main memory 250 via the first route. Additionally or alternatively, the routing controller 220 may provide an error indication if the requested access type is not allowed.

一例として、特定の仮想アドレスを特定するメモリアクセス要求が、メインメモリ250に書き込む要求を含むと仮定する。さらに、アクセスコントロールビットが、特定の仮想アドレス又は当該特定の仮想アドレスに関連する物理アドレスが読み出し専用であることを示すと仮定する。この場合、ルーティングコントローラ220は、メモリアクセス要求を、第1ルートを介して(例えば、IOMMU230を含む)メインメモリ250に向けてルーティングする。IOMMU230は、アクセスを拒否してもよいし、エラーを提供する等してもよい。   As an example, assume that a memory access request that identifies a particular virtual address includes a request to write to main memory 250. Further assume that the access control bits indicate that the particular virtual address or the physical address associated with the particular virtual address is read-only. In this case, the routing controller 220 routes the memory access request toward the main memory 250 (including the IOMMU 230, for example) via the first route. The IOMMU 230 may deny access, provide an error, etc.

要求されたアクセスタイプが許可された場合(ブロック560:はい)、プロセス500は、オフセット値及びリロケーション値を組み合わせることによって、仮想アドレスに対応する物理アドレスを判別すること(ブロック570)を含んでもよい。例えば、ルーティングコントローラ220は、(例えば、アクセスコントロールビットを読み出すことに基づいて、)要求されたアクセスタイプを許可すると判別した場合に、オフセット値と、リロケーションレジスタで特定されたリロケーション値と、を組み合わせて、仮想アドレスに対応する物理アドレス判別してもよい。   If the requested access type is granted (block 560: yes), process 500 may include determining the physical address corresponding to the virtual address by combining the offset value and the relocation value (block 570). . For example, if the routing controller 220 determines to allow the requested access type (eg, based on reading the access control bits), it combines the offset value with the relocation value specified in the relocation register. Then, the physical address corresponding to the virtual address may be determined.

一例として、メモリアクセス要求は、読み出し要求を含んでもよく、アクセスコントロールビットは、読み出し要求が許可されることを示してもよい。さらに、又は代替として、メモリアクセス要求は、書き込み要求を含んでもよく、アクセスコントロールビットは、書き込み要求が許可されることを示してもよい。これらの場合、ルーティングコントローラ220は、仮想アドレスと、リロケーションレジスタで特定されたリロケーション値とに基づいて、仮想アドレスに対応する物理アドレスを計算してもよい。   As an example, the memory access request may include a read request and the access control bit may indicate that the read request is granted. Additionally or alternatively, the memory access request may include a write request and the access control bit may indicate that the write request is granted. In these cases, the routing controller 220 may calculate the physical address corresponding to the virtual address based on the virtual address and the relocation value specified in the relocation register.

いくつかの実施形態では、ルーティングコントローラ220は、オフセット値及びリロケーション値を(例えば、加算、減算等で)組み合わせることによって、物理アドレスを判別する。たとえば、本明細書の他の箇所で説明したように、ルーティングコントローラ220は、300というオフセット値を判別したと仮定する。さらに、ルーティングコントローラ220は、リロケーションレジスタにおいて400というリロケーション値を特定すると仮定する。ルーティングコントローラ220は、これらの値を加算して、700(300+400=700)という物理アドレス値を判別し得る。   In some embodiments, the routing controller 220 determines the physical address by combining the offset value and the relocation value (eg, by addition, subtraction, etc.). For example, assume that the routing controller 220 has determined an offset value of 300, as described elsewhere herein. Further assume that routing controller 220 identifies a relocation value of 400 in the relocation register. The routing controller 220 may add these values to determine the physical address value of 700 (300+400=700).

さらに図5に示すように、プロセス500は、物理アドレスを含むメモリアクセス要求を、第2ルートを介してメインメモリにルーティングすること(ブロック580)を含んでもよい。例えば、ルーティングコントローラ220は、メモリアクセス要求を、メインメモリ250に関連する判別された物理アドレスに向けてルーティングしてもよい。いくつかの実施形態では、ルーティングコントローラ220は、メモリアクセス要求を、第2ルートを介してメインメモリ250にルーティングする。   Further, as shown in FIG. 5, process 500 may include routing a memory access request that includes a physical address to main memory via a second route (block 580). For example, the routing controller 220 may route the memory access request towards the determined physical address associated with the main memory 250. In some embodiments, the routing controller 220 routes the memory access request to the main memory 250 via the second route.

本明細書の他の箇所で説明したように、メモリコントローラ240及び/又はメインメモリ250への第2ルートは、IOMMU230を含まなくてもよい。さらに、又は代替として、第2ルートは、第1ルートよりも少ないメモリアクセス要求の処理を必要としてもよい。さらに、又は代替として、第2ルートは、第1ルートと比べて、メモリコントローラ240及び/又はメインメモリ250への小さいレイテンシ(例えば、より小さい平均レイテンシ)を有してもよい。さらに、又は代替として、第2ルートを介してルーティングされたメモリアクセス要求は、第1ルートを介してルーティングされたメモリアクセス要求に関連して用いられたアルゴリズムとは異なるアルゴリズムを介して、アドレス変換されてもよい。さらに、又は代替として、第2ルートは、1つ以上の予測アルゴリズム(例えば、バッファリング、ルックアヘッド等)を用いて、第1ルートに比べて性能を向上させることができる。さらに、又は代替として、第1ルートは、メモリアクセス要求に基づいて、1セットの動作を実行させてもよく、第2ルートは、メモリアクセス要求に基づいて、当該1セットの動作のサブセットを実行させてもよい。   The second route to the memory controller 240 and/or the main memory 250 may not include the IOMMU 230, as described elsewhere herein. Additionally or alternatively, the second route may require less memory access request processing than the first route. Additionally or alternatively, the second route may have a lower latency (eg, lower average latency) to the memory controller 240 and/or main memory 250 than the first route. In addition, or in the alternative, the memory access request routed via the second route may be address translated via an algorithm different from the algorithm used in connection with the memory access request routed via the first route. May be done. Additionally or alternatively, the second route may use one or more prediction algorithms (eg, buffering, look ahead, etc.) to improve performance over the first route. Additionally or alternatively, the first route may cause a set of operations to be performed based on the memory access request and the second route perform a subset of the set of operations based on the memory access request. You may let me.

メインメモリ250へメモリアクセス要求をルーティングすることは、メモリアクセス要求で特定された仮想アドレスに対応する物理アドレスから情報を読み出させ、及び/又は、当該物理アドレスに情報を書き込ませてもよい。いくつかの実施形態では、ルーティングコントローラ220及び/又はメモリコントローラ240は、複数の周辺デバイス210と中央処理装置との間、及び/又は、1つの周辺デバイス210と中央処理装置との間のキャッシュコヒーレンシを提供する。例えば、メモリコントローラ240は、第2デバイスがメインメモリ250の特定の物理アドレスに書き込んだ指標を、第1デバイスのキャッシュコントローラに提供してもよい。キャッシュコントローラは、第1デバイスに関連するキャッシュを変更して、キャッシュコヒーレンシを確保してもよい。例えば、キャッシュコントローラは、特定の物理アドレスに関連する、キャッシュされた書き込み動作を無効としてマークしてもよいし、特定の物理アドレスに関連する、キャッシュされた読み出し動作をフラッシュしてもよい。   Routing the memory access request to the main memory 250 may read information from and/or write information to the physical address corresponding to the virtual address specified in the memory access request. In some embodiments, the routing controller 220 and/or the memory controller 240 may provide cache coherency between a plurality of peripheral devices 210 and a central processing unit, and/or between one peripheral device 210 and a central processing unit. I will provide a. For example, the memory controller 240 may provide the index written by the second device to the specific physical address of the main memory 250 to the cache controller of the first device. The cache controller may modify the cache associated with the first device to ensure cache coherency. For example, the cache controller may mark cached write operations associated with a particular physical address as invalid, or flush cached read operations associated with a particular physical address.

このようにして、ルーティングコントローラ220は、フレームバッファ等の特定のメモリリソースに関連するメモリアクセス要求を高速化する方法を提供することができる。また、ルーティングコントローラ220は、非仮想化コンピューティング環境に近いレベルで実行しながら、仮想化されたコンピューティング環境においてグラフィックスプロセッシングユニット等の周辺デバイスが動作するのを可能にすることができる。   In this way, the routing controller 220 can provide a way to speed up memory access requests associated with particular memory resources such as frame buffers. The routing controller 220 may also enable peripheral devices, such as graphics processing units, to operate in a virtualized computing environment while running at a level similar to a non-virtualized computing environment.

図5は、プロセス500の例示的なブロックを示しているが、いくつかの実施形態では、プロセス500は、図5で示されたものに対して追加のブロック、より少ないブロック、異なるブロック、又は、これらと異なる配置のブロックを含む。さらに、又は代替として、プロセス500のブロックのうち2つ以上のブロックは、並行して実行されてもよい。   Although FIG. 5 shows exemplary blocks of process 500, in some embodiments process 500 may be additional blocks, fewer blocks, different blocks, or those shown in FIG. , Including blocks of different arrangement. Additionally or alternatively, two or more of the blocks of process 500 may be executed in parallel.

図6A〜図6Eは、図5に示す例示的なプロセス500に関する例示的な実施形態600を示す図である。図6A〜図6Eは、IOMMU230を含む第1ルートを介してメモリアクセス要求をルーティングする様々なルーティング決定の例を示している。   6A-6E are diagrams illustrating an exemplary embodiment 600 for the exemplary process 500 shown in FIG. 6A-6E show examples of various routing decisions for routing a memory access request via a first route that includes IOMMU 230.

図6Aにおいて符号605で示すように、GPU210は、メモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求は、100という仮想アドレスを特定し、書き込みのアクセスタイプを特定し、100という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。ルーティングコントローラ220は、要求を受信し、リロケーションレジスタ435に記憶されたイネーブルビットの値を判別すると仮定する。符号610で示すように、イネーブルビットは、メモリアクセス要求を第2ルート(例えば、IOMMU230を含まないルート)を介してメインメモリ250にルーティングすることが無効であることを示す0の値を記憶していると仮定する。このようにして、符号615で示すように、ルーティングコントローラ220は、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。   Assume GPU 210 provides a memory access request to routing controller 220, as indicated at 605 in FIG. 6A. As shown, it is assumed that the memory access request identifies a virtual address of 100, identifies the access type of the write, and identifies some information to be written to the physical memory address corresponding to the virtual address of 100. It is assumed that the routing controller 220 receives the request and determines the value of the enable bit stored in the relocation register 435. As indicated by reference numeral 610, the enable bit stores a value of 0 indicating that it is invalid to route the memory access request to the main memory 250 via the second route (eg, the route that does not include the IOMMU 230). Suppose that In this way, the routing controller 220 routes the memory access to the memory controller 240 via the first route including the IOMMU 230, as indicated at 615.

図6Bの目的のために、ルーティングコントローラ220がGPU210から同一のメモリアクセス要求を受信すると仮定する。しかしながら、この場合、ルーティングコントローラ220が、第2ルートを介するルーティングが有効であると判別する(例えば、イネーブルビットが1という値を記憶していると判別する)と仮定する。符号620で示すように、ルーティングコントローラ220が、ベースアドレスレジスタ405に記憶された200というベースアドレス値を判別すると仮定する。符号625で示すように、ルーティングコントローラ220は、100という仮想アドレス値から200というベースアドレス値を減算し、−100(100−200=−100)というオフセット値を生成する。符号630で示すように、ルーティングコントローラ220は、オフセット値が0未満であると判別するため、100という仮想アドレスは、第2ルートを介するルーティングに関連する仮想アドレスの範囲外に存在する。このようにして、符号635に示すように、ルーティングコントローラ220は、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。   For purposes of FIG. 6B, assume that routing controller 220 receives the same memory access request from GPU 210. However, in this case, assume that the routing controller 220 determines that routing through the second route is valid (eg, determines that the enable bit stores a value of 1). Assume that the routing controller 220 determines the base address value of 200 stored in the base address register 405, as indicated by reference numeral 620. As indicated by reference numeral 625, the routing controller 220 subtracts the base address value of 200 from the virtual address value of 100 to generate an offset value of −100 (100−200=−100). As indicated by reference numeral 630, the routing controller 220 determines that the offset value is less than 0, so the virtual address of 100 is outside the range of virtual addresses associated with routing through the second route. In this way, as indicated by reference numeral 635, the routing controller 220 routes the memory access to the memory controller 240 via the first route including the IOMMU 230.

図6Cにおいて符号640で示すように、GPU210が、他のメモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求は、800という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、800という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。図6Cの目的のために、第2ルートを介するルーティングが有効であり、(例えば、図6Bに示すように、)ベースアドレス値が200であると仮定する。   Suppose GPU 210 provides another memory access request to routing controller 220, as indicated at 640 in FIG. 6C. As shown, assume that the memory access request identifies a virtual address of 800, identifies an access type of write, and identifies some information to be written to the physical memory address corresponding to the virtual address of 800. For the purposes of FIG. 6C, assume that routing through the second route is in effect and the base address value is 200 (eg, as shown in FIG. 6B).

符号645で示すように、ルーティングコントローラ220が、800という仮想アドレス値から200というベースアドレス値を減算し、600(800−200=600)というオフセット値を生成すると仮定する。オフセット値が0よりも大きいので、ルーティングコントローラ220は、オフセット値を、長さレジスタ410に記憶された長さ値と比較することを決定する。符号650で示すように、ルーティングコントローラ220は、長さレジスタ410に記憶された500という長さ値を判別すると仮定する。符号655で示すように、ルーティングコントローラ220は、オフセット値と長さ値とを比較し、オフセット値が長さ値より大きいと判別し、これにより、800という仮想アドレスが、第2ルートを介してルーティングされる仮想アドレスの範囲内に存在しないと判別する。結果として、ルーティングコントローラ220は、符号660で示すように、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。   Assume that the routing controller 220 subtracts the base address value of 200 from the virtual address value of 800 to produce an offset value of 600 (800-200=600), as indicated by reference numeral 645. Since the offset value is greater than 0, the routing controller 220 decides to compare the offset value with the length value stored in the length register 410. Assume that the routing controller 220 determines the length value of 500 stored in the length register 410, as indicated at 650. As indicated by reference numeral 655, the routing controller 220 compares the offset value with the length value and determines that the offset value is greater than the length value, which causes the virtual address of 800 to pass through the second route. Determines that it is not within the range of routed virtual addresses. As a result, the routing controller 220 routes the memory access to the memory controller 240 via the first route that includes the IOMMU 230, as indicated at 660.

図6Dにおいて符号665で示すように、GPU210が他のメモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求が、600という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、600という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。図6Dの目的のために、第2ルートを介するルーティングが有効であり、ベースアドレス値が200であり、長さ値が500であると仮定する。   Suppose GPU 210 provides another memory access request to routing controller 220, as indicated by reference numeral 665 in FIG. 6D. As shown, assume that a memory access request identifies a virtual address of 600, identifies an access type of write, and identifies some information to be written to a physical memory address corresponding to the virtual address of 600. For the purposes of FIG. 6D, assume that the routing through the second route is valid, the base address value is 200 and the length value is 500.

符号670で示すように、ルーティングコントローラ220は、600という仮想アドレス値から200というベースアドレス値を減算して、400(600−200=400)というオフセット値を計算する。符号675で示すように、ルーティングコントローラ220は、400というオフセット値が500という長さ値よりも小さいと判別する。この判別に基づき、ルーティングコントローラ220は、600という仮想アドレスが、第2ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると判別する。   As indicated by reference numeral 670, the routing controller 220 subtracts the base address value of 200 from the virtual address value of 600 to calculate the offset value of 400 (600−200=400). As indicated by reference numeral 675, the routing controller 220 determines that the offset value of 400 is smaller than the length value of 500. Based on this determination, the routing controller 220 determines that the virtual address of 600 exists within the range of virtual addresses associated with routing through the second route.

図6Eでは、図6Dに示す例を続けて、ルーティングコントローラ220が受信したメモリアクセス要求で特定される600という仮想アドレスが、第2ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると仮定する。図6Eにおいて符号680で示すように、ルーティングコントローラ220は、リロケーションレジスタ435に記憶されたアクセスコントロールビットが、読み出し専用アクセスコントロールが有効であることを示す1という値を記憶している、と判別すると仮定する。メモリアクセス要求が、書き込み動作を特定すると仮定する。結果として、符号685で示すように、ルーティングコントローラ220は、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。しかしながら、メモリアクセス要求が読み出し動作を特定した場合には、ルーティングコントローラ220は、600という仮想アドレスに対応する物理アドレスを判別して、メモリアクセス要求を、第2ルート(例えば、IOMMU230を含まないルート)を介してメモリコントローラ240にルーティングする。   6E, continuing with the example shown in FIG. 6D, assume that the virtual address identified by the memory access request received by the routing controller 220 is within the range of virtual addresses associated with routing through the second route. To do. As indicated by reference numeral 680 in FIG. 6E, the routing controller 220 determines that the access control bit stored in the relocation register 435 stores a value of 1 indicating that the read-only access control is valid. I assume. Suppose a memory access request specifies a write operation. As a result, as shown at 685, the routing controller 220 routes the memory access to the memory controller 240 via the first route that includes the IOMMU 230. However, when the memory access request specifies the read operation, the routing controller 220 determines the physical address corresponding to the virtual address of 600 and sends the memory access request to the second route (for example, the route not including the IOMMU 230). ) To the memory controller 240.

上述したように、図6A〜図6Eは単なる一例である。他の例も可能であり、図6A〜図6Eに関して説明したものとは異なっていてもよい。   As mentioned above, FIGS. 6A-6E are merely examples. Other examples are possible and may differ from those described with respect to FIGS. 6A-6E.

図7A及び図7Bは、図5に示す例示的なプロセス500に関する他の例示的な実施形態700を示す図である。図7A及び図7Bは、IOMMU230を含まない第2ルートを介してメモリアクセス要求をルーティングするルーティング決定の一例を示している。   7A and 7B are diagrams illustrating another exemplary embodiment 700 for the exemplary process 500 shown in FIG. 7A and 7B show an example of a routing decision that routes a memory access request via a second route that does not include the IOMMU 230.

図7Aにおいて符号705で示すように、GPU210が、メモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求が、699という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、699という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。符号710で示すように、第2ルートを介するルーティングが有効であり、書き込みアクセスが有効であると仮定する。符号715で示すように、ルーティングコントローラ220は、699という仮想アドレス値から200というベースアドレス値を減算して、499(699−200=499)というオフセット値を計算する。符号720で示すように、ルーティングコントローラ220は、499というオフセット値が0よりも大きく、且つ、500という長さ値よりも小さいと判別する。この判別に基づき、ルーティングコントローラ220は、699という仮想アドレスが、第2ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると判別する。   Suppose GPU 210 provides a memory access request to routing controller 220, as indicated at 705 in FIG. 7A. As shown, assume that a memory access request identifies a virtual address of 699, identifies an access type of write, and identifies some information to be written to a physical memory address corresponding to the virtual address of 699. Assume that the routing through the second route is valid and the write access is valid, as indicated at 710. As indicated by reference numeral 715, the routing controller 220 calculates the offset value of 499 (699−200=499) by subtracting the base address value of 200 from the virtual address value of 699. As indicated by reference numeral 720, the routing controller 220 determines that the offset value of 499 is greater than 0 and less than the length value of 500. Based on this determination, the routing controller 220 determines that the virtual address 699 is within the range of virtual addresses associated with routing through the second route.

図7Bにおいて符号725で示すように、ルーティングコントローラ220が、リロケーションレジスタ435に記憶された400というリロケーション値を判別すると仮定する。符号730で示すように、ルーティングコントローラ220は、400というリロケーション値を499というオフセット値に加算して、899(499+400=899)という物理アドレス値を生成する。符号735で示すように、ルーティングコントローラ220は、899という物理アドレスを特定する情報を含むメモリアクセス要求を、IOMMU230を含まない第2ルートを介してメモリコントローラ240にルーティングする。   Assume that routing controller 220 determines a relocation value of 400 stored in relocation register 435, as indicated by reference numeral 725 in FIG. 7B. As indicated by reference numeral 730, the routing controller 220 adds the relocation value of 400 to the offset value of 499 to generate the physical address value of 899 (499+400=899). As indicated by reference numeral 735, the routing controller 220 routes the memory access request including information specifying the physical address of 899 to the memory controller 240 via the second route that does not include the IOMMU 230.

上述したように、図7A及び図7Bは単なる一例である。他の例も可能であり、図7A及び7Bに関して説明したものとは異なっていてもよい。   As mentioned above, FIGS. 7A and 7B are merely examples. Other examples are possible and may be different than those described with respect to Figures 7A and 7B.

上記の開示は、例示及び説明を提供するが、網羅的であること又は開示された正確な形態に実施形態を限定することを意図していない。修正及び変形が、上記の開示に照らして可能であり、実施形態の実施から得ることができる。   The above disclosure provides examples and explanations, but is not intended to be exhaustive or to limit the embodiments to the precise form disclosed. Modifications and variations are possible in light of the above disclosure and can be obtained from practice of the embodiments.

本明細書で用いられる場合、デバイス又はコンポーネントは、ハードウェア、ファームウェア、又は、ハードウェア及びソフトウェアの組み合わせとして広く解釈されることを意図している。   As used herein, a device or component is intended to be broadly construed as hardware, firmware, or a combination of hardware and software.

いくつかの実施形態では、閾値に関して記載されている。本明細書で用いられる場合、閾値を満たすことは、閾値より大きい(greater than)値、閾値以上(more than)の値、閾値より高い(higher than)値、閾値より大きいか等しい(greater than or equal to)値、閾値より小さい(less than)値、閾値以下(fewer than)の値、閾値より低い(lower than)値、閾値より小さいか等しい(less than or equal to)値、閾値に等しい値等に言及することができる。   In some embodiments, thresholds are mentioned. As used herein, satisfying a threshold is a value that is greater than the threshold, a value that is more than the threshold, a value that is higher than the threshold, and a value that is greater than or equal to the threshold. equal to) value, less than threshold value, less than threshold value, less than threshold value, lower than value, less than or equal to value, value equal to threshold value Etc. can be mentioned.

本明細書で説明するシステム及び/又は方法は、図面に示された実施形態において、ソフトウェア、ファームウェア及びハードウェアの多くの異なる形態で実施可能であることが明らかであろう。これらのシステム及び/又は方法を実装するために使用される実際のソフトウェアコード又は専用の制御ハードウェアは、実施形態を限定するものではない。したがって、システム及び/又は方法の動作及び挙動は、特定のソフトウェアコードに言及することなく説明されている。すなわち、ソフトウェア及びハードウェアは、本明細書の説明に基づいて、システム及び/又は方法を実装するように設計可能であることが理解される。   It will be appreciated that the systems and/or methods described herein may be implemented in many different forms of software, firmware and hardware in the embodiments illustrated in the drawings. The actual software code or specialized control hardware used to implement these systems and/or methods is not limiting of the embodiments. Thus, the operation and behavior of systems and/or methods are described without reference to specific software code. That is, it is understood that software and hardware can be designed to implement the system and/or method based on the description herein.

特徴の特定の組み合わせは、特許請求の範囲に記載及び/又は本明細書に開示されるが、これらの組み合わせは、可能な実施形態の開示を限定することを意図してしない。実際、これらの特徴の多くは、具体的に特許請求の範囲に記載されない方法、及び/又は、本明細書に開示されない方法で組み合わせることができる。下記の各従属請求項は1つの請求項のみに直接従属してもよいが、可能な実施形態の開示は請求項内の全ての他の請求項と組み合わせた各従属請求項を含む。   Although particular combinations of features are set forth in the claims and/or disclosed herein, these combinations are not intended to limit the disclosure of possible embodiments. In fact, many of these features may be combined in ways not specifically recited in the claims and/or not disclosed herein. Although each dependent claim below may be directly dependent on only one claim, the disclosure of possible embodiments includes each dependent claim in combination with all other claims within the claim.

本明細書で用いられた要素、動作又は命令は、明示的に記載されない限り、重要又は必須であると解釈されるべきではない。また、本明細書で用いられる冠詞「a」及び「an」は、1つ以上の項目を含むことを意図し、「1つ以上」と互換的に用いられてもよい。同様に、「セット」は、1つ以上の項目を含むことを意図しており、「1つ以上」と互換的に用いられてもよい。1つの項目のみを意図する場合、「one」という用語又は同様の言語を使用する。また、本明細書で用いられるように、「有する」という用語は、オープンエンドの用語であることを意図している。さらに、「基づいて」という表現は、特に明示的に記載のない限り、「少なくとも部分的に基づいて」を意味することを意図している。   No element, act, or instruction used herein should be construed as critical or essential unless explicitly stated. Also, the articles "a" and "an" as used herein are intended to include one or more items and may be used interchangeably with "one or more." Similarly, "set" is intended to include one or more items and may be used interchangeably with "one or more." When only one item is intended, the term "one" or similar language is used. Also, as used herein, the term “comprising” is intended to be an open-ended term. Furthermore, the phrase "based on" is intended to mean "based, at least in part," unless explicitly stated otherwise.

Claims (15)

受信した仮想アドレスに基づいて物理アドレスを計算する方法であって、
デバイスが、前記受信した仮想アドレスに基づいてオフセット値を計算するステップであって、前記オフセット値は、前記受信した仮想アドレスからベースアドレスを減算した値に等しい、ステップと、
前記デバイスが、前記オフセット値が負である場合に、前記受信した仮想アドレスが所定の範囲外であると判別するステップと、
前記デバイスが、前記オフセット値がゼロ又は正である場合に、前記オフセット値を長さ値と比較するステップであって、前記オフセット値が前記長さ値よりも大きい場合に、前記受信した仮想アドレスは前記所定の範囲外であり、前記オフセット値がゼロに等しい場合又は前記オフセット値が前記長さ値よりも小さい場合に、前記受信した仮想アドレスは前記所定の範囲内である、ステップと、
前記デバイスが、前記受信した仮想アドレスが前記所定の範囲内にある場合に、前記受信した仮想アドレスに関連するアクセスタイプが許可されているか否かを判別するステップと、
前記デバイスが、前記アクセスタイプが許可されていない場合又は前記受信した仮想アドレスが前記所定の範囲外である場合に、第1処理経路を用いて前記物理アドレスを計算するステップと、
前記デバイスが、前記アクセスタイプが許可されている場合に、前記オフセット値とリロケーション値とに基づいて、第2処理経路を用いて前記物理アドレスを計算するステップであって、前記第2処理経路は前記第1処理経路よりも高速である、ステップと、を含む、
方法。
A method of calculating a physical address based on a received virtual address,
A device calculating an offset value based on the received virtual address, the offset value being equal to the received virtual address minus a base address;
The device determines that the received virtual address is outside a predetermined range when the offset value is negative;
Comparing the offset value with a length value if the offset value is zero or positive, the device receiving the virtual address if the offset value is greater than the length value. Is outside the predetermined range, if the offset value is equal to zero or if the offset value is less than the length value, the received virtual address is within the predetermined range, a step,
The device determining whether the access type associated with the received virtual address is permitted if the received virtual address is within the predetermined range;
The device calculating the physical address using a first processing path if the access type is not permitted or the received virtual address is outside the predetermined range;
Said device calculating said physical address using a second processing path based on said offset value and relocation value when said access type is allowed, said second processing path comprising: Is faster than the first processing path, and
Method.
前記受信した仮想アドレスは、受信したダイレクトメモリアクセス要求に含まれている、
請求項1の方法。
The received virtual address is included in the received direct memory access request,
The method of claim 1.
前記第1処理経路は、ページテーブルを用いて、前記受信した仮想アドレスを前記物理アドレスに変換するアドレス変換アルゴリズムを用いる、請求項1の方法。 Wherein the first processing path, using a page table, using the address translation algorithm that converts a virtual address to the received on the physical address, The method of claim 1. 前記所定の範囲は、第1閾値と、前記第1閾値とは異なる第2閾値とによって定められている、請求項1の方法。   The method according to claim 1, wherein the predetermined range is defined by a first threshold and a second threshold different from the first threshold. 前記物理アドレスは、前記第2処理経路を介して、前記オフセット値と前記リロケーション値とを組み合わせることによって計算される、請求項1の方法。   The method of claim 1, wherein the physical address is calculated by combining the offset value and the relocation value via the second processing path. 前記第1処理経路は入出力メモリ管理ユニット(IOMMU)を前記第1処理経路の要素として含み、前記第2処理経路は前記IOMMUを前記第2処理経路の要素として含まない、請求項1の方法。 The method of claim 1, wherein the first processing path includes an input/output memory management unit (IOMMU) as an element of the first processing path, and the second processing path does not include the IOMMU as an element of the second processing path. . 前記物理アドレスはメモリデバイスに関連付けられている、請求項1の方法。   The method of claim 1, wherein the physical address is associated with a memory device. プロセッサによってロードされ実行されると請求項1〜7の何れかの方法を前記プロセッサに実行させる機械実行可能命令を記憶するコンピュータ可読記憶媒体。   A computer-readable storage medium storing machine-executable instructions that, when loaded and executed by a processor, cause the processor to perform the method of any of claims 1-7. コントローラを備えるデバイスであって、
前記コントローラは、
受信した仮想アドレスに基づいてオフセット値を計算することであって、前記オフセット値は、前記受信した仮想アドレスからベースアドレスを減算した値に等しい、ことと、
前記オフセット値が負である場合に、前記受信した仮想アドレスが所定の範囲外であると判別することと、
前記オフセット値がゼロ又は正である場合に、前記オフセット値を長さ値と比較することであって、前記オフセット値が前記長さ値よりも大きい場合に、前記受信した仮想アドレスは前記所定の範囲外であり、前記オフセット値がゼロに等しい場合又は前記オフセット値が前記長さ値よりも小さい場合に、前記受信した仮想アドレスは前記所定の範囲内である、ことと、
前記受信した仮想アドレスが前記所定の範囲内にある場合に、前記受信した仮想アドレスに関連するアクセスタイプが許可されているか否かを判別することと、
前記アクセスタイプが許可されていない場合又は前記受信した仮想アドレスが前記所定の範囲外である場合に、第1処理経路を用いて物理アドレスを計算することと、
前記アクセスタイプが許可されている場合に、前記オフセット値とリロケーション値とに基づいて、第2処理経路を用いて前記物理アドレスを計算することであって、前記第2処理経路は前記第1処理経路よりも高速である、ことと、を行うように構成されている、
デバイス。
A device comprising a controller,
The controller is
Calculating an offset value based on the received virtual address, the offset value being equal to a value obtained by subtracting a base address from the received virtual address;
Determining that the received virtual address is outside a predetermined range when the offset value is negative;
Comparing the offset value with a length value when the offset value is zero or positive, wherein the received virtual address is the predetermined virtual address when the offset value is greater than the length value. Out of range, if the offset value is equal to zero or if the offset value is less than the length value, the received virtual address is within the predetermined range, and
Determining whether the access type associated with the received virtual address is permitted when the received virtual address is within the predetermined range;
And the virtual address, or if the receiving the access type is not allowed when the a predetermined range, calculating the physical address using the first processing path,
Calculating the physical address using a second processing path based on the offset value and the relocation value when the access type is permitted, wherein the second processing path is the first processing path. Configured to do things that are faster than the route,
device.
前記受信した仮想アドレスは、受信したダイレクトメモリアクセス要求に含まれている、
請求項9のデバイス。
The received virtual address is included in the received direct memory access request,
The device of claim 9.
前記第1処理経路は、ページテーブルを用いて、前記受信した仮想アドレスを前記物理アドレスに変換するアドレス変換アルゴリズムを用いる、請求項9のデバイス。 Wherein the first processing path, using a page table, using the address translation algorithm that converts a virtual address to the received to the physical address, the device of claim 9. 前記所定の範囲は、第1閾値と、前記第1閾値とは異なる第2閾値とによって定められている、請求項9のデバイス。   The device according to claim 9, wherein the predetermined range is defined by a first threshold value and a second threshold value different from the first threshold value. 前記物理アドレスは、前記第2処理経路を介して、前記オフセット値と前記リロケーション値とを組み合わせることによって計算される、請求項9のデバイス。   10. The device of claim 9, wherein the physical address is calculated by combining the offset value and the relocation value via the second processing path. 前記第1処理経路は入出力メモリ管理ユニット(IOMMU)を前記第1処理経路の要素として含み、前記第2処理経路は前記IOMMUを前記第2処理経路の要素として含まない、請求項9のデバイス。 10. The device of claim 9, wherein the first processing path includes an input/output memory management unit (IOMMU) as an element of the first processing path, and the second processing path does not include the IOMMU as an element of the second processing path. . 前記所定の範囲は、仮想アドレス値の複数の範囲のうちの1つであり、
前記コントローラは、仮想アドレス値の前記複数の範囲から前記所定の範囲を選択するように構成されている、請求項9のデバイス。
The predetermined range is one of a plurality of ranges of virtual address values,
The device of claim 9, wherein the controller is configured to select the predetermined range from the plurality of ranges of virtual address values.
JP2018159455A 2014-08-27 2018-08-28 Routing of direct memory access requests in a virtualized computing environment Active JP6701284B2 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/469,928 US20160062911A1 (en) 2014-08-27 2014-08-27 Routing direct memory access requests in a virtualized computing environment
US14/469,928 2014-08-27

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2017510839A Division JP2017529606A (en) 2014-08-27 2015-08-25 Routing direct memory access requests in virtualized computing environments

Publications (2)

Publication Number Publication Date
JP2018198088A JP2018198088A (en) 2018-12-13
JP6701284B2 true JP6701284B2 (en) 2020-05-27

Family

ID=55400808

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2017510839A Ceased JP2017529606A (en) 2014-08-27 2015-08-25 Routing direct memory access requests in virtualized computing environments
JP2018159455A Active JP6701284B2 (en) 2014-08-27 2018-08-28 Routing of direct memory access requests in a virtualized computing environment

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2017510839A Ceased JP2017529606A (en) 2014-08-27 2015-08-25 Routing direct memory access requests in virtualized computing environments

Country Status (6)

Country Link
US (2) US20160062911A1 (en)
EP (1) EP3186713B1 (en)
JP (2) JP2017529606A (en)
KR (1) KR101973732B1 (en)
CN (1) CN106796562B (en)
WO (1) WO2016033039A2 (en)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160062911A1 (en) * 2014-08-27 2016-03-03 Advanced Micro Devices, Inc. Routing direct memory access requests in a virtualized computing environment
US10078601B2 (en) * 2014-11-14 2018-09-18 Cavium, Inc. Approach for interfacing a pipeline with two or more interfaces in a processor
US9934117B2 (en) * 2015-03-24 2018-04-03 Honeywell International Inc. Apparatus and method for fault detection to ensure device independence on a bus
US11321267B2 (en) 2016-09-30 2022-05-03 Hewlett-Packard Development Company, L.P. Safe peripheral device communications
US10402355B2 (en) * 2017-02-08 2019-09-03 Texas Instruments Incorporated Apparatus and mechanism to bypass PCIe address translation by using alternative routing
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
US20180285262A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Techniques for shared virtual memory access protection
KR102540964B1 (en) 2018-02-12 2023-06-07 삼성전자주식회사 Memory Controller and Application Processor controlling utilization and performance of input/output device and Operating Method of Memory Controller
US11768967B2 (en) * 2018-03-15 2023-09-26 Hewlett-Packard Development Company, L.P. Address verification for direct memory access requests
US11853179B1 (en) * 2018-12-28 2023-12-26 Teledyne Lecroy, Inc. Detection of a DMA (direct memory access) memory address violation when testing PCIE devices
US10936507B2 (en) * 2019-03-28 2021-03-02 Intel Corporation System, apparatus and method for application specific address mapping
US11386028B2 (en) * 2019-03-29 2022-07-12 Teledyne Lecroy, Inc. Method to test direct memory access (DMA) address capabilities at high address values
CN110187835B (en) * 2019-05-24 2023-02-03 北京百度网讯科技有限公司 Method, apparatus, device and storage medium for managing access requests
US11003588B2 (en) 2019-08-22 2021-05-11 Advanced Micro Devices, Inc. Networked input/output memory management unit
CN112527698B (en) * 2020-12-04 2024-03-22 联想(北京)有限公司 Processing method, device and equipment
US20230205705A1 (en) * 2021-12-23 2023-06-29 Advanced Micro Devices, Inc. Approach for providing indirect addressing in memory modules

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63245743A (en) * 1987-04-01 1988-10-12 Fuji Electric Co Ltd Memory access system
US5961581A (en) * 1996-06-27 1999-10-05 Advanced Micro Devices, Inc. Method and circuit for detecting address limit violations in a microprocessor-based computer
US6282625B1 (en) * 1997-06-25 2001-08-28 Micron Electronics, Inc. GART and PTES defined by configuration registers
JP3264319B2 (en) * 1997-06-30 2002-03-11 日本電気株式会社 Bus bridge
US6658521B1 (en) * 2000-12-22 2003-12-02 International Business Machines Corporation Method and apparatus for address translation on PCI bus over infiniband network
GB0123415D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
US6889308B1 (en) * 2002-01-18 2005-05-03 Advanced Micro Devices, Inc. Method and apparatus for protecting page translations
JP2006525607A (en) * 2003-04-30 2006-11-09 シリコン・グラフィックス・インコーポレイテッド System and method for performing address translation in a computer system
US20070233727A1 (en) * 2003-08-05 2007-10-04 Gideon Guy Multiple Virtual Devices
US20050091383A1 (en) * 2003-10-14 2005-04-28 International Business Machines Corporation Efficient zero copy transfer of messages between nodes in a data processing system
US7552319B2 (en) * 2004-06-30 2009-06-23 Intel Corporation Methods and apparatus to manage memory access
US7370174B2 (en) * 2005-01-05 2008-05-06 Intel Corporation Method, system, and program for addressing pages of memory by an I/O device
US7543131B2 (en) 2005-08-12 2009-06-02 Advanced Micro Devices, Inc. Controlling an I/O MMU
US7650471B2 (en) * 2006-01-06 2010-01-19 Hewlett-Packard Development Company, L.P. Head of queue cache for communication interfaces
US7822941B2 (en) * 2006-06-05 2010-10-26 Oracle America, Inc. Function-based virtual-to-physical address translation
US7721068B2 (en) * 2006-06-12 2010-05-18 Oracle America, Inc. Relocation of active DMA pages
US8095773B2 (en) * 2008-02-26 2012-01-10 International Business Machines Corporation Dynamic address translation with translation exception qualifier
US8954959B2 (en) * 2010-09-16 2015-02-10 Red Hat Israel, Ltd. Memory overcommit by using an emulated IOMMU in a computer system without a host IOMMU
KR101383684B1 (en) 2010-11-01 2014-04-09 도요타 지도샤(주) Electric storage apparatus
JP2013069139A (en) * 2011-09-22 2013-04-18 Fujitsu Ltd Arithmetic processing unit and method for controlling arithmetic processing unit
US20130275699A1 (en) * 2012-03-23 2013-10-17 Hicamp Systems, Inc. Special memory access path with segment-offset addressing
US9384153B2 (en) * 2012-08-31 2016-07-05 Freescale Semiconductor, Inc. Virtualized local storage
US9158704B2 (en) * 2013-01-24 2015-10-13 Wisconsin Alumni Research Foundation Virtual memory management system with reduced latency
US10108402B2 (en) * 2014-01-30 2018-10-23 Hewlett Packard Enterprise Development Lp Persistent pointers for programs running on NVRAM based computers
US20150281126A1 (en) * 2014-03-31 2015-10-01 Plx Technology, Inc. METHODS AND APPARATUS FOR A HIGH PERFORMANCE MESSAGING ENGINE INTEGRATED WITHIN A PCIe SWITCH
US20160062911A1 (en) * 2014-08-27 2016-03-03 Advanced Micro Devices, Inc. Routing direct memory access requests in a virtualized computing environment

Also Published As

Publication number Publication date
EP3186713B1 (en) 2020-02-12
JP2018198088A (en) 2018-12-13
WO2016033039A3 (en) 2016-05-06
WO2016033039A2 (en) 2016-03-03
KR101973732B1 (en) 2019-04-29
US20160062911A1 (en) 2016-03-03
CN106796562B (en) 2020-03-17
EP3186713A4 (en) 2018-03-28
EP3186713A2 (en) 2017-07-05
JP2017529606A (en) 2017-10-05
US10162765B2 (en) 2018-12-25
US20170220485A1 (en) 2017-08-03
KR20170038873A (en) 2017-04-07
CN106796562A (en) 2017-05-31

Similar Documents

Publication Publication Date Title
JP6701284B2 (en) Routing of direct memory access requests in a virtualized computing environment
US10545672B2 (en) Method for accessing extended memory, device, and system
US10853277B2 (en) Systems and methods for isolating input/output computing resources
US10025504B2 (en) Information processing method, information processing apparatus and non-transitory computer readable medium
CN108351829B (en) System and method for input/output computing resource control
CN109977037B (en) DMA data transmission method and system
JP2014529829A (en) Computer system with processor local coherency for virtualized input / output
CN107949837B (en) Register file for I/O packet compression
TWI526832B (en) Methods and systems for reducing the amount of time and computing resources that are required to perform a hardware table walk (hwtw)
KR101895852B1 (en) MEMORY MANAGEMENT UNIT (MMU) Partitioned translation caches, and related devices, methods, and computer-readable mediums
KR101724590B1 (en) Apparatus and Method for Protecting Memory in a Multi Processor System
US10310759B2 (en) Use efficiency of platform memory resources through firmware managed I/O translation table paging
KR20190039006A (en) Method and apparatus for control of a tiered memory system
TWI594124B (en) Virtualization-aware prefetching
US11714753B2 (en) Methods and nodes for handling memory
US20230418662A1 (en) Operating system process scheduler with location inertia
US20210191641A1 (en) Systems and methods for reducing instruction code memory footprint for multiple processes executed at a coprocessor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180906

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190814

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190820

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191119

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: 20200407

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200501

R150 Certificate of patent or registration of utility model

Ref document number: 6701284

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250