Minecraft服務(wù)端性能測(cè)試:容器與虛擬化(host)

一、測(cè)試環(huán)境
測(cè)試分為四組:宿主機(jī)、LXC容器、虛擬機(jī)(12線程)、虛擬機(jī)(6線程)。虛擬機(jī)的CPU類型改為host,其他方面與容器與虛擬化(kvm64)相同。
二、測(cè)試項(xiàng)目
1.????偵測(cè)器音符盒
增加了有效層數(shù)。

2.??? 漏斗

3.??? 村民
以村民代表實(shí)體。嘗試降低村民走動(dòng)帶來(lái)的mspt波動(dòng)。

4.??? TNT
用命令方塊循環(huán)填充玻璃、生成TNT爆炸。方塊從雪塊改成玻璃,原因是玻璃被炸不掉落物品,也不產(chǎn)生光照更新。

5.??? 活塞
完全重構(gòu)了活塞測(cè)試。

五項(xiàng)測(cè)試中,僅有活塞測(cè)試包含了光照更新。后面我們也會(huì)看到,服務(wù)端僅在活塞測(cè)試中有明顯的多線程調(diào)用。
三、測(cè)試流程
啟動(dòng)計(jì)算機(jī)。
啟動(dòng)容器或虛擬機(jī)(如果是容器或虛擬機(jī)測(cè)試)。
啟動(dòng)Minecraft服務(wù)端。每次啟動(dòng)均使用完全相同的存檔,而不是上次測(cè)試結(jié)束后的存檔。
tick warp 12000
player Steve spawn at -864 32 -864 #偵測(cè)器音符盒
tick warp 12000 #記錄輸出的mspt
tick warp 12000 #記錄輸出的mspt
tp Steve 1000 256 1016 #漏斗
tick warp 12000 #記錄輸出的mspt
tick warp 12000 #記錄輸出的mspt
tp Steve 1000 24 -1000 #村民
tick warp 12000 #記錄輸出的mspt
tick warp 12000 #記錄輸出的mspt
tp Steve -1000 256 1000 #TNT
tick warp 12000 #記錄輸出的mspt
tick warp 12000 #記錄輸出的mspt
tp Steve 2000 7 0 #活塞
tick warp 12000 #記錄輸出的mspt
tick warp 12000 #記錄輸出的mspt
停止Minecraft服務(wù)端。
關(guān)閉容器或虛擬機(jī)(如果是容器或虛擬機(jī)測(cè)試)。
關(guān)閉計(jì)算機(jī)。
上述流程在每組中重復(fù)了16次,共64次。
接下來(lái)看看這種流程中的CPU占用。圖6由上至下分別是宿主機(jī)、LXC容器、虛擬機(jī)(12線程)、虛擬機(jī)(6線程)的CPU占用情況。明顯可見(jiàn),前四項(xiàng)測(cè)試均為12線程處理器典型的單線程占用,而活塞測(cè)試調(diào)用了更多的線程,合理推斷這些額外的線程被用于計(jì)算光照更新。此外,宿主機(jī)與容器在活塞測(cè)試中的占用更低(20%-25%),虛擬機(jī)(6線程)占用略高(~30%),虛擬機(jī)(12線程)占用最高(~35%)。




圖6 CPU占用情況
四、測(cè)試結(jié)果
測(cè)試得到的數(shù)據(jù)如下。

做可視化處理。

將各項(xiàng)測(cè)試的數(shù)據(jù)除以宿主機(jī)的平均值得到相對(duì)值。

做可視化處理。

五、總結(jié)
五項(xiàng)測(cè)試中LXC容器均有不同的性能衰減。偵測(cè)器音符盒、漏斗、TNT測(cè)試中虛擬機(jī)與宿主機(jī)性能幾乎完全相同,村民測(cè)試中虛擬機(jī)性能表現(xiàn)甚至優(yōu)于宿主機(jī),但在活塞測(cè)試中虛擬機(jī)有約10%的性能衰減,6線程虛擬機(jī)表現(xiàn)比12線程虛擬機(jī)更好,但差距不大。
至于為什么在活塞測(cè)試中虛擬機(jī)占用更高、表現(xiàn)更差呢?我暫時(shí)沒(méi)有什么頭豬。