第六章 Interrupts for Virtual Machines(VS Level)
核心內容
1.VS級別外部中斷支持:??
-
- ??客戶中斷文件(Guest Interrupt File)??:虛擬機的每個vCPU擁有獨立的IMSIC中斷文件,允許直接接收設備MSI。
- ??vstopi CSR??:類似stopei,用于虛擬機內部處理最高優先級中斷。
2.?虛擬中斷注入:??
-
- Hypervisor通過??hvictl CSR??配置虛擬中斷,包括設置虛擬中斷身份(IID)和觸發方式。
- ??hviprio1/hviprio2??:配置VS級別主要中斷(如VSEI、VSTI)的優先級。
3.中斷捕獲與模擬:??
-
- 當虛擬機無客戶中斷文件時,所有外部中斷由Hypervisor捕獲并模擬(如通過hvip CSR注入虛擬中斷)。
當實現管理程序擴展(hypervisor extension)時,一個硬件線程(hart)的可能特權模式集合將包括用于托管虛擬硬件線程(virtual harts)的虛擬特權監督模式(VS,Virtual Supervisor)和虛擬用戶模式(VU,Virtual User)。高級中斷架構(Advanced Interrupt Architecture)為管理程序擴展增添了新的中斷設施,這些設施與之前描述的用于特權監督級別(supervisor-level)中斷的設施相一致。
如第二章所述,添加了多個與管理程序和虛擬特權監督模式(VS)相關的控制與狀態寄存器(CSR):hvien、hvictl、hviprio1、hviprio2、vsiselect、vsireg、vstopei 和 vstopi。(對于 RV32 架構,還添加了以下高半部分 CSR:hidelegh、hvienh、hviph、hviprio1h、hviprio2h、vsiph 和 vsieh。)與往常一樣,當在 VS 模式或 VU 模式下執行時,VS CSR 將替代對應的特權監督 CSR。
為了使在虛擬機中運行的軟件看起來像是在一臺實現了高級中斷架構的特權監督級別的真實機器上執行,管理程序軟件和本章描述的硬件設施需要共同承擔責任。雖然某些行為可以直接由硬件處理,但其他行為則需要管理程序進行大量的模擬,有時還需要硬件的協助。
6.1. VS-level external interrupts with a guest interrupt file
當一個硬件線程(hart)實現了管理程序擴展(hypervisor extension)時,建議該hart還配備一個集成消息信號中斷控制器(IMSIC),并具備客戶中斷文件(guest interrupt files)。假設客戶中斷文件可用,那么每個客戶中斷文件都可以被分配給物理hart上的一個虛擬hart,作為該虛擬hart的特權監督級別(supervisor-level)中斷文件。如果存在多個客戶中斷文件,那么物理hart上的每個虛擬hart都可以擁有一個物理客戶中斷文件,作為其(虛擬的)特權監督級別中斷文件。當前虛擬hart的客戶中斷文件始終由CSR hstatus中的VGEIN字段指示。當VGEIN不是客戶中斷文件的有效編號時,當前虛擬hart就沒有客戶中斷文件作為其特權監督級別中斷文件。
當hstatus.VGEIN是客戶中斷文件的有效編號時,viselect的值在0x70-0xFF范圍內會選擇該客戶中斷文件的寄存器,這與siselect在同一范圍內選擇IMSIC真實特權監督級別中斷文件的寄存器的方式相同。通過vsiselect和vsireg間接訪問的中斷文件寄存器在關于IMSIC的第三章中有詳細說明,同時該章還介紹了僅與IMSIC相關的CSR vstopei。由于所有IMSIC中斷文件的行為都相同,因此虛擬hart通過CSR siselect、sireg和stopei訪問的客戶中斷文件,從S模式(或HS模式)的角度來看,與真實的特權監督級別中斷文件沒有區別。
除了每個hart上的IMSIC外,虛擬機可能還需要看到平臺級中斷控制器(PLIC)或高級平臺級中斷控制器(APLIC)。然而,與IMSIC能夠為虛擬hart提供物理客戶中斷文件的能力不同,PLIC或APLIC必須由管理程序為虛擬機進行模擬。
? 目前,高級中斷架構(Advanced Interrupt Architecture)并不包括用于虛擬化APLIC的硬件輔助。對于hart數量較少的情況,這樣的硬件將比為IMSIC實現客戶中斷文件所需的硬件大得多。假設大多數高性能I/O可以通過能夠直接向客戶中斷文件發送消息信號中斷(MSI)的設備來完成(例如通過PCI Express互連連接的設備)。對于那些中斷必須通過(虛擬的)APLIC的設備類型,模擬APLIC的開銷預計不會太大。
當一個虛擬hart因為被分配了一個客戶中斷文件而看似擁有一個IMSIC時,所有發往該虛擬hart的外部中斷(無論是真實的還是模擬的)都必須通過這個看似存在的IMSIC。管理程序可以很容易地通過設置中斷待處理數組中的一個位(該數組通過vsiselect和vsireg間接訪問)來向hstatus.VGEIN選擇的客戶中斷文件中注入一個模擬的外部中斷。當一個虛擬hart擁有客戶中斷文件時,管理程序通常不需要在CSR hvip中設置VSEIP位。
在一種特殊情況下,如果為虛擬機模擬的APLIC具有一個與真實APLIC的實際中斷源相對應的硬連線中斷源,并且在該虛擬機中運行的軟件將其虛擬APLIC配置為將來自該源的中斷作為MSI轉發到特定的虛擬hart,那么管理程序可以配置真實APLIC以將實際中斷直接作為MSI轉發到該虛擬hart的客戶中斷文件。這樣,盡管管理程序必須捕獲并模擬虛擬機在虛擬APLIC上配置中斷轉發的內存訪問,但中斷本身可以自動轉換為針對客戶中斷文件的真實MSI,而無需為每個到達的中斷調用管理程序。
6.1.1. Direct control of a device by a guest OS
為確保對中斷提供恰當的支持,在管理程序允許運行在虛擬機中的客戶操作系統(guest OS)直接控制一個能夠發送消息信號中斷(MSI)的物理設備之前,必須滿足兩個條件:首先,每個虛擬硬件線程(virtual hart)必須被分配一個客戶中斷文件,這樣每個虛擬hart在虛擬機內部就擁有了一個看似獨立的集成消息信號中斷控制器&#