一種i/o任務處理的方法、設備和系統的制作方法
【技術領域】
[0001]本發明實施例涉及計算機領域,尤其涉及一種虛擬化環境下輸入/輸出(Input/Output,簡稱I /0)任務處理的方法、設備和系統。
【背景技術】
[0002]虛擬化技術起源于對分時系統的需求,主要的目標是在一臺主機上運行多個操作系統,以便充分利用大型機上昂貴的計算資源。隨著x86處理器的性能提升以及應用的普及,虛擬化技術的發展也開始進入x86架構領域。特別是20世紀90年代末期,虛級化軟件廠商為x86平臺上的虛擬化技術應用開辟了道路,提供了以虛擬機監控器(Virtual MachineMonitor,簡稱VMM)為中心,對PC服務器平臺虛擬化的軟件解決方案。虛擬機(VirtualMachine,簡稱VM)負責在一個硬件平臺上虛擬多個獨立的、指令集架構(instruct1n setarchitectur,簡稱ISA)和實際硬件相同的虛擬硬件系統,其中每個虛擬硬件系統均可運行不同的操作系統,即用戶操作系統(Guest OS)。用戶操作系統將通過虛擬機監控器VMM來訪問實際的物理資源。
[0003]在虛擬化應用場景下,每個服務器上都會運行虛擬機管理器(Hypervisor)軟件,Hypervisor是虛擬化的基礎軟件。DomainO為Hypervisor之上的一個特殊虛擬機,該虛擬機用來完成對各個虛擬機的交互以及一些外設模擬、外設訪問等功能。通常,也會將用戶域(Guest Domain)叫做前端,驅動域或DomainO叫做后端,相應的,將驅動域或DomainO中運行的驅動稱為前端驅動,在Domain U中運行的驅動叫做后端驅動。目前虛擬化最常用的1/0任務處理方式是通過前后端驅動,靠前端驅動和后端驅動協同工作來完成通信,前端驅動將虛擬機內部的1/0請求通過輸入輸出(Input and Output,簡稱10)環導入到Hypervisor層進行后端驅動處理并提交給物理設備。以Xen虛擬化為例,Xen采用了分離設備驅動模型來實現1/0的虛擬化。該模型中設備驅動包括前端驅動程序、后端驅動程序,其中前端驅動在用戶域(Guest Domain)虛擬機中運行,這里的Guest Domain虛擬機可以理解為普通的虛擬機,也可以稱作Domain U,而后端驅動在管理域虛擬機DomainO中運行。前端驅動負責將用戶域操作系統(Guest Operating SystemJI^lGuest OS)的1/0請求傳遞到DomainO中的后端驅動,并接受來自后端驅動的處理結果返回給Guest Domain。后端驅動對1/0請求解析并映射到物理設備,提交給相應的設備驅動程序控制硬件完成1/0操作,從而完成GuestDomain的1/0操作,隨后把處理結果返回。
[0004]現有技術中,后端驅動對虛擬機的1/0請求的處理是基于慢速存儲介質設計的,I/O處理能力取決于中央處理器(Central Processing Unit,簡稱CPU)核(core)的處理能力,在高速存儲介質,如固態磁盤(Solid State Disk,簡稱SSD)和內存盤(RamDisk)等開始在虛擬化場景中大量應用的情況下,這種處理方式逐漸成為虛擬化的1/0處理速度的瓶頸,從而在虛擬化場景下無法發揮出高速存儲應有的效果,1/0處理速度無法有效提升。所以,需要開發新的技術,來解決這一問題。
【發明內容】
[0005]有鑒于此,本發明實施例提供了一種I/O任務處理的方法、設備和系統,以實現并行處理I/O操作的功能。
[0006]第一方面,本發明實施例提供了一種I/O任務處理方法,
[0007]所述1任務處理方法應用于虛擬化系統,所述虛擬化系統包括管理域虛擬機和用戶域虛擬機,包括:
[0008]接收所述用戶域虛擬機對所述用戶域虛擬機的存儲設備進行I/O操作的I/O請求;
[0009]根據所述I/O請求,確定所述I/O請求要操作的存儲設備區域,其中,所述存儲設備分為N個存儲設備區域,N為大于I的自然數;
[0010]將所述I/O請求分發給所述I/O請求要操作的存儲設備區域對應的后端線程,其中,所述N個存儲設備區域與N個后端線程一一對應,所述N個后端線程由管理域虛擬機生成,并運行在所述管理域虛擬機中,每個后端線程用于處理對所述每個后端線程對應的存儲設備區域的I/O操作。
[0011]在第一方面第一種可能的實現方式中,所述將所述I/O請求分發給所述I/O請求要操作的存儲設備區域對應的后端線程,包括:
[0012]如果所述要操作的存儲設備區域為M個,1〈M〈= N,則根據所述M個存儲設備區域,將所述I/o請求拆分成M個子I/O請求,其中,每個所述子I/O請求用于請求對所述M個存儲設備區域中的一個存儲設備區域進行I/O操作,將每個所述子I/O請求分別發送給各自要操作的存儲設備區域對應的后端線程;
[0013]如果所述要操作的存儲設備區域為I個,則將所述I/O請求發送給所述I/O請求要操作的存儲設備區域對應的I個后端線程。
[0014]結合第一方面或以上任意一種可能的實現方式,在第一方面第二種可能的實現方式中,所述方法還包括:
[0015]如果所述要操作的存儲設備區域為M個,則接收所述M個存儲設備區域對應的后端線程返回的所述M個子I/O請求的處理結果,將所述M個子I/O請求的處理結果進行合并,并將所述合并后的處理結果返回給所述用戶域虛擬機;
[0016]如果所述要操作的存儲設備區域為I個,接收所述I/O請求要操作的存儲設備區域對應的后端線程返回的所述I/O請求的處理結果,并將所述I/O請求的處理結果返回給所述用戶域虛擬機。
[0017]結合第一方面或以上任意一種可能的實現方式,在第一方面第三種可能的實現方式中,所述根據所述I/o請求,確定所述I/O請求要操作的存儲設備區域包括:根據所述I/O請求中所述I /0請求要操作的所述存儲設備的初始存儲區域和存儲區域數量,確定所述I/O請求要操作的存儲設備區域。
[0018]結合第一方面或以上任意一種可能的實現方式,在第一方面第四種可能的實現方式中,所述接收用戶域虛擬機對所述存儲設備進行I/o操作的I/O請求,包括:
[0019]所述管理域虛擬機中的后端分發模塊通過至少一個1環接收所述用戶域虛擬機對所述存儲設備進行I/o操作的I/O請求。
[0020]結合第一方面或以上任意一種可能的實現方式,在第一方面第五種可能的實現方式中,所述接收用戶域虛擬機對所述存儲設備進行I/O操作的I/O請求,包括:
[0021]所述用戶域虛擬機中的前端分發模塊接收所述用戶域虛擬機中的上層應用對所述存儲設備進行I/o操作的I/O請求。
[0022]結合第一方面或以上任意一種可能的實現方式,在第一方面第六種可能的實現方式中,所述前端分發模塊與所述N個后端線程中的每一個后端線程之間有一個專用1環,所述前端分發模塊通過所述專用1環將所述I/O請求分發給所述I/O請求要操作的存儲設備區域對應的后端線程。
[0023]第二方面,本發明實施例提供了一種I/O任務處理設備,包括:處理器、存儲器、總線和通信接口;
[0024]所述存儲器用于存儲計算機執行指令,所述處理器與所述存儲器通過所述總線連接,當所述計算設備運行時,所述處理器執行所述存儲器存儲的所述計算機執行指令,以使所述I/O任務處理設備執行第一方面或第一方面任一種可能的實現方式的方法。
[0025]第三方面,本發明實施例提供了一種I/O任務處理方法,
[0026]所述1任務處理方法應用于虛擬化系統,所述虛擬化系統包括管理域虛擬機和用戶域虛擬機,包括:
[0027]接收所述用戶域虛擬機對所述用戶域虛擬機的存儲設備進行I/O操作的I/O請求;
[0028]根據所述I/O請求,確定所述I/O請求要操作的存儲設備地址空間;
[0029]確定沒有后端線程占用所述存儲設備地址空間中的存儲單元時,將所述I/O請求分發給N個后端線程中的一個后端線程,其中,所述N個后端線程由管理域虛擬機生成,并運行在所述管理域虛擬機中,每個后端線程用于處理對所述存儲設備的I/O操作。
[0030]在第三方面第一種可能的實現方式中,所述確定沒有后端線程占用所述存儲設備地址空間的存儲單元時,將所述I/O請求分發給所述N個后端線程中的一個后端線程,包括:判斷是否有后端線程正在占用所述存儲設備地址空間中的存儲單元,若沒有后端線程正在占用所述存儲設備地址空間中的存儲單元,則將所述I/O請求分發給所述N個后端線程中的一個后端線程,若有后端線程正在占用所述存儲設備地址空間中的存儲單元時,確定所述占用結束后,將所述I/O請求分發給所述N個后端線程中的一個后端線程。
[0031]結合第三方面或以上任意一種可能的實現方式,在第三方面第二種可能的實現方式中,若有后端線程正在占用所述存儲設備地址空間的存儲單元,則緩存所述I/o請求,并在確定所述占用結束后,將緩存的所述I/o請求從取出。
[0032]結合第三方面或以上任意一種可能的實現方式,在第三方面第三種可能的實現方式中,所述判斷是否有后端線程正在占用所述存儲設備地址空間的存儲單元包括:查看阻塞單元表中是否包含所述存儲設備地址空間內的存儲單元的單元標識。
[0033]結合第三方面或以上任意一種可能的實現方式,在第三方面第四種可能的實現方式中,所述方法還包括:將所述存儲設備地址空間內的存儲單元的單元標識記錄在所述阻塞單元表中;
[0034]并在接收到表示對所述I/O請求處理結束的響應消息后,將所述存儲設備地址空間內的存儲單元的單元標識從所述阻塞單元表中刪除。
[0035]結合第三方面或以上任意一種可能的實現方式,在第三方面第五種可能的實現方式中,所述將所述I/o請求分發給所述N個后端線程中的一個后端線程,包括:根據哈希負載均衡,為所述I/O請求在所述N個后端線程中分配一個后端線程,并將所述I/O請求發送給分配的所述一個后端線程。
[0036]結合第三方面或以上任意一種可能的實現方式,在第三方面第六種可能的實現方式中,所述根據所述I/o請求,確定所述I/O請求要操作的存儲設備地址空間,包括:根據所述I/O請求中的所述I/O請求要操作所述存儲設備的初始存儲區域和存儲區域數量,確定所述I/o請求要操作的存儲設備地址空間。
[0037]結合第三方面或以上任意一種可能的實現方式,在第三方面第七種可能的實現方式中,所述方法還包括:接收所述一個后端線程返回的所述I/o請求的處理結果,并將所述處理結果返回給所述用戶域虛擬機。
[0038]結合第三方面或以上任意一種可能的實現方式,在第三方面第八種可能的實現方式中,所述接收用戶域虛擬機對所述存儲設備進行I/o操作的I/O請求,包括:
[0039]所述管理域虛擬機中的后端分發模塊通過至少一個1環接收所述用戶域虛擬機對所述存儲設備進行I/o操作的I/O請求。
[0040]結合第三方面或以上任意一種可能的實現方式,在第三方面第九種可能的實現方式中,所述接收用戶域虛擬機對所述存儲設備進行I/o操作的I/O請求,包括:
[0041]所述用戶域虛擬機中的前端分發模塊接收所述用戶域虛擬機中的上層應用對所述存儲設備進行I/o操作的I/O請求。
[0042]結合第三方面或以上任意一種可能的實現方式,在第三方面第十種可能的實現方式中,所述前端分發模塊與所述N個后端線程中的每一個后端線程之間有一個專用1環,所述前端分發模塊通過所述專用1環將所述I/O請求分發給所述一個后端線程。
[0043]第四方面,本發明實施例提供了一種I/O任務處理設備,包括:處理器、存儲器、總線和通信接口;
[0044]所述存儲器用于存儲計算機執行指令,所述處理器與所述存儲器通過所述總線連接,當所述計算設備運行時,所述處理器執行所述存儲器存儲的所述計算機執行指令,以使所述I/O任務處理設備執行第三方面或第三方面任一種可能的實現方式的方法。
[0045]第五方面,本發明實施例提供了一種I/O任務處理設備,
[0046]所述1任務處理設備應用于虛擬化系統,所述虛擬化系統包括管理域虛擬機和用戶域虛擬機,其特征在于,包括:
[0047]接收單元,用于接收所述用戶域虛擬機對所述用戶域虛擬機的存儲設備進行I/O操作的I/O請求;
[0048]確定單元,用于根據所述I/O請求,確定所述I/O請求要操作的存儲設備區域,其中,所述存儲設備分為N個存儲設備區域,N為大于I的自然數;
[0049]分發單元,用于將所述I/O請求分發給所述I/O請求要操作的存儲設備區域對應的后端線程,其中,所述N個存儲設備區域與N個后端線程一一對應,所述N個后端線程由管理域虛擬機生成,并運行在所述管理域虛擬機中,每個后端線程用于處理對所述每個后端線程對應的存儲設備區域的I /0操作。
[0050]在第五方面第一種可能的實現方式中,所述分發單元用于將所述I/O請求分發給所述I/o請求要操作的存儲設備區域對應的后端線程,包括:
[0051]如果所述要操作的存儲設備區域為M個,1〈M〈= N,則所述分發單元用于根據所述M個存儲設備區域,將所述I/O請求拆分成M個子I/O請求,其中,每個所述子I/O請求用于請求對所述M個存儲設備區域中的一個存儲設備區域進行I/O操作,將每個所述子I/O請求分別發送給各自要操作的存儲設備區域對應的后端線程;
[0052]如果所述要操作的存儲設備區域為I個,則所述分發單元用于將所述I/O請求發送給所述I/O請求要操作的存儲設備區域對應的I個后端線程。
[0053]結合第五方面或以上任意一種可能的實現方式,在第五方面第二種可能的實現方式中,還包括發送單元:
[0054]如果所述要操作的存儲設備區域為M個,則所述接收單元還用于接收所述M個存儲設備區域對應的后端線程返回的所述M個子I/O請求的處理結果,并將所述M個子I/O請求的處理結果進行合并,所述發送單元用于將所述合并后的處理結果返回給所述用戶域虛擬機;
[0055]如果所述要操作的存儲設備區域為I個,所述接收單元還用于接收所述I/O請求要操作的存儲設備區域對應的后端線程返回的所述I/o請求的處理結果,所述發送單元用于將所述所述I/o請求的處理結果返回給所述用戶域虛擬機。
[0056]結合第五方面或以上任意一種可能的實現方式,在第五方面第三種可能的實現方式中,所述確定單元用于根據所述I/o請求,確定所述I/O請求要操作的存儲設備區域,包括:所述確定單元用于根據所述I/o請求中所述I/O請求要操作的所述存儲設備的初始存儲區域和存儲區域數量,確定所述I/o請求要操作的存儲設備區域。
[0057]結合第五方面或以上任意一種可能的實現方式,在第五方面第四種可能的實現方式中,所述設備為所述管理域虛擬機中的后端分發模塊,所述接收單元用于通過至少一個1環接收所述用戶域虛擬機對所述存儲設備進行I/O操作的I/O請求。
[0058]結合第五方面或以上任意一種可能的實現方式,在第五方面第五種可能的實現方式中,所述設備為所述用戶域虛擬機中的前端分發模塊,所述接收單元用于接收所述用戶域虛擬機中的上層應用對所述存儲設備進行I/O操作的I/O請求。
[0059]結合第五方面或以上任意一種可能的實現方式,在第五方面第六種可能的實現方式中,所述分發單元與所述N個后端線程中的每一個后端線程之間有一個專用1環,所述分發單元用于通過所述專用1環將所述I/O請求分發給所述