紅帽Spice 入門

來源:互聯網
上載者:User
1. Introduction

SPICE(獨立計算環境的簡單協議)- Simple Protocol for independent Computing Environment

Spice 是一個開放的遠程計算解決方案,使得用戶端可以訪問遠程機器案頭和裝置(比如鍵盤,滑鼠,audio和USB)。通過Spice我們可以像使用本機電腦一樣訪問遠程機器,這樣可以把CPU GPU密集工作從用戶端移交給遠程高效能機器。Spice適用於LAN和WAN,並且不會損害使用者體驗

Spice項目提供了和虛擬桌面進行互動的解決方案,並且是完全開源的。Spice項目可以處理虛擬設備(後端back-end)和前端 front-end。在前端和後端間通過VDI(Virtual Device Interfaces)進行互動。

2. Basic Architecture

Spice由三個基本部分組成:Spice 協議,Spice server和Spice client。

2.1 Graphic Commands Flow

顯示Spice的基本架構,以及guest到client之間傳送的graphic命令資料流

當Guest OS上一個user應用請求OS圖形引擎執行一個渲染操作。圖形引擎傳送命令給QXL驅動,QXL驅動會把OS命令轉換為QXL命令然後推送到QXL裝置的commands RIng緩衝中。commands Ring是QXL Device中的一個隊列。Libspice會從這個commands Ring取得命令資料,然後加到graphics命令樹上。顯示樹上包含一組操作命令,這些命令的執行會產生顯示內容。這棵樹可以最佳化掉那些會被覆蓋掉的命令,命令樹還用來檢測video資料流。當命令從libspice的發送隊列發送給用戶端時,發送命令被轉換為Spice協議訊息,同時這個命令從發送隊列和樹上移除。

當libspice 不再需要一個命令時,它被推送到release ring。驅動使用這個隊列來釋放相應的命令資源

當用戶端從libspice接收到一個命令時,用戶端使用這個命令來更新顯示。

2.2 Agent Commands Flow

Spice 代理是guest中的一個軟體模組。Spice server和Spice client使用代理來執行在guest上下文中的工作,比如配置guest display設定。顯示了spice client和server通過VDI 驅動和裝置進行通訊的過程。Message包括client的guest顯示配置資訊,server的滑鼠移動資訊以及代理的配置應答。驅動使用Input/Output Rings和VDI Port Device通訊。用戶端和server產生的資訊都寫入到服務其中相同的寫隊列中,然後再寫入VDI
Port Device的output buffer ring。Message port決定是否messages被server處理還是推送給用戶端。

2.3 Spice Client

Spice跨平台用戶端是終端使用者的介面

2.3.1 Client Basic Structure

2.3.2 Client Classes

下面是Spice Client關鍵類的簡介。為了有一個清晰的跨平台結構,Spice定義了一個通用的介面,而把平台相關的實現放在了一個並行的目錄中。這個通用的介面就是Platform class,定義了許多低級服務,比如timer和cursor操作。

Application

是一個主要的類,包含Clients, monitos和screens,這個類實現了通用的應用功能:命令列解析,主迴圈,時間處理,滑鼠事件重新導向,全屏切換等等。

2.3.2.1 Channels

client和服務斷通過channels進行通訊,每一個channel類型對應著特定的資料類型。每個channel使用專門的TCP 通訊埠,這個連接埠可以是安全的或者不安全的。在用戶端,每一個channel會有一個專門的線程來處理,所以我們可以為每一個channel設定單獨的優先順序來達到不同的QoS

RedClient

是主channel。它擁有所有其他的執行個體化通道,並且可以控制他們(建立,串連,斷開等),並且處理控制,配置和遷徙。

可用channel包括

Main - 由RedClient實現

DisplayChannel - 處理圖形化命令,映像和資料流

InputsChannel - 鍵盤和滑鼠事件

CursorChannel - 指標裝置位置,顯示和游標形狀。

PlaybackChannel - 從伺服器接受audio,然後在client進行播放

RecordChannel - 在client端進行錄音

2.3.2.2 Screens和Windows

ScreenLayer - screen layer綁定到特定的screen,用來提供矩形地區的操作。layer是z-order

