20
SoC CAD 1 基基 KVM 基 基基基基基基基基基基基基基 基 基 基 Hsu,Zi Jei Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C

基於 KVM 的 物理 資源動態分配與管理技術

Embed Size (px)

DESCRIPTION

基於 KVM 的 物理 資源動態分配與管理技術. 徐 子 傑 Hsu,Zi J ei. Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C. 引言 ( 1/1). - PowerPoint PPT Presentation

Citation preview

Page 1: 基於 KVM 的 物理 資源動態分配與管理技術

SoC CAD

1

基於 KVM 的物理資源動態分配與管理技術

徐 子 傑 H s u , Z i J e i

Department of Electrical Engineering

National Cheng Kung University

Tainan, Taiwan, R.O.C

Page 2: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 2 Hsu, Zi Jei

SoC CAD引言 (1/1)

Intel和 AMD先後推出的一系列支持虛擬化技術的 CPU,在很大程度上提高了虛擬機器環境下 CPU和記憶體的性能。然而在週邊設備虛擬化方面, I/O設備的性能卻損失很大。 I/O設備的利用率瓶頸成為了提高虛擬機器使用性能的瓶頸。因此,提高在虛擬機器下的 I/0設備性能成為一個至關重要的問題。

近年來 VMWare等公司又相繼提出 Passthrough I/O模型。Passthrough I/O模型將設備獨佔式地分配給指定的客戶域,使該域具有最高的 I/O訪問性能,這樣做的優點是:

由於不需要模擬設備進行請求轉換,所以存取速度高; GOS能根據最新硬體,載入對應驅動,可充分發揮新硬體的功能。

Passthrough I/0在最大程度上提高了 I/0性能,但這卻是以犧牲設備共用能力為代價的。

本文以虛擬化技術為基礎,結合 Linux設備熱插拔技術及 Intel VT-d技術,提出並實現了一種基於 KVM的物理資源動態分配與管理技術,在不降低 Passthrough I/O設備訪問性能的前提下,仍然能夠滿足設備的共用能力。

Page 3: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 3 Hsu, Zi Jei

SoC CADLinux 作業系統的熱插拔處理 (1/3)

由 Intel、Microsoft及 Toshiba共同開發而成的高級配置與電源管理介面 ACPI(Advance Configuration and Power Interface Specification)能使作業系統依照一定的方式管理用電情況,處理系統硬體產生的熱插拔事件,讓作業系統從使用者的角度上直接支配隨插即用設備,不同於以往的基於 BIOS的管理方式。

ACPI對系統平臺、外插板卡硬體都有特定的要求:系統集成熱插拔控制積體電路和 PCI插槽的逆電流控制器,這樣在系統啟動過程中可以自動檢測 PCI插槽上是否有設備,當探測到 PCI插槽上無設備時,能夠自動將該插槽斷電。

目前南橋晶片中都集成了 ACPI協議。

Page 4: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 4 Hsu, Zi Jei

SoC CADLinux 作業系統的熱插拔處理 (2/3)

使用者將一塊 PCI熱插拔設備插入到主機板的插槽後,從南橋晶片中的熱插拔控制器感應到有設備插入,到插入的設備可以正常使用作業系統所經歷的一系列過程如下:

(1)設備插入後,南橋熱插拔控制器生成 GPE事件 (通用事件 )通知 ACPI驅動層。

(2)ACPI核心控制晶片組根據 GPE事件產生一個系統控制中斷,通知作業系統處理相應的 ACPI事件。

(3)硬體會清除這個 GPE事件的回應位,並且運行對應 GPE位在ACPl名字空間中的控制方法。

(4)控制方法將根據熱插拔控制器的相應控制位來決定當前事件是否為一個設備插入事件,以及哪個插槽有設備插入。

Page 5: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 5 Hsu, Zi Jei

SoC CADLinux 作業系統的熱插拔處理 (3/3)

(5)控制方法將向 ACPI驅動層發出通知,表示當前 PCI匯流排上的某一個插槽有設備插入。

