2019年3月25日 星期一

原理Intel Virtualization Technology for Directed I/O(VT-d) for DMA Remapping


Intel 的Virtualization Technology有兩種,一種為CPU virtualization,稱為VMX(可以參考我寫的文章淺談Virtual Machine Extensions(VMX)近一步了解),另一個為I/O virtualization,簡稱為VT-d


在VMX裡面定義了兩個角色,分別為VMM和VM。

VMM扮演著Host的腳色,擁有CPU最高的控制權,VMM 可以透過guest software虛擬出virtual CPU,並且可以直接讓logical CPU直接執行。

VM(virtual machine)是一個guest software的環境,他可以直接運行在現有的OS種類,例如: Win7, Ubuntu等等。

而在VM裡,跟原本host的系統一樣會有USB、LAN等等的device,所以必須要support I/O request。以前在沒有Hardware support的情況下,VMM會使用emulation(仿真)的方式模擬系統上存在的I/O device,而且功能都能透過模擬(Software)的方式實做,但這個缺點就是效能太差。

現在Intel 訂定了Hardware spec VT-d這種方式就是將device直接passthrough到guest OS,讓VM可以直接存取physical device,減少了Software模擬的effort。

■ Virtualization Technology For Directed I/O

Virtualization Technology For Directed I/O,簡稱VT-d,或稱I/O Virtualization。這個I/O virtualization的技術,對於不同的VM提供了isolation,那該如何辦到isolation,VT-d spec定義了DMA RemappingInterrupt Remapping的技術。

■ OS Usage of DMA Remapping

有些OS 會使用domain來達到isolation,domain類似於partition,實際上就是software所分配的memory,那domain的作用有什麼呢?
  1. 例如,OS可能會在domain放重要的code和data structure,並且限制所有的I/O device去access這個domain,這可以保護device driver可能會發生不預期的行為去毀壞domain裡的code與data structure。
  2. OS可以創建多個domain並且把不同的device passthrough到不同的domain,device就只能再這個domain裡面去register I/O buffer,這樣就能達到DMA的isolation。



■ VMM Usage of DMA Remapping

如果沒有使用passthrough的方式(如左圖),VM想要存取device,必須involve VMM來request device driver,VMM必須花費很多的effort,進而影響系統效能。
但如果直接將device passthrough給VM,VM就能直接和device driver溝通,就不用一直request VMM。



■ DMA Remapping

DMA Remapping Hardware的主要功能是轉換Guest Physical address(GPA) to Host Physical Address(HPA)
如下圖所示,I/O devices分別被passthrough到domain 1和domain 2,software會負責domain的創建與管理。
當CPU發出CPU to Memory的cycles(圖中左半邊),會由CPU memory management (簡稱MMU)來幫忙mapping cycles到對應的domain。
如果是device發出DMA request(GPA,圖中右半邊),會由DMA remapping hardware幫忙轉換成HPA,而且HPA會對應到device被passthrough的domain。



Source ID

現在大部分的x86系統上的device都是follow PCIe spec,也就是會有Bus number, Device numberFunction number,而且這些number會被放在PCIE的TLP (Transaction Layer Packet)裡的requester identifier欄位裡面,這樣DMA remapping hardware就能透過這個Source ID來做查表的動作。

Remapping Table Structure:

上面提到DMA remapping hardware會使用Source ID來查表,spec定義了三個remapping table structure,分別為Root-Entry TableContext-Entry TableMulti-level Page Table


Root Entry:

對應到SID的Bus number,總共有256個entry,每一個entry的format如下:
  • P(Present) flag: Software會去enumerate系統上所有的device找出他們的bus number,並且將存在的bus在root table對應的entry的P field填為1。
  • Context-entry table pointer: 存放下一個context table的base address。

Context Entry:

對應到SID的Device和Function Number,每一個Context Table有256個entry,每一個entry的format如下:

  • P(Present) flag : Software會去enumerate系統上所有的device找出他們的device和function number,如果number存在,則在context table對應的entry的P field填為1。
  • FPD(Fault Processing Disable) : 置為1表示可以disable error的紀錄和回報,這個和後面章節的fault handling有關。
  • T(Translation Type: 00b為只接受Untranslated request,也就是說這個request需要往後查詢page table。01b表示接受Untranslated/Translated/Translation request。10b為Pass-through,表示不需要往後查詢page table,此GPA = HPA。
    • 備註: 什麼叫做Translated request?如果Device有支援Device-IOTLB的話他可以預先向root-complex發出address translation的請求,然後將轉換後的translated address放到 Device-IOTLB這個buffer,然後用這個Translated address去發DMA。
  • ASR( Address Space Root) : ASR裡面存放的為第一層page table的base address
  • AW(Address Width) : 代表著DMA address 定址最高到多少,根據address寬度不同,page table的層數也不同。
    • 000b: 30-bit AGAW (2-level page table)
    • 001b: 39-bit AGAW (3-level page table)
    • 010b: 48-bit AGAW (4-level page table)
  • DID(Domain ID) : 代表著這個device被mapping到哪一個domain,使用Domain ID來編號區分,不同的domain會使用不同的page table structure。

Page Table Structure:

又可稱之為Address Translation Structure,就是用來remap GPA address,下圖範例為AW為39 bits(3-level page)的範例,最低12 bits對應到最後remapping的結果,其餘位元每9個bits為一單位,對應的各層page table。




Page table entry:
  • R/W(Read/Write) : 表示這筆cycle是否可以Read或是Write,如果都設為0,Remapping hardware會擋下這筆cycle。
  • SP(Super page) : 表示下一個table是否為最後的table,也就是GPA 低12 bits所對應到的table。
  • SNP(Snoop) : 表示在remapping的過程中reampping hardware需不需要窺探CPU cache,如果要snoop,表示要和cache一致(cache coherence),否則software要保證cache coherence。
  • ADDR(Address) : 如果不是leaf node(最後一層),則存放下一層page table的base address,如果是leaf node,裡面就是存放HPA。
  • TM(Transient Mapping) : 這個不是很了解,之後理解後在補上。




Reference: Intel® Virtualization Technology for Directed I/O

沒有留言:

張貼留言

解析 NVM Express - 透過Linux OS 解析M.2 NVMe SSD

在之前,我撰寫了三篇有關NVMe的文章 ,分別是" 原理NVM Express - NVMe Submission Queue & Completion Queue (SQ & CQ) "、" 原理NVM Express - Admi...