序 言
SPICE,即Simple Protocol for Independent Computing Environment(獨立計算環(huán)境簡單協(xié)議)是紅帽企業(yè)虛擬化桌面版的主要技術組件之一篙悯,具有自適應能力的遠程提交協(xié)議,能夠提供與物理桌面完全相同的最終用戶體驗稠茂。靈躍桌面云借助支持SPICE協(xié)議的客戶端(如remote-viewer)或者通過瀏覽器,用戶可以訪問自己的虛擬桌面眨攘,如下圖1所示
1.特點
Spice虛擬桌面?zhèn)鬏攨f(xié)議主慰,最初是由Qumranet開發(fā),后來被RedHat收購并開源鲫售。經(jīng)過幾年的社區(qū)開發(fā)共螺,Spice協(xié)議已經(jīng)能在實際應用中一展拳腳,和商業(yè)協(xié)議ICA 情竹、PCoIP等相抗衡藐不,與上述商業(yè)化的遠程桌面協(xié)議相比,Spice協(xié)議具有如下優(yōu)點:
(1)開源:易于擴展和功能定制秦效;
(2)跨平臺:Windows/Linux/Mac OS平臺全兼容雏蛮;
(3)支持外接設備:除常用USB設備外,打印機和掃描儀等設備也能在遠程使用阱州;
(4)豐富的媒體支持:包括視頻挑秉、音頻、圖像苔货;
(5)更小的帶寬占用:Spice里內(nèi)置圖像壓縮算法犀概,有效減少數(shù)據(jù)傳輸時的帶寬占用立哑;
(6)更安全的數(shù)據(jù)傳輸:Spice可以使用OpenSSL加密傳輸數(shù)據(jù)。
2.架構
Spice 包含四個部分:協(xié)議姻灶、客戶端側(cè)铛绰、服務端側(cè)和虛擬機側(cè)。其中产喉,
(1)協(xié)議:是客戶端側(cè)捂掰、服務端側(cè)和虛擬機側(cè)三個部分交互時所遵循的準則;
(2)客戶端:負責接收并轉(zhuǎn)換虛擬機數(shù)據(jù)曾沈,以及發(fā)送用戶輸入數(shù)據(jù)到虛擬機这嚣,從而使得用戶能夠與虛擬機進行交互;
(3)服務端:是集成在Hypervisor內(nèi)部的一個用戶層組件晦譬,使得Hypervisor(如QEMU)支持Spice協(xié)議疤苹;
(4)虛擬機側(cè):指所有部署在虛擬機內(nèi)部的必需組件互广,如QXL驅(qū)動敛腌、Spice Agent等。
(一)Spice 圖形命令流
圖3展示了Spice的基本框架惫皱,以及圖形命令流如何從虛擬機內(nèi)部達到Spice終端(平臺環(huán)境為QEMU+libSpice)像樊。圖形命令開始于虛擬機內(nèi)部的圖形應用程序向OS請求繪制操作(如GDI命令)。之后旅敷,Spice會利用安裝在虛擬機內(nèi)部的QXL驅(qū)動生棍,捕獲應用程序的繪制操作,進而轉(zhuǎn)化為Spice QXL 命令媳谁,并傳遞到QEMU虛擬的QXL設備后端涂滴。接著,LibSpice會讀取上述QXL 命令晴音,進行重組和優(yōu)化柔纵,并封裝成Spice協(xié)議消息格式,發(fā)送到終端锤躁。最后搁料,終端依據(jù)Spice協(xié)議解析對應的圖形操作消息,進而完成畫面更新操作系羞。
(二)Agent 命令流
如圖4所示郭计,為Spice Agent對應的命令交互流程,Spice Agent位于虛擬機內(nèi)部椒振。Spice Server 和 client 借助Agent在虛擬機內(nèi)部執(zhí)行一系列動作昭伸,如設置虛擬機顯示配置等。Spice Agent通過位于虛擬機內(nèi)部的VDIPort設備驅(qū)動與VDIPort設備(由QEMU 虛擬的設備)進行交互澎迎,VDIPort虛擬設備與Spice Server通過QEMU 的VDI Interface 進行交互庐杨,從而最終實現(xiàn)Spice Agent與Spice Server以及Spice Client三者之間的交互宋下,其中消息格式均遵從Spice協(xié)議。
3.實現(xiàn)
3.1 Spice客戶端
如圖5所示辑莫,Spice客戶端通過建立不同的通道來處理不同的事件学歧。客戶端將每個Channel實現(xiàn)為一個單獨的線程各吨,具體通過定義一個以單獨線程運轉(zhuǎn)的RedChannel基類的方式來實現(xiàn)枝笨,之后從此基類中派生所需要的具體功能類。
客戶端Channel類包括:RedClient揭蜒、DisplayChannel横浑、CursorChannel、InputsChannel屉更、PlaybackChannel徙融、RecordChannel等。RedClient 負責建立主通道瑰谜,之后主通道通過channel_type創(chuàng)建下述通道:
(1)DisplayChannel:負責處理圖形命令欺冀、圖片以及視頻流顯示;
(2)InputsChannel:負責處理鍵盤和鼠標輸入萨脑;
(3)CursorChannel:負責處理指針設備位置隐轩、可見性以及形狀的顯示;
(4)PlaybackChannel:負責接收服務端的聲音數(shù)據(jù)渤早,并在客戶端播放职车;
(5)RecordChannel:負責客戶端聲音設備聲音捕獲,并將其傳遞到虛擬機內(nèi)鹊杖。
3.2 Spice Server
如圖6所示悴灵,Spice Server內(nèi)部對應于client,也存在若干個通道骂蓖。這些通道主要負責向虛擬機的虛擬設備(如鍵盤鼠標等)傳遞客戶端側(cè)用戶的輸入积瞒,以及接收并顯示虛擬機虛擬顯卡對應的畫面(QXL)。為了使得Spice Server能夠相對獨立涯竟,其借助QEMU提供的各種虛擬設備后端接口來與虛擬機所見的虛擬設備進行交互赡鲜,如Playback Interface等。
3.3 Spice 協(xié)議
如圖7所示庐船,Spice協(xié)議是構建起整個虛擬桌面的核心银酬。借助于Spice協(xié)議,虛擬桌面各個組件之間才能夠順利交互筐钟。
3.4 QXL Device
Spice Server 支持 QXL VDI interface揩瞪,負責為虛擬機提供虛擬顯卡,包括初始化顯卡的ROM與RAM等的地址映射篓冲、IO端口映射李破、顯存區(qū)域更新宠哄、光標位置通知、設備IRQ請求嗤攻、顯卡模式設置及重置等顯卡基本功能毛嫉。同時,QXL設備后端妇菱,負責與Spice Server交互承粤,從而實現(xiàn)在終端實時進行虛擬桌面的顯示。
3.5 QXL Guest Drivers
QXL虛擬設備對應的驅(qū)動闯团,使操作系統(tǒng)能夠正確識別相應的設備辛臊。
3.6 Spice Agent
虛擬機內(nèi)部的守護進程,接收來自客戶端或者服務器的相關操作請求房交,比如設置虛擬機的分辨率等彻舰。
3.7 VDIPort Device and Driver
VDIPort設備由Spice Server為虛擬機所虛擬的串口通信設備,提供給虛擬機內(nèi)部Agent通道以及usb重定向通道使用候味,其在QEMU側(cè)均對應于一種名稱為Spicevmc的字符設備后端刃唤。
本文轉(zhuǎn)載于 靈躍云 : 原文鏈接