本發(fā)明涉及虛擬化
技術(shù)領(lǐng)域:
:,更具體的說,是涉及一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法及虛擬化平臺(tái)。
背景技術(shù):
::隨著虛擬化技術(shù)的不斷發(fā)展,利用虛擬化平臺(tái)實(shí)現(xiàn)共享顯卡虛擬化的技術(shù)也越來越成熟。現(xiàn)有技術(shù)中,實(shí)現(xiàn)共享顯卡虛擬化的方式主要分為兩種,一種是硬件實(shí)現(xiàn)的方式,另一種是軟件的方式實(shí)現(xiàn)。其中,硬件的實(shí)現(xiàn)方式通常需要顯卡廠商來提供支持,在顯卡的硬件上進(jìn)行改動(dòng),來實(shí)現(xiàn)共享顯卡虛擬化。但是,此種實(shí)現(xiàn)方式成本較高。軟件的實(shí)現(xiàn)方式通常包括前端、后端以及傳輸通信層,虛擬機(jī)一端稱為前端需要負(fù)責(zé)接收、打包應(yīng)用程序下發(fā)的api調(diào)用數(shù)據(jù)包,并通過傳輸通信層發(fā)送到后端。傳輸通信層主要負(fù)責(zé)提供前段和后端的通信傳輸。在具有物理顯卡的一端稱為后端,主要負(fù)責(zé)解析傳輸通信層發(fā)送的數(shù)據(jù)包,并調(diào)用前端api。傳輸通信層主要采用遠(yuǎn)程調(diào)用形式完成前端和后端的通信。遠(yuǎn)程調(diào)用形式主要包括網(wǎng)絡(luò)通信以及共享內(nèi)存兩種。網(wǎng)絡(luò)通信采用tcp/ip協(xié)議等方式,共享內(nèi)存采用如virtio等半虛擬化方式完成。相對(duì)于硬件的實(shí)現(xiàn)方式,軟件的實(shí)現(xiàn)方式成本較低,容易被用戶所接受。但是,在軟件的實(shí)現(xiàn)方式中,由于前端打包的api調(diào)用數(shù)據(jù)包占用的空間大且次數(shù)多,在傳輸過程中每秒都會(huì)有幾百m甚至上g的數(shù)據(jù)需要傳輸,因此,對(duì)前端和后端的性能均會(huì)造成很大影響。技術(shù)實(shí)現(xiàn)要素:有鑒于此,本發(fā)明提供了一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法及系統(tǒng),來解決上述技術(shù)問題。本發(fā)明提供了一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法,應(yīng)用于虛擬化平臺(tái),包括:前端接收到應(yīng)用程序調(diào)用后端目標(biāo)函數(shù)的請(qǐng)求時(shí),確定所述目標(biāo)函數(shù)的相關(guān)參數(shù)在前端的內(nèi)存地址,并根據(jù)預(yù)先建立的前端內(nèi)存頁表,查找所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,確定與所述后端內(nèi)存地址對(duì)應(yīng)的指針數(shù)據(jù),生成包含有所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)調(diào)用指令的消息,所述前端內(nèi)存頁表中包含有所述應(yīng)用程序?qū)?yīng)的前端內(nèi)存地址與后端內(nèi)存地址的對(duì)應(yīng)關(guān)系;后端獲取所述消息,確定所述指針數(shù)據(jù)及所述目標(biāo)函數(shù);所述后端查找預(yù)先建立的后端內(nèi)存頁表中與所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,并依據(jù)所述指針數(shù)據(jù)在該后端內(nèi)存地址中獲取所述目標(biāo)函數(shù)的相關(guān)參數(shù),所述后端內(nèi)存頁表的內(nèi)容與前端內(nèi)存頁表的內(nèi)容相同;所述后端依據(jù)所述相關(guān)參數(shù),運(yùn)行所述目標(biāo)函數(shù)。優(yōu)選的,所述預(yù)先建立的后端內(nèi)存頁表是通過下列方法建立的:當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí),發(fā)送用于表征所述應(yīng)用程序啟動(dòng)的啟動(dòng)指令到后端的內(nèi)存頁表管理器;所述內(nèi)存頁表管理器根據(jù)所述啟動(dòng)指令建立后端內(nèi)存頁表,并在共享內(nèi)存中建立所述應(yīng)用程序的內(nèi)存映射;所述共享內(nèi)存為前端和后端均可以訪問的內(nèi)存地址空間。優(yōu)選的,當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí)還包括:所述前端暫停所述應(yīng)用程序的啟動(dòng);所述內(nèi)存頁表管理器若成功建立所述應(yīng)用程序的內(nèi)存映射,則向所述共享內(nèi)存中后端讀取的地址空間存放建立成功的標(biāo)識(shí);當(dāng)所述前端讀取到所述標(biāo)識(shí)時(shí),控制所述應(yīng)用程序繼續(xù)運(yùn)行。優(yōu)選的,所述后端獲取所述消息,確定所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)包括:所述后端讀取所述共享內(nèi)存中由所述前端生成并放入所述共享內(nèi)存中的消息;解析所述消息得到目標(biāo)函數(shù)的調(diào)用指令以及目標(biāo)函數(shù)參數(shù)的指針數(shù)據(jù);根據(jù)所述調(diào)用指令確定目標(biāo)函數(shù)。優(yōu)選的,還包括:所述后端的頁表管理器捕獲到所述前端內(nèi)存頁表發(fā)生故障時(shí),將所述后端內(nèi)存頁表更新與所述前端內(nèi)存頁表相一致。本發(fā)明另一方面提供了一種共享顯卡的虛擬化平臺(tái),包括前端和后端;所述前端用于接收到應(yīng)用程序調(diào)用后端目標(biāo)函數(shù)的請(qǐng)求時(shí),確定所述目標(biāo)函數(shù)的相關(guān)參數(shù)在前端的內(nèi)存地址,并根據(jù)預(yù)先建立的前端內(nèi)存頁表,查找所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,確定與所述后端內(nèi)存地址對(duì)應(yīng)的指針數(shù)據(jù),生成包含有所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)調(diào)用指令的消息,所述前端內(nèi)存頁表中包含有所述應(yīng)用程序?qū)?yīng)的前端內(nèi)存地址與后端內(nèi)存地址的對(duì)應(yīng)關(guān)系;所述后端用于獲取所述消息,確定所述指針數(shù)據(jù)及所述目標(biāo)函數(shù);查找預(yù)先建立的后端內(nèi)存頁表中與所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,并依據(jù)所述指針數(shù)據(jù)在該后端內(nèi)存地址中獲取所述目標(biāo)函數(shù)的相關(guān)參數(shù),所述后端內(nèi)存頁表的內(nèi)容與前端內(nèi)存頁表的內(nèi)容相同;依據(jù)所述相關(guān)參數(shù),運(yùn)行所述目標(biāo)函數(shù)。優(yōu)選的,所述預(yù)先建立的后端內(nèi)存頁表是通過下列方法建立的:當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí),發(fā)送用于表征所述應(yīng)用程序啟動(dòng)的啟動(dòng)指令到后端的內(nèi)存頁表管理器;所述內(nèi)存頁表管理器根據(jù)所述啟動(dòng)指令建立后端內(nèi)存頁表,并在共享內(nèi)存中建立所述應(yīng)用程序的內(nèi)存映射;所述共享內(nèi)存為前端和后端均可以訪問的內(nèi)存地址空間。優(yōu)選的,當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí)還包括:所述前端還用于暫停所述應(yīng)用程序的啟動(dòng);所述內(nèi)存頁表管理器若成功建立所述應(yīng)用程序的內(nèi)存映射,則向所述共享內(nèi)存中后端讀取的地址空間存放建立成功的標(biāo)識(shí);當(dāng)所述前端讀取到所述標(biāo)識(shí)時(shí),控制所述應(yīng)用程序繼續(xù)運(yùn)行。優(yōu)選的,所述后端獲取所述消息,確定所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)包括:所述后端讀取所述共享內(nèi)存中由所述前端生成并放入所述共享內(nèi)存中的消息;解析所述消息得到目標(biāo)函數(shù)的調(diào)用指令以及目標(biāo)函數(shù)參數(shù)的指針數(shù)據(jù);根據(jù)所述調(diào)用指令確定目標(biāo)函數(shù)。優(yōu)選的,還包括后端的頁表管理器:所述后端的頁表管理器用于捕獲到所述前端內(nèi)存頁表發(fā)生故障時(shí),將所述后端內(nèi)存頁表更新與所述前端內(nèi)存頁表相一致。經(jīng)由上述的技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明公開了一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法和虛擬化平臺(tái),所述調(diào)用方法應(yīng)用于虛擬化平臺(tái),包括:前端接收到應(yīng)用程序調(diào)用后端目標(biāo)函數(shù)的請(qǐng)求時(shí),確定所述目標(biāo)函數(shù)的相關(guān)參數(shù)在前端的內(nèi)存地址,并根據(jù)預(yù)先建立的前端內(nèi)存頁表,查找所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,確定與所述后端內(nèi)存地址對(duì)應(yīng)的指針數(shù)據(jù),生成包含有所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)調(diào)用指令的消息,所述前端內(nèi)存頁表中包含有所述應(yīng)用程序?qū)?yīng)的前端內(nèi)存地址與后端內(nèi)存地址的對(duì)應(yīng)關(guān)系;后端獲取所述消息,確定所述指針數(shù)據(jù)及所述目標(biāo)函數(shù);所述后端查找預(yù)先建立的后端內(nèi)存頁表中與所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,并依據(jù)所述指針數(shù)據(jù)在該后端內(nèi)存地址中獲取所述目標(biāo)函數(shù)的相關(guān)參數(shù),所述后端內(nèi)存頁表的內(nèi)容與前端內(nèi)存頁表的內(nèi)容相同;依據(jù)所述相關(guān)參數(shù),運(yùn)行所述目標(biāo)函數(shù)。由于本發(fā)明中在后端重建了與前端相一致的內(nèi)存頁表,因此,在前端調(diào)用后端函數(shù)時(shí),前端僅需要將函數(shù)參數(shù)打包為指針數(shù)據(jù),后端通過指針數(shù)據(jù),直接讀取相應(yīng)位置的函數(shù)參數(shù),無需傳輸原函數(shù)的相關(guān)參數(shù),大大減小了在傳輸過程中的數(shù)據(jù)量,提高了內(nèi)存調(diào)用效率,進(jìn)而提高了前端和后端的性能。附圖說明為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。圖1是本發(fā)明提供的一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法的流程示意圖;圖2是本發(fā)明實(shí)施例中預(yù)先建立后端內(nèi)存頁表的流程示意圖;圖3是本發(fā)明提供的一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法的另一種流程示意圖;圖4是本發(fā)明提供的一種共享顯卡的虛擬化平臺(tái)的結(jié)構(gòu)示意圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。下面對(duì)發(fā)明中的專業(yè)術(shù)語進(jìn)行一下解釋,以便于更好的理解技術(shù)方案。虛擬化平臺(tái):virtualmachineplatform(vmp),指通過虛擬化技術(shù)將一臺(tái)計(jì)算機(jī)虛擬為多臺(tái)邏輯計(jì)算機(jī)的軟件。通過虛擬化平臺(tái),可以在一臺(tái)計(jì)算機(jī)上同時(shí)運(yùn)行多個(gè)邏輯計(jì)算機(jī),每個(gè)邏輯計(jì)算機(jī)可運(yùn)行不同的操作系統(tǒng),并且應(yīng)用程序都可以在相互獨(dú)立的空間內(nèi)運(yùn)行而互不影響,從而顯著提高計(jì)算機(jī)的工作效率。虛擬機(jī):virtualmachine(vm)。指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。vm需要運(yùn)行在虛擬化平臺(tái)上。也可稱為guest。宿主機(jī):host。是相對(duì)給定的虛擬機(jī)而言的,指該虛擬機(jī)(vm)所運(yùn)行的虛擬化平臺(tái)主機(jī)。宿主機(jī)向自身所運(yùn)行的vm提供計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等軟硬件資源。顯卡虛擬化:指通過相應(yīng)的技術(shù),將一張顯卡提供給多個(gè)虛擬機(jī)(vm)使用的方案。該技術(shù)分為通過硬件和軟件實(shí)現(xiàn)兩種方式,其中,硬件實(shí)現(xiàn)的顯卡虛擬化通常需要顯卡廠商的技術(shù)支持。虛擬機(jī)監(jiān)視器:(virtualmachinemonitor,vmm):指虛擬化平臺(tái)中,負(fù)責(zé)向vm提供、劃分、管理硬件資源的重要組件。本發(fā)明的核心思想是通過將前端應(yīng)用程序的內(nèi)存頁表在后端進(jìn)行重建,實(shí)現(xiàn)前端vm內(nèi)的應(yīng)用程序和后端的內(nèi)存同布局映射,在調(diào)用發(fā)生時(shí),僅需向后端傳輸內(nèi)存指針數(shù)據(jù)即可,從而避免大量的內(nèi)存拷貝。下面對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)介紹。參見圖1,圖1是本發(fā)明提供的一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法的流程示意圖。本發(fā)明提供的一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法,應(yīng)用于虛擬化平臺(tái),包括:s101、前端接收到應(yīng)用程序調(diào)用后端目標(biāo)函數(shù)的請(qǐng)求時(shí),確定所述目標(biāo)函數(shù)的相關(guān)參數(shù)在前端的內(nèi)存地址,并根據(jù)預(yù)先建立的前端內(nèi)存頁表,查找所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,確定與所述后端內(nèi)存地址對(duì)應(yīng)的指針數(shù)據(jù),生成包含有所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)調(diào)用指令的消息,所述前端內(nèi)存頁表中包含有所述應(yīng)用程序?qū)?yīng)的前端內(nèi)存地址與后端內(nèi)存地址的對(duì)應(yīng)關(guān)系;本發(fā)明實(shí)施例中,應(yīng)用程序優(yōu)選是指定的3d應(yīng)用程序,由于只有指定的3d應(yīng)用程序在傳輸過程中所占用的數(shù)據(jù)量較大,因此,對(duì)指定3d應(yīng)用程序在調(diào)用內(nèi)存的過程中進(jìn)行優(yōu)化,提高的性能最為明顯。指定的3d應(yīng)用程序可以根據(jù)需求提前進(jìn)行設(shè)定。本發(fā)明實(shí)施例中,調(diào)用后端目標(biāo)函數(shù)會(huì)攜帶相關(guān)參數(shù),例如圖元、紋理等,而這些參數(shù)通常都會(huì)占用較大的內(nèi)存空間,這些參數(shù)通常保存在前端的內(nèi)存地址空間中。本發(fā)明實(shí)施例中首先確定相關(guān)參數(shù)在前端的內(nèi)存地址。根據(jù)預(yù)先建立的前端內(nèi)存頁表,查找與該內(nèi)存地址對(duì)應(yīng)的后端內(nèi)存地址,得到指針數(shù)據(jù)。指針數(shù)據(jù)通常包括有偏移量和大小,如0x0000,100m。本發(fā)明中前端內(nèi)存頁表中包含有所述應(yīng)用程序?qū)?yīng)的前端內(nèi)存地址與后端內(nèi)存地址的對(duì)應(yīng)關(guān)系。前端內(nèi)存頁表優(yōu)選采用影子頁表。影子頁表是現(xiàn)有技術(shù)中常用的一種軟件實(shí)現(xiàn)內(nèi)存地址轉(zhuǎn)譯的方式。其通常包括從gva(guestvirtualaddress)到gpa(guestphysicaladdress),gpa到hva(hostvirtualaddress),hva到hpa(hostphysicaladdress)。其中,gva是虛擬機(jī)內(nèi)的虛擬地址,每個(gè)進(jìn)程都有獨(dú)立的線性虛擬地址空間(如32位為0-4g);gpa是虛擬機(jī)內(nèi)的線性物理地址,整個(gè)虛擬機(jī)具有一個(gè)線性地址空間(如4g內(nèi)存0-4g);hva是宿主機(jī)上的虛擬地址;hpa是宿主機(jī)上的物理地址。實(shí)現(xiàn)了由虛擬機(jī)的虛擬地址到宿主機(jī)的物理地址的轉(zhuǎn)換。本發(fā)明實(shí)施例中,將得到的指針數(shù)據(jù)以及目標(biāo)函數(shù)調(diào)用指令進(jìn)行打包,得到包含有所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)調(diào)用指令的消息,存放到共享內(nèi)存中。其中,共享內(nèi)存是通過現(xiàn)有技術(shù)中ept技術(shù)所實(shí)現(xiàn)的。ept即intelextendpagetable英特爾擴(kuò)展頁表。其可以提供共享內(nèi)存,共享內(nèi)存中至少包括兩個(gè)部分,一個(gè)部分是前端可以寫入由后端讀取的地址空間,另一個(gè)部分是由后端寫入由前端讀取的地址空間。共享內(nèi)存在vm開機(jī)時(shí)已經(jīng)初始化完成。本發(fā)明實(shí)施例中,將消息存放在共享內(nèi)存中由后端讀取的位置。在實(shí)際使用中,vm中設(shè)置了特定的插件,使得指定的3d應(yīng)用程序在運(yùn)行時(shí),不加載原有的插件,而加載本發(fā)明中所特定的插件,在指定的3d應(yīng)用程序調(diào)用原有的api如opgl的api函數(shù)時(shí),先調(diào)用特定的插件所指定的函數(shù)。特定的插件請(qǐng)求虛擬化平臺(tái)在共享內(nèi)存中分配指定大小的地址空間,分配完成后由指定的3d應(yīng)用程序發(fā)送調(diào)用api的請(qǐng)求。本發(fā)明實(shí)施例中,如果是指定的3d應(yīng)用程序,則使用本發(fā)明中的調(diào)用方法,否則,則使用現(xiàn)有技術(shù)中的virtio類半虛擬化方式完成。最大限度的提高數(shù)據(jù)的傳輸效率和性能。需要說明的是,如果是非3d應(yīng)用程序,則不使用本發(fā)明中的調(diào)用方法。s102、后端獲取所述消息,確定所述目標(biāo)函數(shù)的調(diào)用指令及所述指針數(shù)據(jù);具體包括,所述后端讀取所述共享內(nèi)存中由所述前端生成并放入所述共享內(nèi)存中的消息;解析所述消息得到目標(biāo)函數(shù)的調(diào)用指令以及目標(biāo)函數(shù)參數(shù)的指針數(shù)據(jù);根據(jù)所述調(diào)用指令確定目標(biāo)函數(shù)。本發(fā)明實(shí)施例中,前端將消息打包后存放到共享內(nèi)存中,后端讀取共享內(nèi)存中的消息,解析消息得到目標(biāo)函數(shù)的調(diào)用指令以及目標(biāo)函數(shù)參數(shù)的指針數(shù)據(jù)。在實(shí)際使用中,后端設(shè)置有代理程序,會(huì)定時(shí)檢測(cè)共享內(nèi)存中是否存在有應(yīng)用程序發(fā)送的消息。當(dāng)檢測(cè)到有消息時(shí),獲取所述消息,對(duì)所述消息進(jìn)行解析和處理。s103、所述后端查找預(yù)先建立的后端內(nèi)存頁表中與所述函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,并依據(jù)所述指針數(shù)據(jù)在該后端內(nèi)存地址中獲取所述目標(biāo)函數(shù)的相關(guān)參數(shù),所述后端內(nèi)存頁表的內(nèi)容與前端內(nèi)存頁表的內(nèi)容相同;本發(fā)明實(shí)施例中,由于前端內(nèi)存頁表和后端內(nèi)存頁表的內(nèi)容是一致的,因此,后端可以依據(jù)指針數(shù)據(jù)來查找共享內(nèi)存中存儲(chǔ)的數(shù)據(jù),就可以直接讀取由前端將目標(biāo)函數(shù)的相關(guān)參數(shù)打包后存放到共享內(nèi)存中的數(shù)據(jù)。s104、所述后端依據(jù)所述相關(guān)參數(shù),運(yùn)行所述目標(biāo)函數(shù)。最后運(yùn)行目標(biāo)函數(shù),執(zhí)行相應(yīng)的操作,例如調(diào)用api生成紋理。需要在此說明的是,執(zhí)行完成后,還會(huì)返回給應(yīng)用程序執(zhí)行目標(biāo)函數(shù)的結(jié)果。例如成功、失敗或返回參數(shù)等。而具體處理完成后得到的數(shù)據(jù)如紋理或圖元數(shù)據(jù),本申請(qǐng)技術(shù)方案并不關(guān)注,其可以通過現(xiàn)有技術(shù)中成熟的技術(shù)進(jìn)行處理,如發(fā)送到客戶端進(jìn)行顯示,或者轉(zhuǎn)發(fā)到另外的裝置進(jìn)行處理,或者返回到虛擬機(jī)中等。通過上述技術(shù)方案可以看出,由于本發(fā)明中在后端重建了與前端相一致的內(nèi)存頁表,因此,在前端調(diào)用后端函數(shù)時(shí),前端僅需要將函數(shù)參數(shù)打包為指針數(shù)據(jù),后端通過指針數(shù)據(jù),直接讀取相應(yīng)位置的函數(shù)參數(shù),無需傳輸原函數(shù)的相關(guān)參數(shù),大大減小了在傳輸過程中的數(shù)據(jù)量,提高了內(nèi)存調(diào)用效率,進(jìn)而提高了前端和后端的性能。上述調(diào)用方法中,提到了預(yù)先建立后端內(nèi)存頁表的過程,下面對(duì)此過程進(jìn)行詳細(xì)介紹。如圖2所示,圖2是本發(fā)明實(shí)施例中預(yù)先建立后端內(nèi)存頁表的流程示意圖,所述預(yù)先建立的后端內(nèi)存頁表是通過下列方法建立的:s201、當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí),發(fā)送用于表征所述應(yīng)用程序啟動(dòng)的啟動(dòng)指令到后端的內(nèi)存頁表管理器;s202、所述內(nèi)存頁表管理器根據(jù)所述啟動(dòng)指令建立后端內(nèi)存頁表,并在共享內(nèi)存中建立所述應(yīng)用程序的內(nèi)存映射;所述共享內(nèi)存為前端和后端均可以訪問的內(nèi)存地址空間。本發(fā)明實(shí)施例中,如果每一個(gè)應(yīng)用程序進(jìn)程都預(yù)先建立內(nèi)存頁表,顯然會(huì)浪費(fèi)資源,因此,只在應(yīng)用程序啟動(dòng)時(shí),才會(huì)申請(qǐng)內(nèi)存映射,在后端建立內(nèi)存頁表。本發(fā)明實(shí)施例中,調(diào)用方法還包括:當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí),所述前端暫停所述應(yīng)用程序的啟動(dòng);所述內(nèi)存頁表管理器若成功建立所述應(yīng)用程序的內(nèi)存映射,則向所述共享內(nèi)存中后端讀取的地址空間存放建立成功的標(biāo)識(shí);當(dāng)所述前端讀取到所述標(biāo)識(shí)時(shí),控制所述應(yīng)用程序繼續(xù)運(yùn)行。實(shí)際使用中,在vm的內(nèi)核層設(shè)置有特定的進(jìn)程進(jìn)行監(jiān)控,當(dāng)監(jiān)控到指定的3d應(yīng)用程序啟動(dòng)時(shí),會(huì)發(fā)出vm暫停運(yùn)行的指令,使得vm暫時(shí)停止運(yùn)行。由宿主機(jī)中的頁表管理器來查找此指定的3d應(yīng)用程序?qū)?yīng)的頁目錄,初始化該指定的3d應(yīng)用程序的前端影子頁表,該前端影子頁表的內(nèi)容與后端影子頁表的內(nèi)容相一致。初始化完成之后,控制vm繼續(xù)運(yùn)行,使得程序繼續(xù)運(yùn)行。圖3是本發(fā)明提供的一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法的另一種流程示意圖。所述調(diào)用方法包括:s301、前端接收到應(yīng)用程序調(diào)用后端目標(biāo)函數(shù)的請(qǐng)求時(shí),確定所述目標(biāo)函數(shù)的相關(guān)參數(shù)在前端的內(nèi)存地址,并根據(jù)預(yù)先建立的前端內(nèi)存頁表,查找所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,確定與所述后端內(nèi)存地址對(duì)應(yīng)的指針數(shù)據(jù),生成包含有所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)調(diào)用指令的消息,所述前端內(nèi)存頁表中包含有所述應(yīng)用程序?qū)?yīng)的前端內(nèi)存地址與后端內(nèi)存地址的對(duì)應(yīng)關(guān)系;s302、后端獲取所述消息,確定所述目標(biāo)函數(shù)的調(diào)用指令及所述指針數(shù)據(jù);s303、所述后端查找預(yù)先建立的后端內(nèi)存頁表中與所述函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,并依據(jù)所述指針數(shù)據(jù)在該后端內(nèi)存地址中獲取所述目標(biāo)函數(shù)的相關(guān)參數(shù),所述后端內(nèi)存頁表的內(nèi)容與前端內(nèi)存頁表的內(nèi)容相同s304、所述后端依據(jù)所述相關(guān)參數(shù),運(yùn)行所述目標(biāo)函數(shù);s305、所述后端的頁表管理器捕獲到所述前端內(nèi)存頁表發(fā)生故障時(shí),將所述后端內(nèi)存頁表更新與所述前端內(nèi)存頁表相一致。其中,步驟s301到步驟s304的執(zhí)行過程與步驟s101與步驟s104相同,在此,不進(jìn)行贅述。具體解釋一下步驟s305。在本發(fā)明實(shí)施例中,如果前端內(nèi)存頁表出現(xiàn)故障時(shí),如果后端內(nèi)存頁表與其不保持同步,則會(huì)造成讀取數(shù)據(jù)不存在或讀取錯(cuò)誤的情況。因此,需要對(duì)前端內(nèi)存頁表的狀態(tài)進(jìn)行監(jiān)控。如果前端內(nèi)存頁表發(fā)生故障時(shí),如缺頁的情況,則需要執(zhí)行同步操作,使得前端內(nèi)存頁表和后端內(nèi)存頁表相一致。在實(shí)際使用中,指定的3d應(yīng)用程序需要申請(qǐng)內(nèi)存,vm會(huì)給其分配內(nèi)存地址空間,當(dāng)3d應(yīng)用程序讀取該內(nèi)存地址空間時(shí),發(fā)生缺頁,vm會(huì)暫停。并對(duì)前端內(nèi)存頁表進(jìn)行修改。此時(shí),頁表管理器捕獲到此異常,則會(huì)將后端內(nèi)存頁表更新與所述前端內(nèi)存頁表相一致。并同步該3d應(yīng)用程序的內(nèi)存映射,在后端地址空間中建立同布局的內(nèi)存映射。并返回到虛擬機(jī)中,控制該3d應(yīng)用程序繼續(xù)運(yùn)行。需要說明的是,本發(fā)明的前后端僅要求運(yùn)行在同一主機(jī)上,并不限制是運(yùn)行在vm內(nèi)或宿主機(jī)上??梢苑謩e運(yùn)行在兩個(gè)vm中,也可以分別運(yùn)行在vm和宿主機(jī)上。本發(fā)明不限制應(yīng)用場(chǎng)景。不僅可以對(duì)顯卡虛擬化的場(chǎng)景進(jìn)行優(yōu)化,也可以適用于其余的同主機(jī)遠(yuǎn)程調(diào)用場(chǎng)景。本發(fā)明不限制前端和后端的操作系統(tǒng),可以是異構(gòu)的。本發(fā)明的調(diào)用方法中,針對(duì)vm內(nèi)的應(yīng)用程序通過內(nèi)存頁表同布局映射,可以很大程度提高大內(nèi)存訪問的同主機(jī)調(diào)用性能。本發(fā)明另一方面提供了一種共享顯卡的虛擬化平臺(tái),參見圖4,圖4是本發(fā)明提供的一種共享顯卡的虛擬化平臺(tái)的結(jié)構(gòu)示意圖,包括前端401和后端402;所述前端401用于接收到應(yīng)用程序調(diào)用后端目標(biāo)函數(shù)的請(qǐng)求時(shí),確定所述目標(biāo)函數(shù)的相關(guān)參數(shù)在前端的內(nèi)存地址,并根據(jù)預(yù)先建立的前端內(nèi)存頁表,查找所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,確定與所述后端內(nèi)存地址對(duì)應(yīng)的指針數(shù)據(jù),生成包含有所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)調(diào)用指令的消息,所述前端內(nèi)存頁表中包含有所述應(yīng)用程序?qū)?yīng)的前端內(nèi)存地址與后端內(nèi)存地址的對(duì)應(yīng)關(guān)系;所述后端402用于獲取所述消息,確定所述指針數(shù)據(jù)及所述目標(biāo)函數(shù);查找預(yù)先建立的后端內(nèi)存頁表中與所述目標(biāo)函數(shù)對(duì)應(yīng)的后端內(nèi)存地址,并依據(jù)所述指針數(shù)據(jù)在該后端內(nèi)存地址中獲取所述目標(biāo)函數(shù)的相關(guān)參數(shù),所述后端內(nèi)存頁表的內(nèi)容與前端內(nèi)存頁表的內(nèi)容相同;依據(jù)所述相關(guān)參數(shù),運(yùn)行所述目標(biāo)函數(shù)。優(yōu)選的,所述預(yù)先建立的后端內(nèi)存頁表是通過下列方法建立的:當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí),發(fā)送用于表征所述應(yīng)用程序啟動(dòng)的啟動(dòng)指令到后端的內(nèi)存頁表管理器;所述內(nèi)存頁表管理器根據(jù)所述啟動(dòng)指令建立后端內(nèi)存頁表,并在共享內(nèi)存中建立所述應(yīng)用程序的內(nèi)存映射;所述共享內(nèi)存為前端和后端均可以訪問的內(nèi)存地址空間。優(yōu)選的,當(dāng)前端判斷所述應(yīng)用程序啟動(dòng)時(shí)還包括:所述前端還用于暫停所述應(yīng)用程序的啟動(dòng);所述內(nèi)存頁表管理器若成功建立所述應(yīng)用程序的內(nèi)存映射,則向所述共享內(nèi)存中后端讀取的地址空間存放建立成功的標(biāo)識(shí);當(dāng)所述前端讀取到所述標(biāo)識(shí)時(shí),控制所述應(yīng)用程序繼續(xù)運(yùn)行。優(yōu)選的,所述后端獲取所述消息,確定所述指針數(shù)據(jù)及所述目標(biāo)函數(shù)包括:所述后端讀取所述共享內(nèi)存中由所述前端生成并放入所述共享內(nèi)存中的消息;解析所述消息得到目標(biāo)函數(shù)的調(diào)用指令以及目標(biāo)函數(shù)參數(shù)的指針數(shù)據(jù);根據(jù)所述調(diào)用指令確定目標(biāo)函數(shù)。優(yōu)選的,其特征在于,還包括后端的頁表管理器:所述后端的頁表管理器用于捕獲到所述前端內(nèi)存頁表發(fā)生故障時(shí),將所述后端內(nèi)存頁表更新與所述前端內(nèi)存頁表相一致。需要說明的是,本實(shí)施例的一種共享顯卡的虛擬化平臺(tái)可以采用上述方法實(shí)施例中的一種共享顯卡虛擬化中內(nèi)存的調(diào)用方法,用于實(shí)現(xiàn)上述方法實(shí)施例中的全部技術(shù)方案,其前端、后端以及其它模塊的功能可以根據(jù)上述方法實(shí)施例中的方法具體實(shí)現(xiàn),其具體實(shí)現(xiàn)過程可參照上述實(shí)施例中的相關(guān)描述,此處不再贅述。通過上述技術(shù)方案可以看出,由于本發(fā)明中的虛擬化平臺(tái)在后端重建了與前端相一致的內(nèi)存頁表,因此,在前端調(diào)用后端函數(shù)時(shí),前端僅需要將函數(shù)參數(shù)打包為指針數(shù)據(jù),后端通過指針數(shù)據(jù),直接讀取相應(yīng)位置的函數(shù)參數(shù),無需傳輸原函數(shù)的相關(guān)參數(shù),大大減小了在傳輸過程中的數(shù)據(jù)量,提高了內(nèi)存調(diào)用效率,進(jìn)而提高了前端和后端的性能。需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。當(dāng)前第1頁12當(dāng)前第1頁12