docker性能測試


測試環境:
操作系統:CentOS7、openstack nova-docker啟動的centos7、openstack環境啟動的centos7虛擬機
CPU:Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz * 2
內存:Micron 2133MHz 16G * 8
網卡:Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection
關鍵字:Linpack、netperf、iometer

docker與虛擬機計算效率比較

在測試中是通過運算Linpack程序來獲得計算能力數據的。結果如下圖所示: 

圖中從左往右分別是物理機、docker和虛擬機的計算能力數據。可見docker相對於物理機其計算能力幾乎沒有損耗,而虛擬機對比物理機則有着非常明顯的損耗。虛擬機的計算能力損耗在50%左右。 
為什么會有這么大的性能損耗呢?一方面是因為虛擬機增加了一層虛擬硬件層,運行在虛擬機上的應用程序在進行數值計算時是運行在Hypervisor虛擬的CPU上的;另外一方面是由於計算程序本身的特性導致的差異。虛擬機虛擬的cpu架構不同於實際cpu架構,數值計算程序一般針對特定的cpu架構有一定的優化措施,虛擬化使這些措施作廢,甚至起到反效果。比如對於本次實驗的平台,實際的CPU架構是2塊物理CPU,每塊CPU擁有16個核,共32個核,采用的是NUMA架構;而虛擬機則將CPU虛擬化成一塊擁有32個核的CPU。這就導致了計算程序在進行計算時無法根據實際的CPU架構進行優化,大大減低了計算效率。

docker與虛擬機內存訪問效率比較

內存訪問效率的比較相對比較復雜一點,主要是內存訪問有多種場景: 
(1)大批量的,連續地址塊的內存數據讀寫。這種測試環境下得到的性能數據是內存帶寬,性能瓶頸主要在內存芯片的性能上; 
(2)隨機內存訪問性能。這種測試環境下的性能數據主要與內存帶寬、cache的命中率和虛擬地址與物理地址轉換的效率等因素有關。 
以下將主要針對這兩種內存訪問場景進行分析。在分析之前我們先概要說明一下docker和虛擬機的內存訪問模型差異。下圖是docker與虛擬機內存訪問模型: 

可見在應用程序內存訪問上,虛擬機的應用程序要進行2次的虛擬內存到物理內存的映射,讀寫內存的代價比docker的應用程序高。 
下圖是場景(1)的測試數據,即內存帶寬數據。左圖是程序運行在一塊CPU(即8核)上的數據,右圖是程序運行在2塊CPU(即16核)上的數據。單位均為GB/s。 
 
從圖中數據可以看出,在內存帶寬性能上docker與虛擬機的性能差異並不大。這是因為在內存帶寬測試中,讀寫的內存地址是連續的,大批量的,內核對這種操作會進行優化(數據預存取)。因此虛擬內存到物理內存的映射次數比較少,性能瓶頸主要在物理內存的讀寫速度上,因此這種情況docker和虛擬機的測試性能差別不大; 
內存帶寬測試中docker與虛擬機內存訪問性能差異不大的原因是由於內存帶寬測試中需要進行虛擬地址到物理地址的映射次數比較少。根據這個假設,我們推測,當進行隨機內存訪問測試時這兩者的性能差距將會變大,因為隨機內存訪問測試中需要進行虛擬內存地址到物理內存地址的映射次數將會變多。結果如下圖所示。 

左圖是程序運行在一個CPU上的數據,右圖是程序運行在2塊CPU上的數據。從左圖可以看出,確實如我們所預測的,在隨機內存訪問性能上容器與虛擬機的性能差距變得比較明顯,容器的內存訪問性能明顯比虛擬機優秀;但出乎我們意料的是在2塊CPU上運行測試程序時容器與虛擬機的隨機內存訪問性能的差距卻又變的不明顯。 
針對這個現象,IBM的論文給出了一個合理解釋。這是因為當有2塊CPU同時對內存進行訪問時,內存讀寫的控制將會變得比較復雜,因為兩塊CPU可能同時讀寫同一個地址的數據,需要對內存數據進行一些同步操作,從而導致內存讀寫性能的損耗。這種損耗即使對於物理機也是存在的,可以看出右圖的內存訪問性能數據是低於左圖的。2塊CPU對內存讀寫性能的損耗影響是非常大的,這個損耗占據的比例遠大於虛擬機和docker由於內存訪問模型的不同產生的差異,因此在右圖中docker與虛擬機的隨機內存訪問性能上我們看不出明顯差異。

docker與虛擬機啟動時間及資源耗費比較

上面兩個小節主要從運行在docker里的程序和運行在虛擬機里的程序進行性能比較。事實上,docker之所以如此受到開發者關注的另外一個重要原因是啟動docker的系統代價比啟動一台虛擬機的代價要低得多:無論從啟動時間還是從啟動資源耗費角度來說。docker直接利用宿主機的系統內核,避免了虛擬機啟動時所需的系統引導時間和操作系統運行的資源消耗。利用docker能在幾秒鍾之內啟動大量的容器,這是虛擬機無法辦到的。快速啟動、低系統資源消耗的優點使docker在彈性雲平台和自動運維系統方面有着很好的應用前景。

docker與虛擬機網絡性能比較

采用netperf軟件,分別使用TCP_STREAM | UDP_STREAM | TCP_RR | UDP_RR 四中模式測試性能和延遲

 

 

 

 

 

docker與虛擬機存儲性能比較

采用iometer分別以順序讀、隨機讀、順序寫、隨機寫四中模式對如下3中場景進行測試,測試過程中文件系統采用ext4 測試前預熱30s,每一種測試用例測試時間3分鍾

 

 

 

 

參考文獻

cbl709《docker與虛擬機性能比較》2015-02-26

@線超博《Native、Docker容器和KVM虛擬機網絡性能對比測試》


免責聲明!

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



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