TWI733745B - 核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置 - Google Patents

核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置 Download PDF

Info

Publication number
TWI733745B
TWI733745B TW106102499A TW106102499A TWI733745B TW I733745 B TWI733745 B TW I733745B TW 106102499 A TW106102499 A TW 106102499A TW 106102499 A TW106102499 A TW 106102499A TW I733745 B TWI733745 B TW I733745B
Authority
TW
Taiwan
Prior art keywords
channel
request
simulation
virtual machine
eventfd
Prior art date
Application number
TW106102499A
Other languages
English (en)
Other versions
TW201828058A (zh
Inventor
張獻濤
丁聖閣
田雙太
Original Assignee
香港商阿里巴巴集團服務有限公司
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 香港商阿里巴巴集團服務有限公司 filed Critical 香港商阿里巴巴集團服務有限公司
Priority to TW106102499A priority Critical patent/TWI733745B/zh
Publication of TW201828058A publication Critical patent/TW201828058A/zh
Application granted granted Critical
Publication of TWI733745B publication Critical patent/TWI733745B/zh

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本發明實施例提供了一種KVM虛擬化下處理I/O請求的方法和裝置,其中所述方法包括:通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊,其中,所述I/O通道具有對應的緩衝區,所述I/O通道的資訊包括eventfd檔案描述符;將所述I/O請求寫入對應的I/O通道的緩衝區中;採用所述eventfd通知所述I/O通道對應的使用者態進程;在所述使用者態進程中,根據所述eventfd監聽對應的I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬,其中,所述使用者態進程包括第一設備模擬進程以及與所述第一設備模擬進程獨立的第二設備模擬進程。本發明可以在內核態中實現I/O請求的分發,針對單個虛擬機器可以支援多個設備模擬進程,提高了I/O模擬的效率。

Description

核心模式的虛擬機器(KVM)虛擬化下處理I/O請求的方法和裝置
本發明關於KVM虛擬化的技術領域,特別是關於一種KVM虛擬化下處理I/O請求的方法和一種KVM虛擬化下處理I/O請求的裝置。
虛擬機器(Virtual Machine)是指通過軟體模擬的、具有完整硬體系統功能的,運行在一個完全隔離環境中的完整電腦系統。通過虛擬機器軟體,可以在一台實體電腦上模擬出一台或多台虛擬的電腦。虛擬機器可以像真正的電腦那樣進行工作,例如可以安裝作業系統、安裝應用程式、存取網路資源等等。通常,虛擬機器所在的實體電腦稱為宿主機(Host),虛擬機器自身稱為虛擬機器(Guest)。
KVM(Kernel-based Virtual Machine)即核心模式的虛擬機器的簡稱,是一個開源的系統虛擬化模組,它使用Linux自身的調度器進行管理,KVM的虛擬化需要硬體支援(如Intel VT技術或者AMD VT技術)。
在現有技術中,在KVM虛擬化中,當虛擬機器發生 I/O操作時,支持VMX(Virtual Machine eXtensions,是intel實現的x86指令集虛擬化擴展)或者SVM(Secure Virtual Machine,是amd實現的x86指令集的虛擬化擴展)擴展的CPU就會停止執行,退出非根模式,進入根模式執行KVM代碼。KVM根據退出的原因得知虛擬機器需要進行I/O操作,於是從內核態退出至使用者態的QEMU進程。
QEMU進程在初始化的時候映射了一塊KVM的空間,KVM在退出前把I/O請求放在其中,QEMU從中拿到I/O請求之後將其分發給相應的I/O模擬設備,I/O模擬設備執行I/O模擬以後,QEMU重新調用IOCTL進入KVM內核態,KVM稍作處理後進入非根模式繼續運行vCPU(虛擬處理器)。
然而,發明人在實施上述I/O請求的模擬過程中,發現如下問題:
1、模擬vCPU的時候QEMU通過一個vCPU的IOCTL進入到KVM內核態,發生I/O請求的時候要退出內核態回到QEMU使用者態的VCPU執行緒進行模擬,因此,I/O模擬必須和CPU模擬在同一個進程中,無法支援多個設備模擬進程。
2、KVM已有的基於eventfd的I/O通知機制只能應用於寫請求,且對所寫資料不關心,只關心所寫位址的場景,例如Virtio設備的佇列通知寄存器寫存取。這種機制不能傳遞I/O請求存取的實際位址和長度,也無法將讀操 作得到的資料傳遞給KVM。
3、如果要在不同執行緒中實現CPU模擬和設備I/O模擬,現在缺乏一種機制來同步IO模擬線路程和VCPU執行緒。
鑒於上述問題,提出了本發明實施例以便提供一種克服上述問題或者至少部分地解決上述問題的一種KVM虛擬化下處理I/O請求的方法和相應的一種KVM虛擬化下處理I/O請求的裝置。
為了解決上述問題,本發明揭露了一種KVM虛擬化下處理I/O請求的方法,所述的方法包括:通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊,其中,所述I/O通道具有對應的緩衝區,所述I/O通道的資訊包括eventfd檔案描述符;將所述I/O請求寫入對應的I/O通道的緩衝區中;採用所述eventfd通知所述I/O通道對應的使用者態進程;在所述使用者態進程中,根據所述eventfd監聽對應的I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬,其中,所述使用者態進程包括第一設備模擬進程以及與所述第一設備模擬進程獨立的第二設備模擬進程。
較佳地,所述在所述通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊的步驟之前,還包括:採用所述第一設備模擬進程創建虛擬機器,獲得所述虛擬機器的檔案描述符;採用所述第一設備模擬進程,基於所述虛擬機器的檔案描述符,創建虛擬處理器vCPU,獲得所述vCPU的檔案描述符;採用所述第二設備模擬進程,創建eventfd檔案描述符;採用所述第二設備模擬進程,基於所述虛擬機器的檔案描述符,創建I/O通道,並將所述I/O通道與所述eventfd檔案描述符綁定,獲得所述I/O通道的檔案描述符;採用所述第二設備模擬進程,對所述eventfd檔案描述符進行監聽;採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述使用者態進程映射所述I/O通道的緩衝區;採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述I/O通道綁定I/O位址區間。
較佳地,所述I/O請求包括I/O位址,所述通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊的步驟包括: 通過內核虛擬機器KVM及Intel VT-d硬體技術攔截虛擬機器的vCPU執行緒發出的I/O請求;從所述I/O請求中提取對應的I/O位址;確定所述I/O位址所屬的I/O位址區間;通過所述I/O位址區間確定對應的I/O通道,並獲取所述I/O通道對應的I/Q通道的資訊。
較佳地,所述I/O通道的位址區間包括多個I/O模擬設備的位址子區間;所述在所述使用者態進程中,根據所述eventfd確定對應的I/O通道,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬的步驟包括:在所述使用者態進程中,根據所述eventfd確定對應的I/O通道;從所述對應的I/O通道的緩衝區中獲取I/O請求;依據所述I/O請求中的I/O位址確定對應的I/O模擬設備;將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行I/O模擬。
較佳地,在所述在所述使用者態進程中,根據所述eventfd確定對應的I/O通道,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬的步驟之前,還包括:掛起所述vCPU執行緒。
較佳地,在所述在所述使用者態進程中,根據所述 eventfd確定對應的I/O通道,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬的步驟之後,還包括:喚醒所述掛起的vCPU執行緒。
較佳地,所述I/O請求包括讀請求,所述將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行I/O模擬的步驟為:將所述讀請求分發至所述I/O模擬設備中,通過所述I/O模擬設備將所述讀請求對應的資料寫入所述I/O通道的緩衝區中。
較佳地,所述方法還包括:若所述I/O請求為讀請求,將所述讀請求對應的資料從緩衝區中讀出,讀入到vCPU結構體中相應的成員變數中;對所述資料進行對應的模擬處理。
本發明還揭露了一種KVM虛擬化下處理I/O請求的裝置,其中,所述的裝置包括:I/O通道確定模組,用於通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊,其中,所述I/O通道具有對應的緩衝區,所述I/O通道的資訊包括eventfd檔案描述符;緩衝區寫入模組,用於將所述I/O請求寫入對應的I/O通道的緩衝區中;事件通知模組,用於採用所述eventfd通知所述I/O 通道對應的使用者態進程;I/O模擬模組,用於在所述使用者態進程中,根據所述eventfd監聽對應的I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬,其中,所述使用者態進程包括第一設備模擬進程以及與所述第一設備模擬進程獨立的第二設備模擬進程。
較佳地,所述裝置還包括:虛擬機器創建模組,用於採用所述第一設備模擬進程創建虛擬機器,獲得所述虛擬機器的檔案描述符;vCPU創建模組,用於採用所述第一設備模擬進程,基於所述虛擬機器的檔案描述符,創建虛擬處理器vCPU,獲得所述vCPU的檔案描述符;eventfd創建模組,用於採用所述第二設備模擬進程,創建eventfd檔案描述符;I/O通道創建模組,用於採用所述第二設備模擬進程,基於所述虛擬機器的檔案描述符,創建I/O通道,並將所述I/O通道與所述eventfd檔案描述符綁定,獲得所述I/O通道的檔案描述符;監聽模組,用於採用所述第二設備模擬進程,對所述eventfd檔案描述符進行監聽;緩衝區映射模組,用於採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述使用者態進程映射所述I/O通道的緩衝區; 位址區間綁定模組,用於採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述I/O通道綁定I/O位址區間。
較佳地,所述I/O請求包括I/O位址,所述I/O通道確定模組包括:I/O請求攔截子模組,用於通過內核虛擬機器KVM及Intel VT-d硬體技術攔截虛擬機器的vCPU執行緒發出的I/O請求;I/O位址提取子模組,用於從所述I/O請求中提取對應的I/O位址;第一I/O通道確定子模組,用於確定所述I/O位址所屬的I/O位址區間,並通過所述I/O位址區間確定對應的I/O通道,並獲取所述I/O通道對應的I/O通道的資訊。
較佳地,所述I/O通道的位址區間包括多個I/O模擬設備的位址子區間;所述I/O模擬模組包括:第二I/O通道確定子模組,用於在所述使用者態進程中,根據所述eventfd確定對應的I/O通道;I/O請求讀取子模組,用於從所述對應的I/O通道的緩衝區中獲取I/O請求;I/O模擬設備確定子模組,用於依據所述I/O請求中的I/O位址確定對應的I/O模擬設備;分發子模組,用於將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行 I/O模擬。
較佳地,所述裝置還包括:掛起模組,用於在採用所述eventfd通知所述I/O通道對應的使用者態進程以後,掛起所述vCPU執行緒。
較佳地,所述裝置還包括:喚醒模組,用於在對所述I/O請求執行I/O模擬以後,喚醒所述掛起的vCPU執行緒。
較佳地,所述I/O請求包括讀請求,所述分發子模組還用於:將所述讀請求分發至所述I/O模擬設備中,通過所述I/O模擬設備將所述讀請求對應的資料寫入所述I/O通道的緩衝區中。
較佳地,所述裝置還包括:資料讀出模組,用於在所述I/O請求為讀請求時,將所述讀請求對應的資料從緩衝區中讀出,讀入到vCPU結構體中相應的成員變數中,對所述資料進行對應的模擬處理。
本發明實施例包括以下優點:在本發明實施例中,可以通過I/O通道來傳遞I/O請求,當KVM攔截虛擬機器發出的I/O請求以後,可以確定該I/O請求對應的I/O通道,並將I/O請求寫入對應的I/O通道的緩衝區中,隨後通過eventfd通知I/O通道對應的使用者態進程,使用者態進程監聽到eventfd事件通知以後,從該eventfd對應的I/O通道的緩衝區中獲取I/O 請求,並對該I/O請求執行I/O模擬。本發明可以在內核態中實現I/O請求的分發,針對單個虛擬機器可以支援多個設備模擬進程,提高了I/O模擬的效率。
101‧‧‧步驟
102‧‧‧步驟
103‧‧‧步驟
104‧‧‧步驟
201‧‧‧步驟
202‧‧‧步驟
203‧‧‧步驟
204‧‧‧步驟
205‧‧‧步驟
206‧‧‧步驟
S1‧‧‧子步驟
S2‧‧‧子步驟
S3‧‧‧子步驟
S4‧‧‧子步驟
S5‧‧‧子步驟
S6‧‧‧子步驟
S7‧‧‧子步驟
401‧‧‧I/O通道確定模組
402‧‧‧緩衝區寫入模組
403‧‧‧事件通知模組
404‧‧‧I/O模擬模組
圖1是本發明的一種KVM虛擬化下分發I/O請求的方法實施例一的步驟流程圖;圖2是本發明的一種KVM虛擬化下分發I/O請求的方法實施例二的步驟流程圖;圖3是本發明的一種KVM虛擬化下分發I/O請求的方法實施例二中的KVM初始化流程的步驟流程圖;圖4是本發明的種KVM虛擬化下處理I/O請求的裝置實施例的結構方塊圖。
為使本發明的上述目的、特徵和優點能夠更加明顯易懂,下面結合圖式和具體實施方式對本發明作進一步詳細的說明。
參照圖1,示出了本發明的一種KVM虛擬化下分發I/O請求的方法實施例一的步驟流程圖,具體可以包括如下步驟:步驟101,通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊,其中,所述I/O通道具有對應的緩衝區,所述I/O通 道的資訊包括eventfd檔案描述符;步驟102,將所述I/O請求寫入對應的I/O通道的緩衝區中;步驟103,採用所述eventfd通知所述I/O通道對應的使用者態進程;步驟104,在所述使用者態進程中,根據所述eventfd監聽對應的I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬。
其中,所述使用者態進程包括第一設備模擬進程以及與所述第一設備模擬進程獨立的第二設備模擬進程。
在本發明實施例中,可以通過I/O通道來傳遞I/O請求,當KVM攔截虛擬機器發出的I/O請求以後,可以確定該I/O請求對應的I/O通道,並將I/O請求寫入對應的I/O通道的緩衝區中,隨後通過eventfd通知I/O通道對應的使用者態進程,使用者態進程監聽到eventfd事件通知以後,從該eventfd對應的I/O通道的緩衝區中讀取I/O請求,並對該I/O請求執行I/O模擬。本發明可以在內核態中實現I/O請求的分發,針對單個虛擬機器可以支援多個設備模擬進程,提高了I/O模擬的效率。
參照圖2,示出了本發明的一種KVM虛擬化下處理I/O請求的方法實施例二的步驟流程圖。其中,KVM(Kernel-based Virtual Machine,核心模式的虛擬機器)是一個基於Linux環境的開源虛擬化解決方案。KVM的思想是在Linux內核的基礎上添加虛擬機器管理模組,重 用Linux內核中已經完善的進程調度、記憶體管理、I/O管理等部分,使之成為一個可以支援運行虛擬機器的超級管理程式Hypervisor。
KVM是基於硬體輔助虛擬化技術(例如:Intel的VT-x或者AMD-V)的全虛擬化解決方案,虛擬機器作業系統能夠不經過修改直接在KVM的虛擬機器中運行,每一台虛擬機器能夠享有獨立的虛擬硬體資源:網卡、磁片、圖形配接器等。
KVM可以作為單獨的模組編譯進內核中,也可以作為內核模組在Linux系統啟動完成之後載入。
KVM的API是通過/dev/kvm設備進行存取的。/dev/kvm是一個字元型設備,其可以使用常見的系統調用如open、close、IOCTL等指令進行操作。因為KVM的字元型設備的實現函數中,沒有包含write、read等操作,所以所有對KVM的操作都是通過IOCTL發送相應的控制字實現的。
KVM所提供的使用者空間API從功能上劃分,可以分為三種類型,分別為system指令、VM指令以及vCPU指令。其中,system指令針對虛擬化系統的全域性參數設置和用於虛擬機器創建等控制操作;VM指令針對具體的VM虛擬機器進行控制,如進行記憶體設置、創建vCPU等;vCPU指令針對具體的vCPU進行參數設置(MRU寄存器讀寫、中斷控制等)。
在發明實施例中,可以通過不同的使用者態模擬器來 控制使用者空間,從而可以在不同的使用者態進程中模擬同一台虛擬機器的設備I/O,支援針對單個虛擬機器的多個設備模擬進程。該不同的使用者態進程可以包括第一設備模擬進程以及第二設備模擬進程,作為本發明實施例的一種較佳示例,第一設備模擬進程可以為QEMU(全稱Quick Emulator)進程,所述第二設備模擬進程可以為獨立於QEMU進程的I/O設備模擬進程,為方便後續的描述,可以將該第二設備模擬進程稱為DEMU(Dedicated Emulator)進程或DEMU。
其中,QEMU是一款開源的模擬器及虛擬機器監管器(Virtual Machine Monitor,VMM),使用者可以通過不同Linux發行版本所帶有的套裝軟體管理器來安裝QEMU。QEMU在主機使用者態模擬虛擬機器的硬體設備,QEMU作為系統模擬器時,可以模擬出一台能夠獨立運行作業系統的虛擬機器,每個虛擬機器對應主機(Host)中的一個QEMU進程,而虛擬機器的vCPU對應QEMU進程的一個執行緒。
在具體實現中,可以通過執行QEMU和DEMU的二進位可執行檔來創建QEMU進程與DEMU進程,並可以通過腳本或者libvirt工具啟動這兩個進程。
應用於本發明實施例,在對I/O請求進行處理之前,首先執行初始化流程。在平臺相關的KVM模組中通過module_init宏正式進入KVM的初始化階段,並且執行相關的硬體初始化準備。進入kvm_main.c中的kvm_init函 數進行正式的初始化工作。
參考圖3的KVM初始化流程的步驟流程圖,所述初始化流程至少可以包括如下步驟:
子步驟S1,採用所述第一設備模擬進程創建虛擬機器,獲得所述虛擬機器的檔案描述符;具體的,KVM同使用者空間進程的交互介面為/dev/kvm,對於KVM API的操作是從打開/dev/kvm設備檔開始的,通過使用系統調用open方法之後,可以獲得針對kvm subsystem的一個fd檔案描述符。然後通過IOCTL系統指令針對該檔案描述符進行進一步的操作。
IOCTL系統指令可以包括KVM_CREATE_VM指令,通過KVM_CREATE_VM指令,即可創建一個虛擬機器VM。通過調用anon_inode_getfd可以獲得一fd檔案描述符,作為虛擬機器的檔案描述符,即vm_fd,該vm_fd指向內核空間中該新創建的虛擬機器,然後根據該描述符來控制虛擬機器的行為。
vm IOCTL系統調用實現了對虛擬機器的控制。vm IOCTL控制指令的參數大多需要從KVM_CREATE_VM中返回的vm_fd來進行操作,涉及的操作主要針對該虛擬機器進行控制,如配置記憶體、配置vCPU等。
針對VM的檔操作中,提供了IOCTL和mmap兩個操作函數,其中mmap對應著客戶作業系統GUEST OS的實體位址,可以直接對GUEST OS的位址空間進行讀/寫,IOCTL則用於發送KVM的控制字。
應用於本發明實施例,還可以對該創建的虛擬機器設置對應的通用唯一識別碼UUID,以通過該UUID識別虛擬機器。
虛擬機器的創建過程實質為kvm結構體的創建和初始化過程,在創建虛擬機器時,kvm_dev_IOCTL_create_vm函數通過調用kvm_create_vm函數對KVM結構體進行創建。
KVM結構體保存了虛擬機器運行的上下文及其他相關狀態,例如,可以包括vCPU(虛擬處理器,虛擬機器內的CPU)、記憶體、APIC(Advanced Programmable Interrupt Controller,進階可程式中斷控制卡)、IRQ(Interrupt Request,插斷要求)、MMU(Memory Management Unit,記憶體管理單元)、Event事件管理等資訊,應用於本發明實施例,該KVM結構體還可以包括虛擬機器的UUID。
KVM結構體的初始化過程,可以包括:初始化KVM的memslot結構體、Bus匯流排結構體資訊、scru讀/寫鎖資訊、eventfd事件通知資訊、mmu記憶體管理結構體資訊等。
虛擬機器的KVM結構體創建完成以後,可以將其加入到全域鏈表vm_list中。
在本發明實施例中,可以使用QEMU進程完成虛擬機器的創建。
步驟S2,採用所述第一設備模擬進程,基於所述虛 擬機器的檔案描述符,創建虛擬處理器vCPU,獲得所述vCPU的檔案描述符;具體的,全新創建的虛擬機器沒有vCPU,需要通過後續的IOCTL指令進行配置。在獲得vm_fd之後,通過IOCTL調用KVM_CREATE_vCPU指令,可以對該vm_fd對應的虛擬機器創建vCPU,其入口函數位址在kvm_vm_IOCTL函數中,通過switch之後,程式流程將選擇進入kvm_vm_IOCTL_create_vCPU函數中進行處理,返回該vCPU對應的檔案描述符fd,即vCPU_fd,在KVM虛擬化環境中,硬體虛擬化使用vCPU_fd來描述vCPU。
在KVM中,vCPU對應的資料結構體為kvm_vCPU,vCPU的創建過程實質為kvm_vCPU結構體的創建和初始化過程,可以包括如下過程:調用kvm_arch_vCPU_create函數創建一個kvm_vCPU結構體;調用kvm_arch_vCPU_setup函數對kvm_vCPU中的資料結構進行初始化;創建當前vCPU對應的檔案描述符vCPU_fd,並且將kvm_vCPU添加入KVM的vCPU陣列中。
在本發明實施例中,可以使用QEMU進程完成vCPU的創建,每個vCPU對應一個vCPU執行緒。
步驟S3,採用所述第二設備模擬進程,創建eventfd檔案描述符;應用於本發明實施例,可以採用DEMU進程調用標準的Linux系統API eventfd()來創建eventfd檔案描述 符。具體來說,eventfd()是Linux系統提供的系統介面,函數原型是int eventfd(unsigned int initval,int flags),調用這個函數使用者態進程可以獲取一個eventfd檔案描述符,同時在內核中創建一個eventfd對象用於實現等待和通知的機制,主要用於使用者態互相通知,和內核態向使用者態的通知。
eventfd物件中可以包含一個64位元的整形變數作為計數器,函數原型中傳入的參數initval用於初始化這個計數器。eventfd檔案描述符用於使用者態引用eventfd物件,使用者態進程可以對eventfd檔案描述符進行read,write,poll,select操作。
步驟S4,採用所述第二設備模擬進程,基於所述虛擬機器檔案描述符,創建I/O通道,並將所述I/O通道與所述eventfd檔案描述符綁定,獲得所述I/O通道的檔案描述符;應用於本發明實施例,還可以採用DEMU進程來創建虛擬機器的一個或多個I/O通道。
具體來說,DEMU進程可以獲得當前虛擬機器的UUID,然後在全域鏈表vm_list中查找該虛擬機器的UUID,若查找成功,則獲得對應的KVM結構體,從而獲得虛擬機器的檔案描述符vm_fd,之後,可以通過vm_fd新增的IOCTL指令(例如,KVM_CREATE_IOCH指令)對該vm_fd對應的虛擬機器創建I/O通道。創建I/O通道的時候,會產生I/O通道與eventfd的綁定關係,隨後返 回I/O通道的檔案描述符,即I/O_fd,I/O通道的檔案描述符提供IOCLT指令給使用者態進程,每個vm_fd可掛載多個I/O_fd。
在KVM中,I/O通道的創建過程實質為I/O通道的結構體的創建和初始化過程,I/O通道的結構體可以包括:一個eventfd,用於內核態向使用者態的通知;一組存放I/O請求的緩衝區及其保護鎖;一個保存所有此通道負責傳遞的I/O位址空間的鏈表。
應用於本發明實施例,在虛擬環境中,每個虛擬機器對應的KVM結構體還可以新增一個鏈表,用於保存所有註冊在該虛擬機器上的I/O通道。
需要說明的是,每個I/O模擬進程僅需要且對應一個I/O通道。
子步驟S5,採用所述第二設備模擬進程,對所述eventfd檔案描述符進行監聽。
在具體實現中,可以在進程主迴圈中對eventfd檔案描述符使用poll或者select方法,一旦發現該eventfd檔案描述符有待處理的I/O,就調用相關的處理函數,以實現對eventfd的監聽。
步驟S6,採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述使用者態進程映射所述I/O通道的緩衝區;在具體實現中,KVM會在內核態為全新創建的I/O通道分配一段緩衝區,隨後,使用者態程式可以對I/O通 道的檔案描述符使用mmap()系統調用,映射該I/O通道的緩衝區,則使用者態進程可以存取該緩衝區。
所述緩衝區還具有保護鎖,以保證對該緩衝區讀寫存取互斥性。
步驟S7,採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述I/O通道綁定I/O位址區間。
應用本發明實施例,還可以採用DEMU進程通過I/O通道的檔案描述符為需要監聽的I/O通道綁定I/O位址區間,不同的I/O通道具有不同的I/O位址區間,例如,針對I/O位址區間1~1000,可以將1~300綁定給I/O通道A,將301~1000綁定給I/O通道B。
在具體實現中,該I/O通道的位址區間還可以包括多個位址子區間,每個位址子區間對應一個I/O模擬設備(一個IO模擬進程可以模擬多個IO模擬設備),每個I/O模擬設備只模擬落在其位址區間範圍內的請求。例如,I/O通道A的位址區間為1~300,其中,1~100可以對應I/O模擬設備1,101~200可以對應I/O模擬設備2,201~300可以對應I/O模擬設備3。
在本發明實施例中,在原有的QEMU進程的基礎上,新增獨立的DEMU進程,兩者作為使用者態模擬器,能夠共用虛擬機器的一部分底層資料結構。
在完成初始化流程以後,如圖2所示,本發明實施例具體可以包括如下步驟:
步驟201,通過內核虛擬機器KVM攔截虛擬機器的 vCPU執行緒發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊;KVM可以攔截虛擬機器的I/O操作,並根據攔截的I/O操作確定對應的I/O通道的資訊。
在本發明實施例的一種較佳實施例中,步驟201可以包括如下子步驟:
子步驟S11,通過內核虛擬機器KVM及Intel VT-d硬體技術攔截虛擬機器的vCPU執行緒發出的I/O請求;在具體實現中,KVM在內核空間非根模式下運行vCPU執行緒,當vCPU執行緒發起I/O請求時,該敏感指令將會觸發Intel VT-d硬體技術的VM exit操作,進入根模式下KVM相應的處理函數。
具體的,當虛擬機器運行時(虛擬機器的運行通過/dev/kvm設備IOCTL vCPU介面的KVM_RUN指令實現),觸發VM Entry,使虛擬機器進入客戶Guest模式,即non root模式。而當在虛擬機器中(Guest模式)執行特權指令或者外部事件,比如I/O存取,對控制寄存器的操作,MSR的讀寫資料包到達等時,可以觸發(由硬體觸發)VM Exit,使當前CPU從Guest模式(非根non-root模式)退出,切換到根root模式,當前CPU的控制權隨之轉交給KVM,由KVM進行相應的處理。
KVM取得控制權以後,通過讀取VMCS中VM_EXIT_REASON欄位得到引起VM Exit的原因,KVM根據退出的原因得知虛擬機器需要進行I/O操作。
子步驟S12,從所述I/O請求中提取對應的I/O位址;I/O請求中可以攜帶發出I/O請求的虛擬機器的位址資訊,當獲得I/O請求以後,可以從該I/O請求中提取對應的I/O位址。
子步驟S13,確定所述I/O位址所屬的I/O位址區間;
子步驟S14,通過所述I/O位址區間確定對應的I/O通道,並獲取所述I/O通道對應的I/O通道的資訊。
由於I/O通道具有I/O位址區間,因此可以首先判斷該I/O請求的I/O位址屬於哪個位址區間,然後根據匹配的位址區間確定對應的I/O通道,並確定該I/O通道對應的緩衝區、eventfd檔案描述符等資訊。
步驟202,將所述I/O請求寫入對應的I/O通道的緩衝區中;確定該I/O請求對應的I/O通道通道以後,KVM可以將該I/O請求寫入該對應的I/O通道的緩衝區中,從而在KVM中完成I/O請求的分發。
步驟203,採用所述eventfd通知所述I/O通道對應的使用者態進程;在具體實現中,在內核空間中將I/O請求寫入對應的I/O通道的緩衝區時,使用者空間對此並不知情,因此需要內核空間通過eventfd向使用者空間發出通知,使用者態進程通過監聽該eventfd從而獲知其對應的I/O通道的 緩衝區中寫入了I/O請求。
步驟204,掛起所述vCPU執行緒;應用於本發明實施例,由於I/O請求通過I/O通道上傳到I/O通道的緩衝區中,由I/O模擬線路程進行I/O模擬,而I/O模擬線路程與vCPU執行緒可以處於不同的進程中,因此發生I/O請求的時候無需退出vCPU執行緒,此時只需要掛起vCPU執行緒,並等待使用者態進程的完成I/O請求後再將其喚醒。
步驟205,在所述使用者態進程中,根據所述eventfd監聽對應的I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬;當內核態向使用者態發出eventfd事件通知時,使用者態進程可以監聽到eventfd事件通知,相應的處理函數被調用,通過使用者態進程進行I/O模擬,其中,I/O模擬主要指的是針對虛擬機器進行的I/O操作,通過軟體的模擬行為使其獲得一個對應的處理結果。
在本發明實施例的一種較佳實施例中,步驟205可以包括如下子步驟:
子步驟S21,在所述使用者態進程中,根據所述eventfd確定對應的I/O通道;由於eventfd與I/O通道是綁定的,當使用者態進程監聽到eventfd進程註冊的函數被調用以後,可以根據eventfd與I/O通道的對應關係,確定與eventfd對應的I/O通道。
子步驟S22,從所述對應的I/O通道的緩衝區中獲取I/O請求;當確定I/O通道以後,可以進一步從已經映射的該I/O通道的緩衝區中讀出I/O請求。
子步驟S23,依據所述I/O請求中的I/O位址確定對應的I/O模擬設備;子步驟S24,將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行I/O模擬。
由於I/O通道的位址空間中包含一個或多個I/O模擬設備的位址子區間,當使用者態進程獲得I/O請求以後,可以根據該I/O請求中攜帶的I/O位址,確定該I/O位址所屬的位址子區間,並根據該位址子區間確定對應的I/O模擬設備,以及將該I/O請求分發至該對應的I/O模擬設備中,以完成I/O請求的進一步二次分發。
I/O模擬設備獲得I/O請求以後,對該I/O請求進行I/O模擬。
在一種實施方式中,若該I/O請求為讀請求,則該請求對應的I/O模擬設備可以將該讀請求對應的資料寫入I/O通道的緩衝區中,從而完成使用者空間中的I/O模擬。
在另一種實施方式中,若該I/O請求為寫請求,則該請求對應的I/O模擬設備可以將該寫請求對應的資料寫入對應的位置中,例如寫入到了主機中的一個鏡像檔中,從 而完成使用者空間中的I/O模擬。
步驟206,喚醒所述掛起的vCPU執行緒。
I/O模擬完成後,使用者態進程調用I/O通道的檔案描述符中的新增IOCTL指令進入KVM內核態,喚醒該掛起的vCPU執行緒,以繼續運行vCPU執行緒,達到vCPU執行緒與I/O模擬線路程的同步,也就是說,使用者態向內核態的通知是通過對vCPU執行緒的掛起與喚醒來實現的。
在一種實施方式中,若該I/O請求為讀請求,在喚醒vCPU執行緒之後,還可以將該讀請求對應的資料從緩衝區中讀出,讀入到vCPU結構體中相應的成員變數中,並通過原有的I/O模擬代碼進行後續的模擬處理。
eventfd的使用結合緩衝區的使用,可以在緩衝區中傳遞I/O請求存取的實際位址和長度,並將讀操作得到的資料通過緩衝區傳遞給KVM,克服現有技術的缺陷。
在對I/O請求處理完成以後,可以通過硬體指令(如VMLAUNCH),觸發VM Enter,重新進入到Guest模式,從而進入虛擬機器運行環境中繼續運行。
為了使所屬技術領域中具有通常知識者能夠更好地理解本發明實施例,以下通過一個具體實例對本發明實施例加以示例性說明,但應該理解的是,本發明實施例並不限於此。
虛擬機器在運行時,設備驅動會存取虛擬VGA設備的MMIO控制寄存器來讀取模擬設備的狀態。該寄存器映 射的位址存取觸發EPT頁錯誤,CPU退出非根模式進入根模式,執行KVM代碼。
KVM判斷退出原因得知是I/O請求,根據I/O請求查找對應的I/O通道,將I/O請求拷貝到I/O通道相應的緩衝區中,然後用eventfd發出通知後vCPU執行緒進入睡眠。
QEMU主迴圈發現eventfd中的事件通知,找到相應的I/O通道並從相應的緩衝區中讀出I/O請求,發現該請求位址處於客戶機實體位址佈局中虛擬VGA設備的BAR1區間,於是調用VGA設備相應的處理函數對I/O請求進行模擬,把該寄存器的值寫回到緩衝區中,然後通過IOCTL指令喚醒睡眠的vCPU執行緒。
vCPU執行緒被喚醒後從緩衝區中讀出寄存器值資料,並將其更新到vCPU上下文的相應位置,然後進入非根模式繼續執行vCPU上下文。
驅動代碼處的讀寄存器操作全部完成模擬。
本發明實施例在KVM虛擬化下實現獨立於QEMU的設備模擬程式提供了基礎,解決了一些廠商特有的設備模擬需求。
另外,本發明實施例在KVM內核模組中實現I/O請求的分發,並向使用者態提供控制介面,從而可以在不同的進程中模擬同一台虛擬機器的設備I/O。
需要說明的是,對於方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是所屬技術領域中具 有通常知識者應該知悉,本發明實施例並不受所描述的動作順序的限制,因為依據本發明實施例,某些步驟可以採用其他順序或者同時進行。其次,所屬技術領域中具有通常知識者也應該知悉,說明書中所描述的實施例均屬於較佳實施例,所涉及的動作並不一定是本發明實施例所必須的。
參照圖4,示出了本發明的一種KVM虛擬化下處理I/O請求的裝置實施例的結構方塊圖,具體可以包括如下模組:I/O通道確定模組401,用於通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊,其中,所述I/O通道具有對應的緩衝區,所述I/O通道的資訊包括eventfd檔案描述符;緩衝區寫入模組402,用於將所述I/O請求寫入對應的I/O通道的緩衝區中;事件通知模組403,用於採用所述eventfd通知所述I/O通道對應的使用者態進程;I/O模擬模組404,用於在所述使用者態進程中,根據所述eventfd監聽對應的I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬。
其中,所述使用者態進程包括第一設備模擬進程以及與所述第一設備模擬進程獨立的第二設備模擬進程。
在本發明實施例的一種較佳實施例中,所述裝置還可 以包括:虛擬機器創建模組,用於採用所述第一設備模擬進程創建虛擬機器,獲得所述虛擬機器的檔案描述符;vCPU創建模組,用於採用所述第一設備模擬進程,基於所述虛擬機器的檔案描述符,創建虛擬處理器vCPU,獲得所述vCPU的檔案描述符;eventfd創建模組,用於採用所述第二設備模擬進程,創建eventfd檔案描述符;I/O通道創建模組,用於採用所述第二設備模擬進程,基於所述虛擬機器的檔案描述符,創建I/O通道,並將所述I/O通道與所述eventfd檔案描述符綁定,獲得所述I/O通道的檔案描述符;監聽模組,用於對所述eventfd檔案描述符進行監聽;緩衝區映射模組,用於採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述使用者態進程映射所述I/O通道的緩衝區;位址區間綁定模組,用於採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述I/O通道綁定I/O位址區間。
在本發明實施例的一種較佳實施例中,所述I/O請求包括I/O位址,所述I/O通道確定模組401可以包括如下子模組:I/O請求攔截子模組,用於通過內核虛擬機器KVM 及Intel VT-d硬體技術攔截虛擬機器的vCPU執行緒發出的I/O請求;I/O位址提取子模組,用於從所述I/O請求中提取對應的I/O位址;
第一I/O通道確定子模組,用於確定所述I/O位址所屬的I/O位址區間,並通過所述I/O位址區間確定對應的I/O通道,並獲取所述I/O通道對應的I/O通道的資訊。
在本發明實施例的一種較佳實施例中,所述I/O通道的位址區間包括多個I/O模擬設備的位址子區間;所述I/O模擬模組404可以包括如下子模組:
第二I/O通道確定子模組,用於在所述使用者態進程中,根據所述eventfd確定對應的I/O通道;I/O請求讀取子模組,用於從所述對應的I/O通道的緩衝區中獲取I/O請求;I/O模擬設備確定子模組,用於依據所述I/O請求中的I/O位址確定對應的I/O模擬設備;分發子模組,用於將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行I/O模擬。
在本發明實施例的一種較佳實施例中,所述裝置還包括:掛起模組,用於在採用所述eventfd通知所述I/O通道對應的使用者態進程以後,掛起所述vCPU執行緒。
在本發明實施例的一種較佳實施例中,所述裝置還包 括:喚醒模組,用於在對所述I/O請求執行I/O模擬以後,喚醒所述掛起的vCPU執行緒。
在本發明實施例的一種較佳實施例中,所述I/O請求包括讀請求,所述分發子模組還用於:將所述讀請求分發至所述I/O模擬設備中,通過所述I/O模擬設備將所述讀請求對應的資料寫入所述I/O通道的緩衝區中。
在本發明實施例的一種較佳實施例中,所述裝置還包括:資料讀出模組,用於在所述I/O請求為讀請求時,將所述讀請求對應的資料從緩衝區中讀出,讀入到vCPU結構體中相應的成員變數中,對所述資料進行對應的模擬處理。
對於裝置實施例而言,由於其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
本說明書中的各個實施例均採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
所屬技術領域中具有通常知識者應明白,本發明實施例的實施例可提供為方法、裝置、或電腦程式產品。因此,本發明實施例可採用完全硬體實施例、完全軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本發 明實施例可採用在一個或多個其中包含有電腦可用程式碼的電腦可用儲存媒介(包括但不限於磁碟記憶體、CD-ROM、光學記憶體等)上實施的電腦程式產品的形式。
在一個典型的配置中,所述電腦設備包括一個或多個處理器(CPU)、輸入/輸出介面、網路介面和記憶體。記憶體可能包括電腦可讀媒介中的非永久性記憶體,隨機存取記憶體(RAM)及/或非易失性記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。記憶體是電腦可讀媒介的示例。電腦可讀媒介包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒介的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可抹除可程式設計唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、卡式磁帶,磁帶磁磁片儲存或其他磁性存放裝置或任何其他非傳輸媒介,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒介不包括非持續性的電腦可讀媒體(transitory media),如調變的資料信號和載波。
本發明實施例是參照根據本發明實施例的方法、終端設備(系統)、和電腦程式產品的流程圖及/或方塊圖來描述 的。應理解可由電腦程式指令實現流程圖及/或方塊圖中的每一流程及/或方塊、以及流程圖及/或方塊圖中的流程及/或方塊的結合。可提供這些電腦程式指令到通用電腦、專用電腦、嵌入式處理機或其他可程式設計資料處理終端設備的處理器以產生一個機器,使得通過電腦或其他可程式設計資料處理終端設備的處理器執行的指令產生用於實現在流程圖一個流程或多個流程及/或方塊圖一個方塊或多個方塊中指定的功能的裝置。
這些電腦程式指令也可儲存在能引導電腦或其他可程式設計資料處理終端設備以特定方式工作的電腦可讀記憶體中,使得儲存在該電腦可讀記憶體中的指令產生包括指令裝置的製造品,該指令裝置實現在流程圖一個流程或多個流程及/或方塊圖一個方塊或多個方塊中指定的功能。
這些電腦程式指令也可裝載到電腦或其他可程式設計資料處理終端設備上,使得在電腦或其他可程式設計終端設備上執行一系列操作步驟以產生電腦實現的處理,從而在電腦或其他可程式設計終端設備上執行的指令提供用於實現在流程圖一個流程或多個流程及/或方塊圖一個方塊或多個方塊中指定的功能的步驟。
儘管已描述了本發明實施例的較佳實施例,但所屬技術領域中具有通常知識者一旦得知了基本創造性概念,則可對這些實施例做出另外的變更和修改。所以,所附申請專利範圍意欲解釋為包括較佳實施例以及落入本發明實施例範圍的所有變更和修改。
最後,還需要說明的是,在本文中,諸如第一和第二等之類的關係術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關係或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,並不排除在包括所述要素的過程、方法、物品或者終端設備中還存在另外的相同要素。
以上對本發明所提供的一種KVM虛擬化下處理I/O請求的方法和一種KVM虛擬化下處理I/O請求的裝置,進行了詳細介紹,本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本發明的方法及其核心思想;同時,對於所屬技術領域中具有通常知識者,依據本發明的思想,在具體實施方式及應用範圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發明的限制。

Claims (16)

  1. 一種KVM虛擬化下處理I/O請求的方法,所述的方法包括:通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊,其中,所述I/O通道具有對應的緩衝區,所述I/O通道的資訊包括eventfd檔案描述符;將所述I/O請求寫入對應的I/O通道的緩衝區中;採用所述eventfd通知所述I/O通道對應的使用者態進程;在所述使用者態進程中,根據所述eventfd監聽對應的所述I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬,其中,所述使用者態進程包括第一設備模擬進程以及與所述第一設備模擬進程獨立的第二設備模擬進程。
  2. 根據申請專利範圍第1項所述的方法,其中,所述通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊的步驟之前,還包括:採用所述第一設備模擬進程創建虛擬機器,獲得所述虛擬機器的檔案描述符;採用所述第一設備模擬進程,基於所述虛擬機器的檔案描述符,創建虛擬處理器vCPU,獲得所述vCPU的檔案描述符; 採用所述第二設備模擬進程,創建所述eventfd檔案描述符;採用所述第二設備模擬進程,基於所述虛擬機器的檔案描述符,創建所述I/O通道,並將所述I/O通道與所述eventfd檔案描述符綁定,獲得所述I/O通道的檔案描述符;採用所述第二設備模擬進程,對所述eventfd檔案描述符進行監聽;採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述使用者態進程映射所述I/O通道的緩衝區;採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述I/O通道綁定I/O位址區間。
  3. 根據申請專利範圍第2項所述的方法,其中,所述I/O請求包括I/O位址,所述通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊的步驟包括:通過內核虛擬機器KVM及Intel VT-d硬體技術攔截虛擬機器的vCPU執行緒發出的所述I/O請求;從所述I/O請求中提取對應的I/O位址;確定所述I/O位址所屬的所述I/O位址區間;通過所述I/O位址區間確定對應的所述I/O通道,並獲取所述I/O通道對應的所述I/O通道的資訊。
  4. 根據申請專利範圍第3項所述的方法,其中,所 述I/O通道的位址區間包括多個I/O模擬設備的位址子區間;所述在所述使用者態進程中,根據所述eventfd確定對應的所述I/O通道,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬的步驟包括:在所述使用者態進程中,根據所述eventfd確定對應的所述I/O通道;從所述對應的I/O通道的緩衝區中獲取I/O請求;依據所述I/O請求中的I/O位址確定對應的I/O模擬設備;將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行I/O模擬。
  5. 根據申請專利範圍第3或4項所述的方法,其中,在所述在所述使用者態進程中,根據所述eventfd確定對應的所述I/O通道,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬的步驟之前,還包括:掛起所述vCPU執行緒。
  6. 根據申請專利範圍第5項所述的方法,其中,在所述在所述使用者態進程中,根據所述eventfd確定對應的所述I/O通道,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬的步驟之後,還包括: 喚醒所述掛起的vCPU執行緒。
  7. 根據申請專利範圍第4項所述的方法,其中,所述I/O請求包括讀請求,所述將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行I/O模擬的步驟為:將所述讀請求分發至所述I/O模擬設備中,通過所述I/O模擬設備將所述讀請求對應的資料寫入所述I/O通道的緩衝區中。
  8. 根據申請專利範圍第7項所述的方法,其中,所述方法還包括:若所述I/O請求為所述讀請求,將所述讀請求對應的資料從緩衝區中讀出,讀入到vCPU結構體中相應的成員變數中;對所述讀請求對應的資料進行對應的模擬處理。
  9. 一種KVM虛擬化下處理I/O請求的裝置,所述的裝置包括:I/O通道確定模組,用於通過內核虛擬機器KVM攔截虛擬機器發出的I/O請求,確定與所述I/O請求對應的I/O通道的資訊,其中,所述I/O通道具有對應的緩衝區,所述I/O通道的資訊包括eventfd檔案描述符;緩衝區寫入模組,用於將所述I/O請求寫入對應的I/O通道的緩衝區中;事件通知模組,用於採用所述eventfd通知所述I/O通道對應的使用者態進程; I/O模擬模組,用於在所述使用者態進程中,根據所述eventfd監聽對應的所述I/O通道的事件,並從所述對應的I/O通道的緩衝區中獲取I/O請求,對所述I/O請求執行I/O模擬,其中,所述使用者態進程包括第一設備模擬進程以及與所述第一設備模擬進程獨立的第二設備模擬進程。
  10. 根據申請專利範圍第9項所述的裝置,其中,還包括:虛擬機器創建模組,用於採用所述第一設備模擬進程創建虛擬機器,獲得所述虛擬機器的檔案描述符;vCPU創建模組,用於採用所述第一設備模擬進程,基於所述虛擬機器的檔案描述符,創建虛擬處理器vCPU,獲得所述vCPU的檔案描述符;eventfd創建模組,用於採用所述第二設備模擬進程,創建所述eventfd檔案描述符;I/O通道創建模組,用於採用所述第二設備模擬進程,基於所述虛擬機器的檔案描述符,創建所述I/O通道,並將所述I/O通道與所述eventfd檔案描述符綁定,獲得所述I/O通道的檔案描述符;監聽模組,用於採用所述第二設備模擬進程,對所述eventfd檔案描述符進行監聽;緩衝區映射模組,用於採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述使用者態進程映射所述I/O通道的緩衝區; 位址區間綁定模組,用於採用所述第二設備模擬進程,基於所述I/O通道的檔案描述符,為所述I/O通道綁定I/O位址區間。
  11. 根據申請專利範圍第10項所述的裝置,其中,所述I/O請求包括I/O位址,所述I/O通道確定模組包括:I/O請求攔截子模組,用於通過內核虛擬機器KVM及Intel VT-d硬體技術攔截虛擬機器的vCPU執行緒發出的所述I/O請求;I/O位址提取子模組,用於從所述I/O請求中提取對應的I/O位址;第一I/O通道確定子模組,用於確定所述I/O位址所屬的所述I/O位址區間,並通過所述I/O位址區間確定對應的所述I/O通道,並獲取所述I/O通道對應的所述I/O通道的資訊。
  12. 根據申請專利範圍第11項所述的裝置,其中,所述I/O通道的位址區間包括多個I/O模擬設備的位址子區間;所述I/O模擬模組包括:第二I/O通道確定子模組,用於在所述使用者態進程中,根據所述eventfd確定對應的所述I/O通道;I/O請求讀取子模組,用於從所述對應的I/O通道的緩衝區中獲取I/O請求;I/O模擬設備確定子模組,用於依據所述I/O請求中 的I/O位址確定對應的I/O模擬設備;分發子模組,用於將所述I/O請求分發至所述I/O模擬設備中,通過所述I/O模擬設備對所述I/O請求進行I/O模擬。
  13. 根據申請專利範圍第11或12項所述的裝置,其中,還包括:掛起模組,用於在採用所述eventfd通知所述I/O通道對應的使用者態進程以後,掛起所述vCPU執行緒。
  14. 根據申請專利範圍第13項所述的裝置,其中,還包括:喚醒模組,用於在對所述I/O請求執行I/O模擬以後,喚醒所述掛起的vCPU執行緒。
  15. 根據申請專利範圍第12項所述的裝置,其中,所述I/O請求包括讀請求,所述分發子模組還用於:將所述讀請求分發至所述I/O模擬設備中,通過所述I/O模擬設備將所述讀請求對應的資料寫入所述I/O通道的緩衝區中。
  16. 根據申請專利範圍第15項所述的裝置,其中,所述裝置還包括:資料讀出模組,用於在所述I/O請求為所述讀請求時,將所述讀請求對應的資料從緩衝區中讀出,讀入到vCPU結構體中相應的成員變數中,對所述讀請求對應的資料進行對應的模擬處理。
TW106102499A 2017-01-23 2017-01-23 核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置 TWI733745B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
TW106102499A TWI733745B (zh) 2017-01-23 2017-01-23 核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
TW106102499A TWI733745B (zh) 2017-01-23 2017-01-23 核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置

Publications (2)

Publication Number Publication Date
TW201828058A TW201828058A (zh) 2018-08-01
TWI733745B true TWI733745B (zh) 2021-07-21

Family

ID=63960282

Family Applications (1)

Application Number Title Priority Date Filing Date
TW106102499A TWI733745B (zh) 2017-01-23 2017-01-23 核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置

Country Status (1)

Country Link
TW (1) TWI733745B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009039162A1 (en) * 2007-09-19 2009-03-26 Vmware, Inc. Reducing the latency of virtual interrupt delivery in virtual machines
JP5122597B2 (ja) * 2005-12-30 2013-01-16 インテル コーポレイション 仮想プロセッサへの直接的なインタラプトの送信
US20160253098A1 (en) * 2013-05-10 2016-09-01 Arista Networks, Inc. System and method of a shared memory hash table with notifications
TWI550516B (zh) * 2012-01-18 2016-09-21 萬國商業機器公司 用於警告追蹤中斷之電腦程式產品、電腦系統及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5122597B2 (ja) * 2005-12-30 2013-01-16 インテル コーポレイション 仮想プロセッサへの直接的なインタラプトの送信
WO2009039162A1 (en) * 2007-09-19 2009-03-26 Vmware, Inc. Reducing the latency of virtual interrupt delivery in virtual machines
TWI550516B (zh) * 2012-01-18 2016-09-21 萬國商業機器公司 用於警告追蹤中斷之電腦程式產品、電腦系統及方法
US20160253098A1 (en) * 2013-05-10 2016-09-01 Arista Networks, Inc. System and method of a shared memory hash table with notifications

Also Published As

Publication number Publication date
TW201828058A (zh) 2018-08-01

Similar Documents

Publication Publication Date Title
WO2017121273A1 (zh) 一种kvm虚拟化下处理i/o请求的方法和装置
US11868792B2 (en) Dynamic device virtualization for use by guest user processes based on observed behaviors of native device drivers
US11681639B2 (en) Direct access to a hardware device for virtual machines of a virtualized computer system
Chen et al. Enabling FPGAs in the cloud
US7853744B2 (en) Handling interrupts when virtual machines have direct access to a hardware device
JP5122597B2 (ja) 仮想プロセッサへの直接的なインタラプトの送信
KR101823888B1 (ko) 신뢰 컴퓨팅을 위한 다중노드 허브
US10620963B2 (en) Providing fallback drivers for IO devices in a computing system
Klingensmith et al. Hermes: A real time hypervisor for mobile and iot systems
Hale et al. Enabling hybrid parallel runtimes through kernel and virtualization support
Zampiva et al. A hypervisor approach with real-time support to the MIPS M5150 processor
JP6920286B2 (ja) 例外処理
Im et al. On-Demand Virtualization for Post-Copy OS Migration in Bare-Metal Cloud
TWI733745B (zh) 核心模式的虛擬機器(kvm)虛擬化下處理i/o請求的方法和裝置
WO2013189180A1 (zh) 虚拟化系统中关闭中断的方法和装置
US11513825B2 (en) System and method for implementing trusted execution environment on PCI device
TW201432461A (zh) 在受控代碼中實現的高流通量低延遲使用者模式驅動程式
Mishra et al. Virtualization on ARM embedded platform codezero hypervisor-a case study
Aguiar et al. A virtualization approach for MIPS-based MPSoCs
WO2024123439A1 (en) Virtual machine live migration with direct-attached non-volatile memory express device
Ambika et al. A Novel Framework for Hypervisor Design
表祐志 Computer Systems Management with a Para Pass-through Virtual Machine Monitor
林宗翰 Addressing Hybrid OS Environment Issues in the Embedded Virtualization Multicore Platform