RedScreen - 實現screen的邏輯,控制window,使用 screen layers來顯示他的內容

RedDrawable - 基本pixmap的平台特定實現。它支援基本的渲染操作。

2.4 Spice server

spice server是通過libspice和VDI library實現的。VDI提供了一個標準的方法來發布虛擬設別的介面。這使得其他的軟體組件可以和這些virtual device互動。

一方面,server使用Spice 協議和遠程client通訊,另一方面,它和VDI host應用進行互動。

server為了遠程顯示的目的,server維護了一個命令序列和一棵樹來管理當前對象的依賴關係和覆蓋關係。QXL命令被處理轉換為Spice 協議,然後發送給用戶端。


2.4.1 Server structure

Server通過channels和client通訊。每一個channel類型對應一種特定類型的資料。每一個channel使用專用的TCP port。服務端的channel和client的channel是對應的,也有Main, Inputs, Display, Cursor Playback和Record

Main 和input channel是用來控制的,display 和cursor channels被每個display的red worker線程式控制制。audio playback和record channels有他們自己的處理函數。Libspice和VDI host應用和各種功能介面進行通訊  如Agent, keryboard, record等等

如所示Spice server包括如下主要組件:

2.4.1.1 Red Server

Server自身,用來監聽用戶端的串連請求,接受串連並使用它們通訊。負責如下工作:

1. 管理channels

擁有或者管理channels(註冊,登出和關閉)

通知client活動的channels,以便client能夠建立他們

Main 和 input channels的管理

連結的建立

socket操作,以及連結管理

處理SSL和票據

2. VDI介面

3. 遷移進程協作

4. 處理使用者commands

5. 和guest angent 通訊

2.4.1.2 圖形子系統

不像Spice中的其他子系統,graphics子系統在server中通過專有的線程並行運行。這種結構使得QEMU流,以及輸入的圖形命令的處理和渲染保持獨立,因此消耗很多的CPU資源。顯示了Spice server圖形子系統的結構。Red server執行個體化一個dispatcher,並帶有QXL interface. dispatcher為這個QXL interface建立red worker. worker處理的命令有三個來源:1. 同步的QXL裝置命令,2. red server commands,
3. 非同步QXL裝置命令. 1和2 由dispatcher 通過socket分發; 3由worker從QXL裝置rings拖下來。

2.5 Spice Protocol

spice protocol 用於client 和server間的通訊. 比如傳輸繪圖物件, 鍵盤和滑鼠事件, 游標資訊, audio playback和錄音,以及控制命令。細節文檔參見Spice協議

2.6 QXL裝置
2.7 QXL GUEST 驅動
2.8 Spice Agent

Spice代理是一個可選組件用來增強使用者體驗以及執行面向guest的工作。例如,當使用用戶端滑鼠模式時,agent插入滑鼠位置和狀態到guest. 此外,它可以用來配置guest顯示設定。未來的功能包括從guest複製對象或者粘貼對象到guest.

2.9 VDIPort Device 和 Driver

Spice協議支援client到伺服器端代理之間的通訊channel。當使用QEMU時,Spice代理駐留在guest上。VDI port是一個QEMU PCI裝置用來和agent之間通訊,使用一個特定的代理協議進行通訊。

3 Features
3.1 Graphic commands

Spice支援2D圖形命令的傳輸和處理(3D圖形命令暫時還不支援),而其他的遠端桌面解決方案一般使用framebuffer的更新。QXL裝置命令是通用的平台獨立的,所以Windows和 X drivers都可以使用它。

3.2 硬體加速

基本的Spice client渲染是通過Cario執行的,cario本身又是跨平台的裝置獨立的庫。Cario為二維繪圖提供了向量圖形原語。硬體加速是一個額外的渲染模式,渲染通過client的GPU而不是軟體實現的。硬體加速在linux是通過OpenGL實現,在Windows中為GDI。使用硬體加速有如下有點

  • 高效能渲染 - 使用OpenGL,Spice client能夠渲染的更快。使用硬體進行展開要比耗費大量軟體操作的展開高效的多。因此,Spice 能夠達到更好的使用者體驗。
  • 減少用戶端CPU使用率 - 用戶端可以用節約下來的CPU時間,用來執行其他的工作,比如audio

