2014年7月IBM釋出了一篇研究報告《Linux容器和虛拟機的性能比較》。該報告對實體機、虛拟機以及Linux Docker容器的性能進行了精準的量化及比較。
對于性能測試可以有很多方面,不過對于本文所關注的隻是虛拟化執行個體與實體機之間性能開銷的差距,因為與實體機相比較可以更直覺地反映出資源消耗性程序對系統資源的占用率。報告中選用了吞吐量以及延時作為兩個核心性能名額進行采集,這兩個名額是性能測試用例中最為典型且易于分析的要素。
實驗裝置采用的是IBM x3650 M4伺服器。具體參數如下:
CPU:兩個2.4-3.0 GHz Intel Xeon E5-2665,共16核
RAM:256 GB
LINUX:Ubuntu 13.10(saucy)64位,核心版本3.11.0
Docker 1.0,QEMU 1.5.0,libvirt 1.1.1
測試過程中節能管理被禁用,為了充分發揮系統性能。
利用微基準測試來單獨測量CPU、記憶體、網絡和存儲的資源消耗,并且也對實際的應用運作場景進行測試,應用測試對象選取了:redis和mysql。
測試場景選用了:
PXZ壓縮計算:壓縮算法是雲服務中的常用元件,PXZ是基于LZMA算法的平行無損壓縮工具,使用liblzma庫。LZMA是一個Deflate和LZ77算法改良和優化後的壓縮算法,2001年被首次應用于7-Zip壓縮工具中。
Linpack:是國際上最流行的用于測試高性能計算機系統浮點性能的benchmark。通過對高性能計算機采用高斯消元法求解一進制N次稠密線性代數方程組的測試,評價高性能計算機的浮點性能。
RandomAccess:測試記憶體在随機的通路壓力下的性能表現。
Stream:是一個簡單的基線測試程式,用于測試持續的記憶體帶寬性能。
測試結果如下表所示:
在CPU、記憶體測試場景中,Docker作為輕量級容器性能表現優秀,隻有很小的性能損耗。
網絡配置
網絡小包100byte傳輸時延
網絡大包傳輸效率
存儲配置
順序IO吞吐率
随機IO吞吐率
Redis吞吐率
mysql吞吐率
從以上的結果中,我們得出以下結論:
虛拟機和容器基本上沒有CPU和記憶體的額外開銷,他們隻會影響I/O和作業系統的互動,這是因為每次I/O操作都需要額外的周期,是以頻繁的小規模I/O會對性能有較大影響。這類消耗增大了I/O延時,降低了CPU的循環效率,降低了系統的整體吞吐率。而事與願違的是,絕大多數應用處理的還都是小I/O,這會影響容器的運作效率。
Docker加入了諸如分層鏡像以及易用NAT等新特性,但這些特性的性能代價很高,是以Docker的預設設定性能不會超過虛拟機。
盡管KVM虛拟機具有良好的性能,但是配置性差是它的一個弱點。虛拟機要想達到較高的性能需要對記憶體、CPU、緩存進行大量的定制化配置,并需要反複的調優和試錯,這種複雜的特質會對後續的運維工作造成較大的困擾。