[[PageOutline]] = Xen GPU Cluster Practice = == 實作五: Suspension & Resumption for your 3D-Apps == == Part1: Between DomU == === 實驗一: Pausing & Unpausing === '''# 當使用者正在使用虛擬機器看影片,玩Game或是執行其他3D-Apps時. 使用者在暫停目前的工作後,便交由"Dom0"來作 snapshot.''' [[BR]] @ Dom0 [[BR]] rider@cloud:~$ sudo xm list [[BR]] {{{ Name ID Mem VCPUs State Time(s) Domain-0 0 3851 4 r----- 40036.9 client 6 1024 4 -b---- 21.9 guest 7 1024 4 -b---- 13.6 }}} '''# 將虛擬機器 "guest" (DomainID:8) 暫停.''' [[BR]] rider@cloud:~$ sudo xm pause 8[[BR]] '''# 檢查虛擬機器狀態,虛擬機器 "guest" 已經 "pause".''' [[BR]] rider@cloud:~$ sudo xm list [[BR]] {{{ Name ID Mem VCPUs State Time(s) Domain-0 0 3851 4 r----- 40059.8 client 6 1024 4 -b---- 38.9 guest 8 1024 4 --p--- 3.0 }}} '''# 重新將虛擬機器 "guest" (DomainID:8) 還原回原工作狀態.''' [[BR]] rider@cloud:~$ sudo xm unpause 8 [[BR]] '''# 檢查虛擬機器狀態.''' [[BR]] rider@cloud:~$ sudo xm list [[BR]] {{{ Name ID Mem VCPUs State Time(s) Domain-0 0 3851 4 r----- 40036.9 client 6 1024 4 -b---- 21.9 guest 8 1024 4 r----- 13.6 }}} '''# 使用者可以再重新透過 VNC Viewer 連回去虛擬機器 "guest" 繼續原本的工作.''' [[BR]] @ !ClientUser [[BR]] rider@PC:~$ vncviewer guest:1 [[BR]] '''說明: # "DomU" 被暫停後會將目前狀態儲存在記憶體,一旦 "Dom0" 重開機後該 "DomU" 的狀態將會消失.''' [[BR]] === 實驗二: Saving & Restoring === '''# 當使用者正在使用虛擬機器看影片,玩Game或是執行其他3D-Apps時. 使用者在暫停目前的工作後,便交由"Dom0"來作 snapshot.''' [[BR]] @ Dom0 [[BR]] rider@cloud:~$ sudo xm list [[BR]] {{{ Name ID Mem VCPUs State Time(s) Domain-0 0 3851 4 r----- 40036.9 client 6 1024 4 -b---- 21.9 guest 7 1024 4 -b---- 13.6 }}} '''# 將虛擬機器 "guest" 作 snapshot.''' [[BR]] rider@cloud:~$ sudo xm save -c guest ./backup/snapshot/guest.chk[[BR]] '''# 將虛擬機器 "guest" 暫時關閉並釋放資源.''' [[BR]] rider@cloud:~$ sudo xm destroy guest [[BR]] '''# 重新將虛擬機器 "guest" 還原回原工作狀態.''' [[BR]] rider@cloud:~$ rider@cloud:~$ sudo xm restore ./backup/snapshot/guest.chk [[BR]] '''# 使用者可以再重新透過 VNC Viewer 連回去虛擬機器 "guest" 繼續原本的工作.''' [[BR]] @ !ClientUser [[BR]] rider@PC:~$ vncviewer guest:1 [[BR]] '''說明: # "DomU" 被 snapshot 後會將執行狀態存成一各檔案並存放在硬碟中指定目錄,就算 "Dom0" 重開機後還是可以將 "DomU" 狀態還原回來.''' [[BR]] === 實驗三: Suspension & Resumption === '''# 必須先使用 xm new 來新增虛擬機器給 Dom0, 再使用 xm start 來啟動虛擬機器. 直接用 xm create 會有問題 ?! ''' [[BR]] '''# 當使用者正在使用虛擬機器看影片,玩Game或是執行其他3D-Apps時. 使用者可以在任何時刻中止目前的工作,亦可隨時隨地還原狀態.''' [[BR]] @ DomU [[BR]] '''# 啟動 Suspend & Resume daemon, 並指向 Dom0 stub-daemon port. ''' [[BR]] rider@guest:~$ cd ./vmgl/vmgl.hg/extra/suspend-resume-helper [[BR]] rider@guest:~/vmgl/vmgl.hg/extra/suspend-resume-helper$ make [[BR]] rider@guest:~/vmgl/vmgl.hg/extra/suspend-resume-helper$ ./sr_daemon Dom0_IP:7000 & [[BR]] rider@guest:~/vmgl/vmgl.hg/extra/suspend-resume-helper$ ps aux | grep sr_daemon {{{ rider 3326 0.0 0.1 34056 1352 pts/0 S 15:56 0:00 ./sr_daemon Dom0_IP:7000 }}} @ Dom0 [[BR]] rider@cloud:~$ sudo xm list [[BR]] {{{ Domain-0 0 3724 4 r----- 80.5 client 4 1024 4 -b---- 19.0 guest 5 1024 4 -b---- 0.3 }}} '''# 將虛擬機器 "guest" suspend (中止).''' [[BR]] rider@cloud:~$ sudo xm suspend guest [[BR]] '''# 查看虛擬機狀態可以發現 "guest" 已經被 suspend.''' [[BR]] rider@cloud:~$ sudo xm list [[BR]] {{{ Name ID Mem VCPUs State Time(s) Domain-0 0 3724 4 r----- 86.3 client 4 1024 4 -b---- 20.6 guest 1024 4 3.8 }}} '''# 將虛擬機器 "guest" resume (恢復) 回原來狀態 .''' [[BR]] rider@cloud:~$ sudo xm resume guest [[BR]] '''# 查看虛擬機狀態可以發現 "guest" 已經 resume 回來.''' [[BR]] rider@cloud:~$ sudo xm list [[BR]] {{{ Name ID Mem VCPUs State Time(s) Domain-0 0 3724 4 r----- 92.0 client 4 1024 4 -b---- 23.8 guest 6 1024 4 -b---- 0.3 }}} '''# 用 xm create 方式來啟動虛擬機器時,要 suspend 時會有以下訊息.''' [[BR]] {{{ (Bug) Error: Domain is not managed by Xend lifecycle support. Usage: xm suspend Suspend a Xend managed domain }}} == Part2: Between Dom0 == === 步驟一: 安裝 One === 請參考 Rock 的教學手冊: [wiki:Reading/XenP/cluster OpenNebula] '''One 快速安裝法:''' [[BR]] rider@cloud:~$ sudo su [[BR]] root@!cloud:/home/rider# echo "deb !http://ppa.launchpad.net/opennebula-ubuntu/ppa/ubuntu intrepid main" >> /etc/apt/sources.list [[BR]] rider@cloud:~$ gpg --keyserver subkeys.pgp.net --recv 8F5F40F9BDE7E1E9 [[BR]] rider@cloud:~$ gpg --export --armor 8F5F40F9BDE7E1E9 | sudo apt-key add - [[BR]] rider@cloud:~$ sudo apt-get update [[BR]] rider@cloud:~$ sudo apt-get install opennebula opennebula-node [[BR]]