spice在桌面虛擬化中的應用系列之一(spice簡介,性能優化等)


1.spice介紹

1.1 spice簡介

spice是由Qumranet開發的開源網絡協議,2008年紅帽收購了Qumranet獲得了這個協議。SPICE是紅帽在虛擬化領域除了KVM的又一“新興技術”,它提供與虛擬桌面設備的遠程交互實現,主要應用在桌面虛擬化,支持圖像,2D傳輸,720P視頻播放

目前,spice主要目標是為qemu虛擬機提供高質量的遠程桌面訪問,它致力於克服傳統虛擬桌面的一些弊端,並且強調用戶體驗

spice包含有3個組件:

SPICE Driver:SPICE驅動器 存在於每個虛擬桌面內的組件

SPICE server:SPICE服務器 存在於紅帽企業虛擬化Hypervisor內的組件

SPICE Client: SPICE客戶端 存在於終端設備上的組件,可以是瘦客戶機或專用的PC,用於接入每個虛擬桌面。

這三個組件協作運行,確定處理圖形的最高效位置,以能夠最大程度改善用戶體驗並降低系統負荷。如果客戶機足夠強大,SPICE向客戶機發送圖形命令,並在客戶機中對圖形進行處理,顯著減輕服務器的負荷。另一方面,如果客戶機不夠強大,SPICE在主機處理圖形,從CPU的角度講,圖形處理並不需要太多費用

以上簡介參考http://os.51cto.com/art/201201/311464.htm

1.2 spice架構

Spice agent運行在客戶機(虛擬機)操作系統中。Spice server和Spice client利用spice agent來執行一些需要在虛擬機里執行的任務,如配置分辨率,另外還有通過剪貼板來拷貝文件等。從上圖可以看出,Spice client與server與Spice Agent的通信需要借助一些其他的軟件模塊,如在客戶機里面,Spice Agent需要通過VDIPort Driver與主機上 QEMU的VDIPort Device進行交互,他們的交互通過一種叫做輸入/輸出的環進行。Spice Client和Server產生的消息被寫入到設備的輸出環中,由VDI Port Driver讀取;而Spice Agent發出的消息則通過VDI Port Driver先寫入到VDI Port Device輸入環中,被QEMU讀入到Spice server的緩沖區中,然后再根據消息決定由Spice Server直接處理,還是被發往Spice Client中

以上參考http://blog.csdn.net/hbsong75/article/details/9465683

1.3 spice的不足

  • spice目標是提供一個高性能,高用戶體驗的遠程桌面連接,就像本地桌面一樣展現給用戶. 其目前實現的功能有usb重定向,音視頻傳輸,剪貼板,鼠標同步,2D圖形支持,任意調整分辨率(qxl驅動)等
  • spice目前不支持虛擬機中的3D效果,對於windows7系統虛擬機,其aero桌面特效也無法啟用,因為spice使用遠程連接,所以其高度依賴網絡,如果網絡環境不好,使用起來將會是一間很痛苦的事情

2 spice服務器端安裝配置

2.1 系統准備

系統版本

  • RHEL6
  • IP:192.168.11.166

安裝KVM軟件

#安裝kvm/qemu工具,以及virt-manager,libvirtd
yum install qemu-kvm qemu-kvm-tools virt-manager libvirt libvirt-devel libvirt-client virt-manager virt-viewer

系統環境檢查

  • 運行命令 lsmod | grep kvm 檢查 KVM 模塊是否成功安裝。如果有輸出結果,那么 KVM 模塊已成功安裝
  • 需要服務器硬件支持虛擬化技術(Intel VT-d,AMD-V)。可以使用如下命令檢查,有輸出信息表示支持
egrep "(vmx|svm)" --color /proc/cpuinfo

2.2 服務器上安裝spice-server

yum -y install spice-protocol spice-server xorg-x11-drv-qxl spice-glib

2.3 客戶端安裝spice client

centos客戶端安裝virt-viewer

yum -y install virt-viewer

windows7客戶端安裝virt-viewer

下載鏈接: http://virt-manager.org/download/sources/virt-viewer/virt-viewer-x64-1.0.msi

2.4 新建centos6.4虛擬機

關於virt-manager工具

