本發(fā)明涉及一種基于KVM(Kernel-base Virtual Machine)的FPGA加速器虛擬化系統(tǒng),尤其是涉及一種基于KVM的加速器虛擬化數(shù)據(jù)處理系統(tǒng)及方法。
背景技術(shù):
隨著技術(shù)的不斷發(fā)展,雖然軟件運行速度不斷提升,但是與用硬件直接實現(xiàn)其功能相比,在處理復(fù)雜度高、運算密集型算法時,軟件遠遠比不上硬件的處理速度。
目前一些無線通信里的功能模塊如Turbo譯碼、FFT等,算法時間復(fù)雜度很高,計算量大,導(dǎo)致響應(yīng)時間較長,使用硬件加速器替代運算密集型的軟件代碼,直接在硬件設(shè)備上進行Turbo譯碼、FFT等處理,可以有效提高處理速度,縮短響應(yīng)時間。
已有研究采用靈活的FPGA來實現(xiàn)復(fù)雜算法功能的加速,但是硬件設(shè)備一般比較昂貴,每臺主機獨占一塊設(shè)備,不但成本高,而且導(dǎo)致設(shè)備利用率低,資源浪費嚴重。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種設(shè)備利用率高的基于KVM的加速器虛擬化數(shù)據(jù)處理系統(tǒng)及方法。
本發(fā)明的目的可以通過以下技術(shù)方案來實現(xiàn):
一種基于KVM的加速器虛擬化數(shù)據(jù)處理系統(tǒng),包括多個服務(wù)器,各服務(wù)器的主機中插有零到多個FPGA硬件加速器,各主機使用KVM技術(shù)創(chuàng)建多臺虛擬機,所有的主機通過網(wǎng)絡(luò)形成一個集群,并共同維系一張包含所有服務(wù)器(加速器)負載情況的負載表,當主機接收到虛擬機發(fā)送的數(shù)據(jù)請求后,查詢本機及遠端主機的負載情況,選擇相應(yīng)地區(qū)(本機或遠端主機)的FPGA硬件加速器進行數(shù)據(jù)處理,使數(shù)據(jù)處理時間最小。
各主機通過網(wǎng)絡(luò)連接到infiniband交換機,形成一個集群。
一種使用所述的調(diào)度系統(tǒng)進行數(shù)據(jù)處理的方法,包括以下步驟:
S1,虛擬機向主機發(fā)送數(shù)據(jù)請求;
S2,主機接收數(shù)據(jù)請求,將其加入本地隊列,然后檢查本地硬件加速器是否空閑,若是,則進入步驟S4,否則進入步驟S3;
S3,計算本地處理請求所需的時間以及通過遠端主機處理請求所需的最小時間,若前者小于后者,則進入步驟S4,否則進入步驟S5;所述的通過遠端主機處理請求所需的最小時間為比較各遠端主機處理請求所需時間得到的結(jié)果;
S4,數(shù)據(jù)請求從本地隊列轉(zhuǎn)移至本地硬件加速器的隊列進行處理,處理完畢后,本地硬件加速器響應(yīng)虛擬機;
S5,數(shù)據(jù)請求從本地隊列轉(zhuǎn)移至位于本地的遠端隊列,等待對應(yīng)遠端主機的硬件加速器進行數(shù)據(jù)處理,處理完畢后,遠端主機的硬件加速器響應(yīng)虛擬機。
所述的步驟S3中,通過遠端主機處理請求所需的時間根據(jù)負載表計算,所述的負載表由各主機定期通過廣播更新。
所述的步驟S3中,通過遠端主機處理請求所需的時間為:遠端主機處理數(shù)據(jù)時間+數(shù)據(jù)來回傳輸時間。
當主機未連接FPGA硬件加速器時,該主機的負載為無窮大。
本發(fā)明實現(xiàn)FPGA加速器的虛擬化集群調(diào)度系統(tǒng),主要將FPGA加速技術(shù)、I/O設(shè)備虛擬化技術(shù)和集群調(diào)度技術(shù)相結(jié)合,實現(xiàn)完備的調(diào)度算法,使集群中所有虛擬機可以共享FPGA加速器,且均衡服務(wù)器的負載,增大系統(tǒng)吞吐量。
實現(xiàn)了KVM的加速器虛擬化調(diào)度系統(tǒng)FPGA加速器的設(shè)計,總框架如圖1所示,將運算復(fù)雜度高的軟件代碼用FPGA代替,在FPGA上實現(xiàn)加速功能;使用KVM技術(shù)將FPGA進行虛擬化;不同服務(wù)器通過網(wǎng)絡(luò)通信,訪問負載小的服務(wù)器上的FPGA。
采用KVM的virtio-serial技術(shù),在虛擬機端(guest)中創(chuàng)建前端字符設(shè)備,在主機端(host)中創(chuàng)建后端驅(qū)動??傮w流程如下,虛擬機端前端驅(qū)動向主機端后端設(shè)備發(fā)送設(shè)備訪問請求;各個主機通過詢問其他主機的負載情況,綜合本地和遠端主機的負載情況,選擇相應(yīng)地區(qū)的硬件加速器。如果是本地主機,則將請求放入native_queue任務(wù)隊列,直接調(diào)用本地實際的FPGA設(shè)備驅(qū)動,完成請求;否則將請求添加到remote_queue任務(wù)隊列,通過網(wǎng)絡(luò)訪問目標服務(wù)器的設(shè)備;最后將響應(yīng)返回到相應(yīng)的虛擬機中。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:
(1)本發(fā)明實現(xiàn)了基于KVM的加速器虛擬化數(shù)據(jù)處理系統(tǒng),采用虛擬化技術(shù),對I/O設(shè)備進行虛擬化,使多臺虛擬機共用一塊FPGA,解決設(shè)備利用率低的問題;采用網(wǎng)絡(luò)通信技術(shù)和負載均衡的調(diào)度實現(xiàn)不同主機的數(shù)據(jù)通信,使集群中所有的虛擬機共享同一塊設(shè)備,降低設(shè)備成本,同時又保持著極高的運算效率。
(2)各主機通過網(wǎng)絡(luò)連接到infiniband交換機,infiniband交換機延時短,有利于提高數(shù)據(jù)處理效率,達到加速的目的。
(3)主機利用集群網(wǎng)絡(luò)定期更新負載表,使數(shù)據(jù)處理所需時間計算準確,避免資源分配不均衡。
(4)采用隊列機制,有利于準確計算數(shù)據(jù)處理時間。
(5)考慮遠端主機與本地主機之間數(shù)據(jù)傳輸?shù)难訒r,提高時間計算真實度。
附圖說明
圖1為本實施例的系統(tǒng)整體結(jié)構(gòu)示意圖;
圖2為虛擬機和主機建立連接,實現(xiàn)數(shù)據(jù)傳輸以及調(diào)度的過程圖;
圖3為本實施例數(shù)據(jù)處理過程的流程圖。
具體實施方式
下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細說明。本實施例以本發(fā)明技術(shù)方案為前提進行實施,給出了詳細的實施方式和具體的操作過程,但本發(fā)明的保護范圍不限于下述的實施例。
實施例
本實施例將基于FPGA的加速器、KVM的設(shè)備虛擬化和集群計算資源調(diào)度三部分結(jié)合起來,采用合適的調(diào)度算法,實現(xiàn)硬件加速器虛擬化,為虛擬機提供同實體機一般的加速器設(shè)備。主要包括:
(1)基于FPGA的加速器:目的是用硬件設(shè)備FPGA來實現(xiàn)運算量大、時間復(fù)雜度高的軟件代碼,提高運算速度,實現(xiàn)加速功能;
(2)KVM的設(shè)備虛擬化:使用KVM中virtio-serial技術(shù),通過建立虛擬機和主機前后端的交流通道,在虛擬機中創(chuàng)建虛擬的加速器設(shè)備,該虛擬的加速設(shè)備連接實體的硬件加速器,虛擬機對它的使用操作相當于對映射實體硬件加速器的操作,從而使得一塊加速器能被所有虛擬機共享。
(3)集群計算資源調(diào)度:為了共享多塊加速器,使每個虛擬機都能使用到加速器的計算資源,在主機端需要對虛擬機發(fā)來的計算請求進行調(diào)度。采用雙向隊列和infiniband設(shè)備來完成加速器計算資源的分配。
(4)對訪問設(shè)備操作的處理機制:在虛擬機中,虛擬的加速器是一個普通的I/O設(shè)備,應(yīng)用程序使用它就像對普通文件操作一樣,直接讀寫,寫設(shè)備即送數(shù)據(jù)進行加速處理,讀設(shè)備即取出處理好的數(shù)據(jù)。而在主機端是接受數(shù)據(jù)處理請求,通過調(diào)度算法后,將數(shù)據(jù)送入真實的加速器。
基于FPGA的加速器可以是Turbo譯碼、FFT、MIMO等時間復(fù)雜度高的算法,亦不限于以上功能的其他運算量大的算法。
KVM的virtio-serial設(shè)備虛擬化,主要特征在于:
(1)使用xml配置,在虛擬機和主機之間生成前后端設(shè)備,使用unix domain socket進行通信。在虛擬機中,前端設(shè)備是一個普通的I/O設(shè)備。在主機中的,后端設(shè)備是一個socket文件,調(diào)度系統(tǒng)監(jiān)控該文件,當前端設(shè)備傳輸數(shù)據(jù)過來時,調(diào)度系統(tǒng)將數(shù)據(jù)打包處理
(2)在主機端有全局的本地隊列(local_queue)、每個加速器對應(yīng)的接受隊列(receive_queue)和準備隊列(ready_queue),以及遠端隊列。全局本地隊列主要作用為將虛擬機的數(shù)據(jù)處理請求排隊,并且打上對應(yīng)的虛擬機的標簽。加速器的兩個隊列中,接受隊列作用是從本地隊列取出數(shù)據(jù)包送入加速器,準備隊列是將從加速器中取出數(shù)據(jù)送到對應(yīng)的虛擬機中。遠端隊列主要為了將數(shù)據(jù)送到其他的含有空閑加速器的主機。
其中,對訪問設(shè)備操作的請求處理,主要特征在于:
(1)對于虛擬機送來的請求,主機首先判斷本地加速資源是否足夠,如果資源緊張,則將請求添加到遠端隊列由網(wǎng)絡(luò)發(fā)送到空閑服務(wù)器;否則將請求添加到本地隊列,并調(diào)用實際驅(qū)動完成加速功能;以此達到計算資源負載均衡。
(2)設(shè)備處理完請求后,將判斷該數(shù)據(jù)屬于哪個虛擬機,若是本機的則直接加入ready_queue,否則送入遠端隊列,進行網(wǎng)絡(luò)傳輸,送到相應(yīng)的主機,最終送到相應(yīng)的虛擬機。
技術(shù)方案如下:
1.用FPGA硬件實現(xiàn)運算密集型的軟件代碼,提高運算速度,實現(xiàn)加速功能,具體步驟如下:
(1)用Xilinux軟件實現(xiàn)Turbo譯碼、FFT等復(fù)雜算法;
(2)仿真成功后,將程序下載到FPGA設(shè)備,實現(xiàn)加速功能。
2.通過KVM的virtio機制,建立主機和虛擬機的交流通道,實現(xiàn)I/O設(shè)備的虛擬化。通過lib-virt來配置虛擬機,通過添加virtio-serial通道,在主機端形成一個socket file,我們通過對該文件的操作就是對虛擬機進行響應(yīng)。在虛擬機端是它將會生成一個特殊的字符設(shè)備,它提供兩個接口,讀和寫,用戶程序只要簡單的將數(shù)據(jù)送到這個設(shè)備就能完成相應(yīng)的數(shù)據(jù)處理
3.對請求的管理和對FPGA設(shè)備的調(diào)度,結(jié)構(gòu)如圖2所示,具體步驟如下:
(1).在主機端設(shè)計有三個隊列,native_queue,remote_queue,每個硬件加速器對應(yīng)一對send_queue,ready_queue;
(2).當主機端接受了虛擬機端的數(shù)據(jù)處理請求,接著將它加入native_queue隊列中,再接著我們衡量本地和遠端主機的計算資源。首先通過檢查硬件加速器的隊列長度來判斷它們是否空閑,如果本地的硬件加速器空閑,則將數(shù)據(jù)請求從native_queue中出隊列并把它送入相應(yīng)的硬件加速器隊列,如果本地資源繁忙則通過判斷原則之后送入遠端隊列。而對于遠端隊列,只有在遠端主機本身資源空閑之后,才能將其送入加速器中處理。
而判斷原則是就是估計送入遠端隊列之后獲得結(jié)果的時延要小于本地等待處理的時延。送入遠端主機處理時延計算T1如下:
T1=T送到遠端時間*2+T遠端主機處理時間
其中送到遠端的時間和遠端主機處理時間都是由一個負載表進行記錄的,由相應(yīng)的遠端主機更新。
而本地處理時延則是通過計算每個數(shù)據(jù)請求大小,求得硬件加速器的響應(yīng)時間,接著全部加起來,便是本地處理時延。
下面詳細說明本發(fā)明的實現(xiàn)過程:
一,設(shè)計基于FPGA的硬件加速器,用Xilinx完成Turbo譯碼模塊、FFT模塊或MIMO等模塊的算法實現(xiàn),然后下載到FPGA,讓FPGA實現(xiàn)加速功能。將設(shè)備插入到主機,主機調(diào)用設(shè)備的驅(qū)動完成加速操作。
二,所有主機通過網(wǎng)絡(luò)連接到交換機,形成集群系統(tǒng)。為了縮短時延,可以選擇infiniband交換機。
三,下載支持KVM的linux內(nèi)核,安裝KVM,lib-virt,virt-manager,使用半虛擬化技術(shù)的分離設(shè)備驅(qū)動模型虛擬化FPGA,使本機的虛擬機共享設(shè)備;根據(jù)集群通信協(xié)議和網(wǎng)絡(luò),選擇并訪問其他服務(wù)器的設(shè)備,使集群中所有虛擬機可以共享設(shè)備。設(shè)備實際驅(qū)動以塊為單位和設(shè)備之間傳輸數(shù)據(jù),本例選用4k塊大小。具體步驟如下:
1.使用lib-virt來定義和創(chuàng)建虛擬機,virtio-serial生成前后端設(shè)備。
11.主機端編寫后端驅(qū)動,獲得虛擬機的數(shù)據(jù)處理請求,以及生成線程池,建立起對每個硬件加速器的調(diào)度規(guī)則。
12.主機端在用戶態(tài)與多個虛擬機相連,且通過網(wǎng)絡(luò)與集群中其他主機相連,管理數(shù)據(jù)處理請求和真實設(shè)備的操作。
121.主機間通過集群通信協(xié)議,建立負載表,間隔固定時間更新集群系統(tǒng)內(nèi)服務(wù)器的負載值。如果沒有硬件加速設(shè)備則負載值為無窮大且不廣播自己的負載值。
122.主機處理虛擬機發(fā)來的請求,查找負載表,將其放入相應(yīng)的隊列,本機負載過大,則發(fā)送給其他服務(wù)器處理;否則在本機處理。
123.主機處理來自其他主機的請求,視本地情況將其添加到native_queue。
124.主機調(diào)用真實驅(qū)動使用設(shè)備,對數(shù)據(jù)處理完成后,將響應(yīng)返回給虛擬機或是通過網(wǎng)路發(fā)送到其所屬的服務(wù)器。
2.虛擬機在用戶程序?qū)τ布铀僭O(shè)備進行操作。打開硬件加速設(shè)備,向硬件加速設(shè)備寫入數(shù)據(jù),硬件加速設(shè)備完成數(shù)據(jù)處理后,用戶再讀取數(shù)據(jù),最后關(guān)閉硬件加速設(shè)備。FPGA硬件加速器的虛擬化對用戶是透明的。