和Cario不同,Cario是一個完全獨立的軟體庫,而OpenGL則是一個硬體庫,依賴於驅動和硬體實現。因此Spice可能會碰到不正確的渲染,或者client host崩潰。此外,儘管OpenGL是標準的,但是各個廠商的硬體和驅動實現可能有所差別。因此,在不同的GPUs上,Spice可能顯示不同的渲染輸出,已經不同的效能表現。此外,還有一些裝置並不支援OpenGL

3.3 Image Compression

Spice提供了幾個image壓縮演算法,可以在初始化時選擇,並能在運行時動態更改。Quic是Spice專有的image壓縮公用程式,基於SFALIC演算法。LZ演算法是另外一個選擇。Quic和LZ都是本地演算法。Global LZ是另外一個Spice專有演算法,使用LZ以及一個基於曆史的全域字典。GLZ利用映像中的重複模式來減少網路流量,這對於運行於WAN環境下的遠端桌面是重要的。Spice提供了針對每副圖片壓縮的自動選擇模式,針對圖片的屬性啟發性的選擇LZ/GLZ和Quic壓縮演算法。一般來說,人造圖片使用LZ/GLZ更好,而真實圖片則使用Quic

3.4 video壓縮

Spice對於圖片使用的是無損壓縮演算法,這是為了避免關鍵顯示對象資訊的丟失。但是,由於video流可能是頻寬的主要消耗者,因為video中的每一幀都是一個單獨的映像。此外這些映像並不是關鍵資料。因此,Spice對這些視頻流採用有損壓縮,Spice server啟發性的識別視頻地區更新頻率搞得地區,這些地區的更新採用Motion JPEG演算法編碼,編碼後發送給client。這種機制節省了很多頻寬,改善了Spice效能,尤其是在WAN網路上。當然,在某些情況下,啟發行為可能會導致低品質的映像。

3.5 Caching

Spice實現client 映像快取,以便避免冗餘的傳輸。Caching可以應用到任何發送給client的資料,包括pixmaps, pallettes和cursors。每一個圖片都有一個唯一的id和cache提示。不一致的images有不同的ids,而相同的圖片則共用同樣的id. Pixmap cache在所有的display中共用。Cache是每連結定義的,服務端和client是完全同步的,也就是說在每一個時刻

3.6 滑鼠模式

Spice支援兩種滑鼠模式,server端和client端。滑鼠模式可以動態改變,並且可以在client和server之間協商。

  • 服務端模式 - 使用QEMU ps/2滑鼠模擬器在guest使能滑鼠。一旦user在Spice client視窗中點擊滑鼠,client滑鼠被捕捉並被設定為不可見。client發送滑鼠移動變化值給服務端。因此,client滑鼠在每次移動後都會返回到視窗中心。在這種模式下,server控制滑鼠在螢幕上的位置,所以它一直同步client和guest上的位置。然而,在WAN或者負載較重的伺服器上可能會造成問題,滑鼠游標看起來有些遲鈍或者沒有響應。
  • Client模式 - client滑鼠不被捕獲並且guest 游標也不會顯示。client發送滑鼠移動的絕對座標給server。Guest agent按guest案頭比例縮放座標位置並且插入相應的座標位置。對於單顯示器,通過VDI host應用註冊一個絕對位置裝置,就可以在沒有agent的情況下使用client 滑鼠。在這種情況下,Spice server 負責縮放座標。Client模式很適合WAN和高負載伺服器,因為游標運動很平滑並且響應好。然而,游標可能會偶爾失去同步(位置和形狀不一致). client滑鼠游標由guest
    mouse游標更行的。
3.7 多顯示器

Spice支援任意數目的監視器,僅受限於guest, client和server. 監視器數目和他們的ram大小是在載入VM時設定的。Spice支援根據client機器參數自動設定guest監視器解析度和顯示設定,通過一個用戶端到guest agent的命令實現。

3.10 活動遷移

伺服器間的VM遷移對於已經串連的client來說是無縫的. 完整的串連狀態,包括開啟的channel和cursor,到會從source恢複到目標機器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.