virt-manager是一個圖形化的虛擬機管理工具,它可以方便地創建虛擬機,修改虛擬機配置,添加新設備等. 但是由於其是圖形界面管理,所以效率不是很高,而且對網絡也有要求. libvirt提供了一個xml文件用來定義虛擬機的配置細節,並且可以通過virsh命令對虛擬機進行管理

編寫一個虛擬機的xml文件

如下是一個centos6.4桌面版的xml文件,默認配置

<domain type='kvm'>
  <name>cdesk1</name>
  <uuid>56f6c45d-aa4d-8b23-85d9-87500199f089</uuid>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.5.0'>hvm</type>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/data_lij/vhosts/cdesk1.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:92:32:a9'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

通過xml文件啟動虛擬機

#加入virsh管理
virsh define cdesk1.xml
#啟動虛擬機
virsh start cdesk1
#查看端口
netstat -ntpl | grep qemu

查看進程

[root@controller2 qemu]# ps -ef | grep qemu
qemu     21866     1 10 19:26 ?        00:00:00 /usr/libexec/qemu-kvm -name cdesk1 -S -M rhel6.5.0 -enable-kvm -m 2048 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid 56f6c45d-aa4d-8b23-85d9-87500199f089 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/cdesk1.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot order=c,menu=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/data_lij/vhosts/cdesk1.qcow2,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -netdev tap,fd=25,id=hostnet0,vhost=on,vhostfd=26 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:92:32:a9,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5

默認情況下,qemu使用vnc建立遠程連接,監聽地址為0.0.0.0,其端口為自動分配(xml文件中定義graphics type='vnc' port='-1', -1表示端口自動分配5900+N)

客戶端使用TightVNC工具遠程連接

3 啟用spice進行遠程連接

3.1 修改xml文件,使用spice進行遠程連接

首先virsh命令關閉虛擬機

<!--  添加 -->  
 <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
<!--  修改 -->
    <graphics type='spice' port='5902' tlsPort='5903' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='qxl' ram='65536' vram='65536' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>

3.2 修改xml文件支持音頻傳輸

<sound model='ich6'>
   <alias name='sound0'/>
 </sound>

Linux下model='ich6',windows下model='ac97'

3.3 使用windows7客戶端遠程連接

首先啟動虛擬機

virsh start cdesk1

使用virt-viewer工具,其支持vnc和spice兩種協議,所以這里需要指定使用spice

3.4 使用virt-manager圖形工具配置spice

以上步驟3.1-3.3中是修改xml文件配置spice連接的,也可以使用virt-manager圖形界面操作

  • 首先關閉虛擬機
  • 服務器上運行virt-manager命令,打開圖形界面(需要開啟服務器上的X11轉發)
  • 如下圖Display中更改Type為spice

  • video中更改Model為qxl,修改完成之后,啟動虛擬機

4 提高虛擬機性能(鼠標同步,共享剪貼板,音視頻傳輸等)

我們在客戶端使用spice client遠程連接虛擬機,如果想要虛擬機中播放的音視頻傳輸到本地客戶端,或者在虛擬機和客戶機之間共享剪貼板,則需要在虛擬機中安裝相應增強工具,對於windows系統和Linux系統,需要安裝的增強工具不太一樣

 4.1 windows虛擬機配置

windows虛擬機需要安裝增強工具spice-guest-tools(類似vmware中的vmtool工具)

下載地址: http://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-0.74.exe

這個軟件包包含了一個qxl視頻卡驅動,還包括SPICE guest agent,可以實現同步剪貼板,鼠標,任意調整虛擬機分辨率等功能

4.2 Linux虛擬機配置

centos gnome桌面版虛擬機,需要安裝以下軟件包

yum install xorg-x11-drv-qxl spice-vdagent
#設置開機啟動
/etc/init.d/spice-vdagentd start
chkconfig spice-vdagentd on

4.3 把虛擬機中的音視頻傳輸到客戶端

修改xml文件實現音視頻傳輸

前面是通過在虛擬機xml文件中添加sound標簽,實現虛擬機和客戶機的音視頻傳輸,也可以使用virt-manager工具

用virt-manager工具添加音頻設備

選擇Sound的Model(ac97或者ich6)

以上介紹了spice的安裝和配置,以及簡單連接,其它spice的功能將在其它文章中介紹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM