qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          解讀分布式對象存儲系統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

          吞吐量測試
            測試須知
            關于SATA硬盤的吞吐量
            普通7200轉SATA硬盤的吞吐量數據,對比一下后面SSD硬盤的吞吐量數據,說明傳統磁盤順序讀寫的能力還是相當出色的。
            關于SSD硬盤的吞吐量
            大數據塊(512KB以上)順序讀,吞吐量可達250MB/s-270MB/s,順序寫,吞吐量可達200MB/s-210MB/s。
            小數據塊(16KB)順序讀,吞吐量也有140MB/s,順序寫大概120MB/s-130MB/s。
            無優化sheepdog的吞吐量
            在軟硬件不做任何優化的情況下(不綁定雙網卡、不使用virtio、以默認參數啟動sheepdog),sheepdog的吞吐量數據比較低:
            順序寫
            數據塊大小為16KB,吞吐量13-14MB/s
            數據塊大小在256KB-4MB之間,吞吐量30-35MB/s
            順序讀
            數據塊大小為16KB,吞吐量25MB/s左右,如果數據文件大小超過可用內存,降低到20MB/s
            數據塊大小在512KB-4MB之間,吞吐量125-140MB/s,如果數據文件大小超過可用內存,降低到80MB/s以下
            以下兩圖,上圖為數據文件512MB的測試數據,下圖為數據文件4GB的測試數據
            注,不使用virtio方式啟動sheepdog的命令行參數為:
            qemu-system-x86_64 --enable-kvm -m 4096 -smp 4 -drive file=sheepdog:mint,index=0 \ -drive file=sheepdog:data,index=1 -vnc :1 -daemonize
            吞吐量測試1:不使用對象緩存
            從測試結果看,使用virtio方式啟動客戶機有利有弊:
            提高了中小數據塊讀寫操作的吞吐量
            當數據塊大小在16KB-512KB之間時,順序讀的吞吐量提高10MB/s-30MB/s不等
            當數據塊大小在16KB-256KB之間時,順序寫的吞吐量提高5MB/s-8MB/s不等
            大大降低了超大數據塊讀操作的吞吐量,至于為何virtio在這種情況下會降低測試的吞吐量,尚不清楚
            當數據塊大小達到2MB或者4MB時,順序讀的吞吐量降低80MB/s-90MB/s
            以下兩圖,上圖為512MB下的測試數據,下圖為該情況下,與無優化sheepdog讀寫512MB數據文件兩者吞吐量之差。
            吞吐量測試2:使用對象緩存
            使用了對象緩存,順序讀寫的吞吐量與數據文件大小沒有直接關系,即使數據文件大小超過可用內存。
            同時也使用了virtio,并沒有因此降低讀取大數據塊的吞吐量。
            由于SSD硬盤的特點,數據塊越大,吞吐量越高,在數據塊大小為4MB的情況下,順序讀的吞吐量可達240MB/s,順序寫也有130MB/s;如果數據塊大小只有16KB,順序讀和順序寫的吞吐量分別只有55MB/s和35MB/s。
            總結sheepdog性能
            以上為sheepdog集群節點數為6個,且各節點都只掛載一塊SATA硬盤的情況下測得的結果,如果增加集群節點數,并且每個節點都掛滿硬盤,IOPS應該會更高,而吞吐量取決于緩存和網絡帶寬,應該不會有明顯變化。

          posted on 2014-07-15 10:09 順其自然EVO 閱讀(247) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 蒲江县| 防城港市| 定结县| 安龙县| 专栏| 隆昌县| 江阴市| 堆龙德庆县| 察雅县| 延津县| 铁岭市| 上栗县| 襄城县| 纳雍县| 祁连县| 永寿县| 江安县| 石阡县| 清远市| 北流市| 新泰市| 扬州市| 门源| 金塔县| 揭阳市| 罗田县| 仪征市| 吴忠市| 永丰县| 平凉市| 旌德县| 防城港市| 微博| 禄丰县| 大埔区| 合肥市| 商水县| 崇州市| 丹寨县| 山阳县| 马尔康县|