(武漢數字工程研究所 武漢 430074)
近年來,虛擬機的應用越來越廣泛。利用虛擬化技術[1~2],單CPU可以模擬多CPU并行,一個平臺可以同時運行多個操作系統,并且應用程序可以在相互獨立的空間內運行而互不影響,從而降低了IT 基礎結構總成本,顯著提高計算機的工作效率[3]。在不斷增加的虛擬化技術列表[4]中,屬于虛擬硬件模式的Xen[5~6]成為最引人注目的技術之一。
目前,Xen虛擬機性能監視工具主要包括Xentop,Xenmon[7]和Xenman。其中,Xentop清晰明了地顯示出當前系統運行狀態。但如果Guest Domain有I/O 操作時,Xentop不能正確計算Domain0的CPU 利用率,且沒有提供監測數據的記錄功能。Xenmon統計的CPU 信息不夠全面,不包含虛擬CPU 的性能參數。Xenman:是一款Xen Hypervisor的管理工具,其CPU 性能監視能力有限,不能統計虛擬CPU 的利用率及時間片等基本數據。
針對上述監視工具的不足,本文分析了CPU 利用率評估算法,設計實現了CPU 性能監視系統XCPUMon(Xen CPU Monitor),能準確、全面的獲取各個Domain的CPU信息。
Xen上可以運行多個Domain,其中Domain0 是隨同Xen一起啟動的特權Domain,擁有設備驅動并負責管理Domain1~N(統稱DomainU)的運行。另外,Xen 將物理CPU(Physical CPU,PCPU)虛擬成了多個虛擬CPU(Virtual CPU,VCPU),并通過Domain0的管理將這些VCPU分配給了DomainU 進行使用。因此,XCPUMon 工作在Domain0上,從Domain0 上提取各個Domain(包括Domain0和DomainU)上各種CPU(包括PCPU 和VCPU)的使用信息,如圖1所示。

圖1 XCPUMon結構圖
CPU 性能監視系統(XCPUMon)包括信息采集模塊、信息解析模塊、實時信息模塊、信息記錄模塊和用戶接口模塊。
1)用戶接口模塊:系統通過用戶接口模塊獲取控制信息,包括采樣頻率、采樣信息種類、何時開始對實時信息進行統計等,將這些信息傳遞給實時信息模塊和信息記錄模塊,同時顯示實時信息模塊評估計算出的結果信息。
2)信息采集模塊在Xen上監測各種事件,采集所需要的CPU 相關信息,形成原始數據,傳遞給信息解析模塊。
3)信息解析模塊從原始數據中解析出各個Domain的狀態、各個Domain上各種CPU 的時間片使用情況和I/O操作時內存頁交換的次數等信息,傳遞給實時信息模塊。
4)實時信息模塊根據用戶接口模塊給出的控制信息,實時地將信息解析模塊解析出來的信息,轉化為用戶所需要的信息,包括:1)當前各個Domain的狀態;2)當前各個Domain的各個PCPU 的使用時間、利用率、阻塞時間等信息;3)當前各個Domain的各個VCPU 的使用時間、利用率等信息;4)從開機到現在各個Domain占有的CPU 時間片總數。并將這些信息傳遞給用戶接口模塊和信息記錄模塊。
5)信息記錄模塊則根據用戶接口模塊給出的控制信息,對實時信息模塊所產生的數據進行統計、記錄,形成歷史統計信息。
盡管信息解析模塊已經解析出了各個Domain的狀態信息和各種CPU 的時間片使用情況,但CPU 的利用率還未計算出來。
Domain上CPU 利用率計算的基本原理是通過采樣的方法,獲取一段時間Tinterval里,該Domain 所占有的某種CPU 的時間Tcpu_onsume,然后通過如下公式即可獲得實時的CPU 利用率信息:

由于通過信息解析模塊獲得CPU 的使用時間片累計總和,所以兩次采樣所得到的使用時間片之差-,即是采樣點i到i+1之間所使用的CPU 時間片Tcpu_consume。至于Tinterval,可以使用定時技術,每隔一段時間會自動進行一次采樣,定時器的間隔時間即為Tinterval。但這樣得到的結果并不十分精確,因為針對某一CPU 的連續兩次采樣的時間間隔并不完全等于定時器的時間間隔,而是有一定的誤差,所以在XCPUMon中并沒有直接使用定時器的時間間隔,而是分別記錄下了每次采樣時的準確時間點,然后用兩次采樣時間點之差來作為Tinterval。所以CPU 的利用率計算方法如式(2)所示:

但是這樣的計算方法,對于Guest Domain有I/O 操作執行時,不可以準確的得出CPU 的利用率。由Xen 的“Page-flipping”技術[8]的實施,在 Driver Domain(Domain0)中包含I/O 數據的內存頁就會被替換成guest操作系統提供的一個未使用的頁。而這些內存頁的替換造成了新的系統開銷。如I/O 數據從或向Guest Domain傳輸的過程就造成了新的系統開銷。假設當前系統中有Domain0,Domain1~DomainN (統稱DomainU),而其中Domain0作為Driver Domain。觀察在Domain0處于執行期間Ts時間內與其他各個Domain之間的內存頁交換總次數記為Ns,則一次內存頁的交換產生的COSTs=Ts/Ns,同時通過信息的捕獲可知DomainU 與Domain0之間的內存頁交換次數為NdomU,則Domain0在實際的執行時間中應屬于DomainU 的內存頁交換時間為TdomU=NdomU*COSTs。
所以在計算Domain0的利用率時公式應為