(6)ACPI驅動層運行相應方法獲得第 (5)步所知的設備當前狀態。 (7)ACPI驅動層通知 PCI層對新插入的設備進行枚舉。 (8)PCI層讀入相關設備 (PCI功能模組 )的配置資訊:

對該 PCI卡上所有設備根據設備製造廠商獲得相關的驅動程式;使能 PCI卡上所有的功能模組; ACPI驅動層根據 PCI設備的電源管理規範,使能 PCI設備上的電源管理狀態寄存器,使 PCI設備上電,啟動設備。

(9)系統正常運行 /訪問設備。

Page 6: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 6 Hsu, Zi Jei

SoC CADKVM 的設備熱插拔 (1/3)

設備熱插拔初始化, KVM經由改寫的 Qemu程式來模擬部分硬體資源和 I/O設備的。

GOS啟動同時,創建其相應的 Qemu進程,初始化 Qemu管理器。

Qemu管理器是使用者態的 Qemu進程的一個子執行緒,用於在GOS啟動後動態地對 GOS系統硬體進行管理。

PCI設備熱插拔的初始化是在 Qemu管理器中進行的。KVM的 PCI設備熱插拔初始化過程如下:

(1)查找設備所要掛接的匯流排。 (2)將 PCI設備的設備資訊添加到所要掛接匯流排上的模擬設備佇列中。

(3)使用 Qemu標準匯流排掛接方法掛接設備,包括為真實設備分配在虛擬機器中將要使用的功能號;分配將要在虛擬機器中使用的中斷索引號及中斷號等。

Page 7: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 7 Hsu, Zi Jei

SoC CADKVM 的設備熱插拔 (2/3)

(4)通過 HOS的 sysfs獲得設備的真實配置資訊,保存在 GOS對應的設備配置空間中。

(5)向 Qemu註冊 GOS所關心的 I/O記憶體及 I/O埠,設置中斷路徑。

(6)設置由 KVM來進行設備的 IOMMU及擷取裝置產生的中斷。 (7)啟動設備,相當於給設備所插入的“插槽”上電。 (8)KVM向 GOS對應的虛擬中斷控制器中寫入一個“產生一個設備插入事件”的中斷。

(9)轉入到章節 2中的作業系統對熱插拔的處理過程中。將設備從 GOS中刪除,首先將設備從所掛接的匯流排上刪除,其次將設備所插入的“插槽”斷電,最後 KVM向 GOS中寫入一個“產生一個設備拔出事件”的中斷。

Page 8: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 8 Hsu, Zi Jei

SoC CADKVM 的設備熱插拔 (3/3)

Qemu模擬的 PCI匯流排不具備 PCI熱插拔控制器,所以在添加 (或刪除 )一個設備成功後, KVM需要向 GOS的虛擬中斷控制器中寫入一個中斷,通知 ACPI核心晶片組插入 (或拔出 )了一個設備及設備插入了哪個 PCI插槽 (設備從哪個插槽中拔出 ),以代替熱插拔控制器對 PCI插槽的掃描。

最近,英特爾提出了新的匯流排及介面標準一 PCI-Express。PCI-Express具有很多 PCI匯流排所不具備的功能,如它定義了標準的熱插拔控制器和熱插拔規範等。

隨著虛擬化技術的進步,未來可能出現模擬的 PCI-Express匯流排。使用這種匯流排,在設備熱插拔過程中 GOS可以自我感知設備的插入與拔出,而不再需要 KVM向 GOS注入中斷。

Page 9: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 9 Hsu, Zi Jei

SoC CAD物理資源動態分配與管理框架的設計 (1/5)

框架主要應用了物理資源動態分配與管理技術,基於共用記憶體及信號機制實現物理資源管理模組與虛擬機器管理進程Qema之間的通信,

利用 hypercall機制實現 GOS與 HOS之間的通信,實現設備在多個 GOS之間的分時共用,在不降低 Passthrough I/O設備訪問性能的前提下,仍然能夠滿足設備的共用能力。

物理資源動態分配與管理技術的設計思想是允許每個 GOS向管理器申請所需要的設備,在管理器的協調下,每個 GOS可以分時獨立的使用物理 PCI設備,來進行高效的 I/O訪問。

