解讀分布式對象存儲系統Sheepdog性能測試
Sheepdog是一個分布式對象存儲系統,專為虛擬機提供塊存儲,號稱無單點、零配置、可線性擴展(省略更多優點介紹)。本文主要關注其性能究竟如何,測試版本為目前的最新穩定版0.7.4。
測試環境
節點數量:6個
磁盤:各節點都配備7200轉SATA硬盤,型號WDC WD10EZEX-22RKKA0,容量為1TB,另外測試節點(即用于啟動虛擬客戶機的宿主機)多配置一塊SSD硬盤,型號INTEL SSDSA2CW300G3,容量為300GB
網絡:測試節點配備PCI-E雙千兆網卡,通過bonding進行負載均衡
文件系統:ext4fs,掛載參數:rw,noatime,barrier=0,user_xattr,data=writeback
sheepdog集群
可用空間:6個節點各分配100GB,總共600GB
對象副本數量:3個,客戶機實際最大可用空間為200GB,接近項目規劃的容量
對象緩存:使用SSD硬盤,分配256GB,可完全緩存客戶機文件系統,隨測試項目需要掛載或卸載
虛擬客戶機
資源:4GB內存,4個邏輯CPU
使用qemu 1.7啟動,支持KVM加速、virtio
兩大測試項目
IOPS:主要考察較小數據塊隨機讀和寫的能力,測試工具fio(sudo apt-get install fio),測試文件固定為150GB
吞吐量:主要考察較大數據塊順序讀或者寫的能力,測試工具iozone(sudo apt-get install iozone3),測試文件從64MB倍數遞增到4GB,如沒有特別說明,測試結果取自操作512MB的數據文件
除特別說明,qemu啟動虛擬客戶機命令如下:
qemu-system-x86_64 --enable-kvm -m 4096 -smp 4 -drive file=sheepdog:mint,if=virtio,index=0 \ -drive file=sheepdog:data,if=virtio,index=1 -net nic,model=virtio -net user -vnc :1 -daemonize
IOPS測試
測試須知
關于SATA硬盤的IOPS
測試用的普通7200轉SATA硬盤,官方公布其平均尋道時間10.5毫秒,所以,根據以下公式,理論上的IOPS值最多只有65。
實測結果,在單線程同步IO的情況下(下圖深藍線),也是65,在多任務(紫線)或者使用異步IO(黃線)的情況下,由于操作系統IO調度,IOPS能夠達到80到100之間。如果進行讀寫操作的文件遠遠小于SATA磁盤大小,縮小了存儲單元尋址范圍,減少了全磁盤尋道時間,也能提高IOPS,例如,測試文件大小占磁盤大小的1/8的時候,IOPS最高在90左右(淺藍線)。
關于SSD硬盤的IOPS
測試用的SSD硬盤,在單線程同步IO的情況下,IOPS最多能夠達到9000左右(下圖深藍線),在多任務(紫線)或者異步IO(黃線)的情況下,最多能夠達到40000-50000之間。由于構造原理不同于傳統磁盤,減小測試文件大小并不能明顯提高IOPS。
關于讀寫比例
由于大多數業務場景既有讀操作,也有寫操作,而且一般讀操作比寫操作多很多,因此,讀寫混合測試項目中的讀寫比例設定為4:1。一般業務很少有完全隨機寫的情況,因此不進行只寫測試。
關于電梯算法
虛擬的客戶機操作系統的IO調度算法使用noop,網上有資料能夠提高IOPS,但是實測效果不明顯,因此最終報告并沒有把它單列出來。
IOPS測試1:不使用對象緩存,只讀測試
單線程同步IO的情況下(下圖深藍線),sheepdog的IOPS差不多達到100,比單節點單SATA硬盤高,究其原因:客戶機中的測試文件為150GB,共有三個副本,即共占450GB,集群有6個節點,平均每個節點75GB,而各個節點所在磁盤容量為1TB,僅占其1/13,因此,無其它IO任務的情況下,IOPS會比全磁盤隨機操作高。
減少客戶機的測試文件大小為原來的1/8,即19GB,IOPS能夠達到130-140左右,驗證了無其它IO任務的情況下,測試文件越小,IOPS越高(淺藍線)。
恢復客戶機的測試文件為150GB,在多任務(線程數量為10,紫線)或者異步IO(隊列深度為10,黃線)的情況下,IOPS可達230-250。
250左右是否該sheepdog集群的極限?進一步換其它numjob和iodepth的組合進行測試,答案是肯定的,測試結果都在250左右,以下是線程數量為8,異步IO隊列深度分別為1、4、16、64、256的測試結果,線程數量增加到16,測試數據并沒有提高。
IOPS測試2:使用對象緩存,只讀測試
單線程同步IO、使用對象緩存且緩存命中率100%的情況下(下圖藍線),sheepdog的IOPS最高可達6000,對比相同條件下SSD硬盤的測試結果(最高9000),還是有些損耗。
通過多任務(紫線)或者異步IO(黃線)的方式提高并發IO數量,在緩存命中率100%的情況下,IOPS可以提高到40000-50000,基本與相同條件下SSD硬盤的測試結果相當。
注意上圖為對數刻度,且沒有數據值,很難比較數值大小,下圖省略了一半數據塊,但是標上了數據值。
之所以強調緩存命中率,是因為在不完全命中緩存的時候,IOPS下降很厲害,低于80%的話,可能還不如沒有對象緩存。下圖是sheepdog對象緩存命中率與IOPS的關系圖,其中,測試的數據塊大小從512B倍數遞增到512KB,緩存命中率是在測試過程中,根據sheepdog的cache目錄中已有的對象文件數量估算的平均值,IOPS值是讀取數據塊操作在估算的緩存命中率條件下測量的平均值。
50000是否該sheepdog集群的極限?仿照上面的方法進行測試,答案也是肯定的,測試結果都在50000以內,以下是線程數量為8,異步IO隊列深度分別為1、4、16、64、256的測試結果,線程數量增加到16,測試數據并沒有提高。
IOPS測試3:不使用對象緩存,讀寫混合測試
讀寫混合測試的IOPS比只讀測試的結果,總的來說要低一些,而且起伏較大,需要多次測試計算其平均值。
單線程同步IO的情況下(下圖深藍線),能夠達到80-100。
減少客戶機的測試文件大小為原來的1/8,即19GB,IOPS能夠達到100-120(淺藍線)。
恢復客戶機的測試文件為150GB,在多任務(線程數量為10,紫線)或者異步IO(隊列深度為10,黃線)的情況下,IOPS大多在180-250之間,但也有時候只到160左右。
IOPS測試4:使用對象緩存,讀寫混合測試
單線程同步IO、使用對象緩存且緩存命中率100%的情況下,IOPS差不多達到4000。
通過多任務或者異步IO的方式提高并發IO數量,在緩存命中率100%的情況下,IOPS可達10000-20000之間。
注意上圖為對數刻度,且沒有數據值,下圖省略了一半數據塊,但是標上了數據值。可以看到,大數據塊讀寫混合的情況下,多任務或異步IO的IOPS可能還不如單任務同步IO
posted on 2014-07-15 10:09 順其自然EVO 閱讀(247) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