而在計算DomainU 的利用率時公式應為

這樣,當Guest Domain有I/O操作執行(即NdomU!=0時),各個Domain的CPU 的使用率也可以得到正確的顯示。
測試環境如圖2所示。

圖2 測試環境
當前物理主機上運行了三個Domain,其ID 分別是Domain0、Domain1 和Domain2。CPU 性能監視軟件運行在Domain0上。
當Domain1與Domain2都沒有運行任何的應用程序,處于阻塞狀態時,其CPU 利用率基本為0。觀察Domain0的監視結果,如圖3所示。

圖3 XCPUMon Domain0的統計結果
由于Domain0是一個比較特殊的Domain,它是開機時就直接開啟的一個虛擬機,同時其中還包含著一些設備驅動程序,所以Domain0 是一直處于運行狀態,故其占用的CPU 一直大于0。在測試過程中,加入如下操作:終端中的操作、截取屏幕顯示、窗口的切換等,造成突然CPU 的數據處理,如3中所示,在x軸約40處,即第一個CPU 利用率峰值是由于工作區的轉換引起的。由圖3可以得到當前CPU的性能數據分別為:PCPU0的利用率為3.52%,PCPU1的利用率為3.05%,VCPU0 的利用率為3.11%,VCPU1的利用率為3.45%。可以看出PCPU 利用率之和(6.57%)基本等于VCPU利用率之和(6.56%),說 明XCPUMon的監測數據是合理的。

表1 Domain0的統計結果
為了驗證CPU 利用率的準確性,在Domain0上同時運行了Xentop與Xenmon,其結果如表1所示。Xentop顯示的當前Domain0 的CPU 利用率情況為6.7%,與XCPUMon得到的6.6%的數據基本吻合。而Xemon會分頁顯示PCPU0的利用率為3.54%,PCPU1 的利用率為3.01%。與XCPUMon的PCPU0為3.52%,PCPU1為3.05%的數據基本一致。
綜上可知,當Domain1 與Domain2中沒有I/O 操作時,XCPUMon的數據測量是比較準確的。
當Domain2中未運行任何應用程序,Domain1 上運行一個間隔5s打印一次屏幕的測試程序時,XCPUMon 與Xentop的運行結果數據如表2所示。

表2 CPU 利用率的統計結果
Xentop的監視結果表明:當前Domain0 的CPU 利用率高達142.1%,這是由于在I/O 操作密集的應用程序運行時,Xentop統計的CPU 的利用率包含兩個部分:另一部分為有I/O 應用程序運行的Domain1的CPU 利用率,一部分為Domain0在I/O 進程執行的過程中使用“Page-flipping”技術所產生的CPU 利用率。
而XCPUMon 顯示Domain0 的PCPU0 利用率為3.95%,PCPU1 的利用率為3.52%,VCPU0 的利用率為3.65%,VCPU1的利用率為3.81%,總的虛擬機CPU 利用率為7.46%,遠遠低于Xentop中的142.1%,而Domain1中的CPU 利用率為79.51%,遠遠高于Xentop中Domain1的0.1%,這是由于Domain1中開始循環執行Print命令造成的。可見,通過對各個Domain的I/O 操作時的系統開銷的加減,即使當有DomainU 中執行I/O 時,XCPUMon也可以比較準確的顯示出各個Domain的CPU 利用率。
我們下一步的工作:對采樣間隔時間的設置。本系統采用定期采樣的數據統計方法,其采樣頻率對統計出的CPU 性能數據會有一定的影響。在保證系統運行效率高,開銷小的情況下,有效利用實時捕捉數據的統計方式來獲取CPU 性能數據,減小CPU 性能監視軟件對CPU 性能數據的影響。
[1]R.Goldberg,Survey of Virtual Machine Research[J].IEEE Computer,June,1974:34-45.
[2]P.Chen,B.Noble,When Virtual is Better Than Real[Z].HOT-OS,April,2001.
[3]Mendel Rosenblum,Tal Garfinkel,Virtual Machine Monitors:Current Technology and Future Trends[J].IEEE Computer,2005,5:4-10.
[4]J.E.Smith,Ravi Nair,An Overview of Virtual Machine Architecture[M].Morgan Kaufmann Publisher,2004:1-20.
[5]PaulBarham,BorisDragovic,KeirFraser,et al.Xen and the art of virtualization.Proceedings of the nineteenth ACM symposium on Operating Systems Principles,2003:1-20.
[6]D.Gupta and A.Vahdat,“Comparasion of the three CPU schedulers in Xen”,ACM SIGMETRICS Performance Evaluation Review,2007:15-31.
[7]D.Gupta,R.Gardner,and L.Cherkasovah,“Xenmon:Qos monitoring and performance profiling tool”,Technical Report HPL-2005-187,HP Labs,2005.
[8]L.Cherkasova and R.Gardner,“Measuring CPU Overhead for I/O Processing in the Xen Virtual Machine Monitor”,Proceedings of the Annual Technical Usenix Conference,2005.
[9]Nieh,O.Leonard,“Examining VMWare”,Dr.Dobb’s Journal,August,2000.
[10]A.Whitaker,M.Shaw,and S.D.Gribble,“Denali:Lightweight virtual machines for distributed and networked applications,”Technical Report 02-02-01,2002.