Page 10: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 10

Hsu, Zi Jei

SoC CAD物理資源動態分配與管理框架的設計 (2/5)

圖 1 物理資源動態與管理框架

Page 11: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 11 Hsu, Zi Jei

SoC CAD物理資源動態分配與管理框架的設計 (3/5)

物理設備管理模組 (本框架下主要指 PCI設備 )的作用是收集每個 GOS對設備的請求資訊,然後根據這些資訊,設備管理員在多個 GOS之間進行有限設備的分配。

資源請求模組是運行在 GOS中的 PCI設備請求程式,使用者通過資源請求模組向管理器申請所需要的設備。每個 GOS都有一個使用者態的 Qemu進程與其相對應。

使用者在 GOS中運行資源請求模組選擇所要申請的設備類型,根據預先設計好的 hypercall機制,將這一請求資訊傳送到內核模組 KVM中, KVM對請求資訊做簡單的封裝處理後將其傳遞到物理設備管理模組中保存並顯示出來;

設備管理員分析多個 GOS的請求資訊,然後使用物理設備管理模組選擇將設備分配給合適的 GOS。

在管理員進行設備分配時,可能設備正在被某個 GOS所使用,那麼物理設備管理模組需要先將這個設備從相應的 GOS中刪除,然後再添加到另一個 GOS中。

Page 12: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 12

Hsu, Zi Jei

SoC CAD物理資源動態分配與管理框架的設計 (4/5)

某一時刻管理模組要將 GOS1所擁有的設備分配給 GOS2,管理模組所要做的操作如下:

物理設備管理模組通知 GOS1刪除設備物理設備管理模組將保存的設備資訊寫入共用記憶體中,

根據 GOSl的進程號向 GOSl對應的 Qemu進程發送信號,通知Qemu進程將設備刪除

Qemu進程根據從共用記憶體中取出的資料進行相應的操作刪除設備

設備成功刪除後, Qemu進程將刪除的設備資訊通知KVM, KVM向 GOSl對應的虛擬中斷控制器中寫入一個“產生設備拔出事件”的中斷,進而 GOSl處理這個熱插拔事件;

上述操作完成後, Qemu進程發送信號通知物理設備管理模組設備成功釋放,物理設備管理模組修改自己保存的對應設備資訊。

Page 13: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 13

Hsu, Zi Jei

SoC CAD物理資源動態分配與管理框架的設計 (5/5)

物理設備管理模組通知 GOS2添加設備物理設備管理模組將設備的匯流排號、設備號等資訊寫入到共用記憶體並向 GOS2對應的Qemu進程發送信號,通知 Qemu進程添加設備;

Qemu進程根據從共用記憶體中取出的資料進行相應的操作添加設備 (見章節 3);

設備成功添加後, KVM向 GOS2對應的虛擬中斷控制器寫入一個“產生設備插入事件”的中斷,通知 GOS2進行相應處理;

上述操作完成後, Qemu進程將設備所插入的槽號及所掛接的設備匯流排等資訊寫入共用記憶體;

物理設備管理模組根據從共用記憶體中取出的資訊更新自己保存的設備資訊。

Page 14: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 14

Hsu, Zi Jei

SoC CAD實現與測試 (1/6)

在管理器中,實現設備請求結構體,保存 GOS對設備的請求資訊,如發起請求的 GOS進程號、請求發生時的系統時間及申請設備的類型等。

GOS的進程號從 GOS對應的進程式控制制塊中獲得;系統時間通過系統函數 do_gettimeofday()來獲得。

在管理器中,實現設備分配結構體,保存 PCI設備的資訊,如設備的配置空間資訊、設備所屬的

GOS、設備插入 GOS的哪個插槽等。設備的配置空間資訊包括設備匯流排號、設備號及功能號等;

設備所屬的 GOS的進程號在設備分配成功時從 GOS的進程式控制制塊中獲得;

設備所在的插槽在設備分配成功後從共用記憶體中獲得。

Page 15: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 15

Hsu, Zi Jei

SoC CAD實現與測試 (2/6)

圖 2 設備請求過程

Page 16: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 16

Hsu, Zi Jei

SoC CAD實現與測試 (3/6)

設備請求過程 :使用者向管理器申請設備, GOS調用 hypercall函數將申請設備的類型資訊傳遞給 KVM;

KVM調用標準的 vmcall接收函數處理這個 hypercall後,調用預先定義好的函數將申請設備的類型資訊及申請設備的 GOS的進程號傳遞給管理器。

管理器將接收到的資料保存在設備請求結構體中,並記錄當前系統時間。

最後,管理器將 GOS對設備的請求資訊通知設備管理員。

Page 17: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 17

Hsu, Zi Jei

SoC CAD實現與測試 (4/6)

圖 3 設備添加過程

Page 18: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 18

Hsu, Zi Jei

SoC CAD實現與測試 (5/6)

在將設備分配給目標 GOS時,管理器首先要判斷設備是否已經分配給其他的 GOS。

判斷設備分配結構體所保存的 GOS的進程號:如果其值為 0,說明設備沒有進行分配,可以直接分配;如果其值為正值,則說明設備已經分配給其他的 GOS,需要先將設備從所屬 GOS中刪除,然後再添加到目標 GOS中。

以設備的添加過程為例來說明設備的分配過程 :管理器將設備的資訊寫入到共用記憶體中,然後調用 kill函數發送信號 SIGRTMAX通知目標 GOS對應的 Qemu進程。

Qemu進程調用對應的信號處理函數將共用記憶體中的設備資訊取出並寫入到緩衝區中,然後調用 Qemu標準的命令處理函數進行設備添加操作。

Qemu進程將系統分配給設備的插槽號和匯流排號寫入共用記憶體,發信號通知管理器根據這些值更新設備分配結構體。

管理器判斷 GOS分配給設備的插槽號,如果是非正值,說明設備的分配失敗;如果是正值,那麼管理器更新設備分配結構體。

Page 19: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 19

Hsu, Zi Jei

SoC CAD實現與測試 (6/6)

測試結果 :本文在下面這樣一個場景中對物理資源動態分配與管理框架進行測試:

GOSl對外提供 HTTP服務,將網卡分配給它以實現高速的網路訪問。在一段時間內, GOSl所在的主機負載過高,需要將 GOSl遷移到局域網中的其他主機上運行以平衡負載。

此時在 GOS2上啟動相應的 HTTP服務,將網卡從 GOSl中刪除,然後分配給 GOS2,由 GOS2繼續對外提供服務。在進行設備熱插撥過程中, GOS是無法對外提供服務的,這裡使用 ping命令測量在熱插拔過程中的 ICMP報文的丟失率。

本文設定 ping命令每 10毫秒發送一個 ICMP報文, 10秒鐘後停止發送,在這 10秒內將網卡從 GOSl分配到 GOS2中。

經過二十次的反復測試計算平均值, ICMP報文的丟失率為 39%,也就是說物理資源配置過程耗時大約為 4秒,這段時間包括網卡熱插拔分配的時間及 GOS對網卡進行配置的時間。

相較於長時間及高性能的網路服務要求,應用物理資源動態分配與管理框架所造成的性能損失還是很低的。

Page 20: 基於 KVM 的 物理 資源動態分配與管理技術

NCKU

SoC & ASIC Lab 20

Hsu, Zi Jei

SoC CAD結論

本文首先介紹 Linux的熱插拔處理過程,然後分析 KVM的熱插拔實現,最後基於 Passthrough I/O模型設計了物理資源動態分配管理框架並在支援 VT-d的機器上將其實現出來。

物理資源動態分配管理框架支援多個虛擬機器動態分時的使用PCI設備,測試表明它提高了 Passthrough I/O模型的共用能力。但是本框架也存在一定的不足:

設備從 GOS中刪除時,沒有保存當前 GOS對設備的使用狀態,當設備再一次分配給該 GOS時,是一個全新的狀態,這對使用者的使用來說是非常不便的,這點不足也是我們以後改進的方向。