分佈式文件系統測試方法與測試工具

非結構化數據、大數據、雲存儲已經毫無爭議地成爲了信息技術發展趨勢和熱點,分佈式文件系統作爲核心基礎被推到了浪潮之巔,廣泛被工業界和學術界熱推。現代分佈式文件系統普遍具有高性能、高擴展、高可用、高效能、易使用、易管理等特點,架構設計的複雜性使得系統測試也非常複雜。從商業產品ISILON, IBRIX, SONAS, Filestore, NetApp GX, Panasas, StorNext, BWFS, Loongestor,到開源系統Lustre, Glusterfs, Moosefs,如何對這些分佈式文件系統進行測試評估並選擇最適合數據應用的產品系統呢?這裏從功能測試和非功能測試兩個方面,簡要地介紹分佈式文件系統的測試方法,並對主要測試工具進行簡要說明,爲產品選型或產品研發提供依據。

分佈式文件系統測試方法
(1)功能性測試(手動+自動化)
文件系統功能主要涉及系統實現的POSIX API,包括文件讀取與訪問控制、元數據操作、鎖操作等功能與API。文件系統的POSIX語義不同,實現的文件系統API也不同,功能測試要能覆蓋到文件系統設計實現的API和功能點。功能測試工作量大,應該重點考慮應用自動化測試方法進行,同時結合adhoc手動測試進行補充,自動化測試工具可以採用LTP、fstest和locktests。

(2)非功能性測試
(2.1)數據一致性測試(手動+自動化)

這裏的數據一致性是指,文件系統中的數據與從外部寫入前的數據保持一致,即寫入數據與讀出數據始終是一致的。數據一致性,能夠表明文件系統可以保證數據的完整性,不會導致數據丟失或數據錯誤,這是文件系統最基本的功能。這部分測試可以應用diff, md5sum編寫腳本進行自動化測試,LTP也提供了數據一致性的測試工具。另外,我們也可以進行Adhoc手動測試,比如編譯軟件源碼、linux kernel來驗證數據的完整性。

(2.2)POSIX語義兼容性測試(自動化)
POSIX (Portable Operating System Interface),表示可移植操作系統接口,由IEEE開發並由ANSI和ISO標準化。POSIX目的在於提高應用程序在各種OS之間的可移植性,符合POSIX標準的應用程序可以通過重新編譯後運行於任何符合POSIX標準的OS上。POSIX的本質是接口,Linux是符合POSIX標準的,VFS也要符合POSIX標準。因此,文件系統只要滿足VFS,就可以說符合POSIX標準,就具備了良好的可移植性、通用性和互操作性。文件系統POSIX兼容性測試採用 LTP (Linux Test Project)和PCTS (Posix Complicance Testing Suite)進行自動化測試,支持Linux90, Linux96, UNIX98 POSIX標準測試。

(2.3)部署方式測試(手動)
目前的分佈式文件通常都具備Scale-out的特點,能夠構建大規模、高性能的文件系統集羣。針對不同應用和解決方案,文件系統部署方式會有顯著不同。部署方式測試需要測試不同場景下的系統部署方式,包括自動安裝配置、集羣規模、硬件配置(服務器、存儲、網絡)、自動負載均衡、高可用HA等。這部分測試不大可能進行自動化測試,需要根據應用場景來設計解決方案和具體部署,然後手動進行測試。

(2.4)可用性測試(手動)

高可用性已經是分佈文件系統不可或缺的特性之一,從而保證數據應用業務的連續性。分佈式文件系統可用性主要包括元數據服務MDS和數據兩部分,元數據服務MDS高可用性通常採用Failover機制或MDS集羣,數據可用性主要包括Replication、Self-heal、網絡簇RAID、糾刪碼等機制。文件系統高可用性對很多應用非常關鍵,需要嚴格進行測試和驗證,這部分測試以手動方式進行。

(2.5)擴展性測試(手動)
NIST給出的雲計算權威定義:按需的自我服務,廣泛的網絡訪問,資源池,快速的彈性能力,可度量的服務。雲存儲是雲計算的一種形式,分佈式文件系統又是雲存儲的基礎,因此彈性擴展能力對於雲計算時代的文件系統尤爲重要。文件系統擴展性測試,主要包括測試系統的彈性擴展能力(擴展與回縮兩方面),以及擴展系統帶來的性能影響,驗證是否具有線性擴展能力。這部分測試也是以手動方式進行。

(2.6)穩定性測試(自動化)

分佈式文件系統一旦上線運行,通常都是不間斷長期運行,穩定性的重要性不言而喻。穩定性測試主要驗證系統在長時間(7/30/180/365x24)運行下,系統是否仍然能夠正常運行、功能是否正常。穩定性測試通常採用自動化方式進行,可以採用LTP、Iozone、Postmark、fio等工具對測試系統產生負載,同時使用功能測試方法驗證功能的正確性。

(2.7)壓力測試(自動化)
分佈式文件系統的負載能力總是存在上限的,當系統過載時,系統就有可能出現性能下降、功能異常、拒絕訪問等問題。壓力測試就是要驗證系統在大壓力下,包括數據多客戶端、高OPS壓力、高IOPS/吞吐量壓力,系統是否仍然能夠正常運行、功能是否正常、系統資源消耗情況,從而爲生產運營提供依據。壓力測試採用自動化方式進行,使用LTP、Iozone、Postmark、fio對系統進行持續增加壓力,同時使用功能測試方法驗證功能正確性,並採用top, iostat, sar, ganglia等工具對系統資源進行監控。

(2.8)性能測試(自動化)
性能是評估一個分佈式文件系統的最爲關鍵的維度,根據文件系統在不同場景下的性能表現,可以判斷文件系統是否適合特定的應用場景,併爲系統性能調優提供依據。文件系統性能主要包括IOPS、OPS、吞吐量三個指標,分別表示小文件、元數據、大數據的處理能力。性能測試採用自動化方式進行,測試系統在不同負載情況下的性能,主要包括小文件、大文件、海量目錄、email server、fileserver、videoserver、webserver等應用下的OPS、IOPS、吞吐量,產生IO負載的工具可採用Iozone、Postmark、Fio、filebench等。

文件系統測試工具簡介
(1) LTP (http://ltp.sourceforge.net/)
LTP(Linux Test Project)是由SGI和IBM聯合發起的項目,提供一套驗證Linux系統可靠性、健壯性、穩定性的測試套件,也可用來進行POSIX兼容測試和功能性測試。LTP提供了2000多個測試工具,可以根據需要自行進行定製。同時,LTP還是一個優秀的自動化測試框架,基於它通過設計測試用例和測試工具可以實現更多功能的測試自動化。

(2) fstest (http://www.tuxera.com/community/posix-test-suite/)
fstest是一套簡化版的文件系統POSIX兼容性測試套件,它可以工作在FreeBSD, Solaris, Linux上用於測試UFS, ZFS, ext3, XFS and the NTFS-3G等文件系統。fstest目前有3601個迴歸測試用例,測試的系統調用覆蓋chmod, chown, link, mkdir, mkfifo, open, rename, rmdir, symlink, truncate, unlink。

(3) locktests (http://nfsv4.bullopensource.org/tools/tests/locktest.php)
locktest用於fcntl鎖功能的壓力測試。運行時,主進程先在指定文件區域設置字節範圍的記錄鎖,然後多個從進程嘗試在該文件區域執行read, write, 加新鎖操作。這些操作結果是可預期的(矩陣如下),如果操作結果與預期一致則測試通過,否則測試失敗。

 Slave type  Test operation       Master advisory locking         mandatory locking  
                                                       
read lock   write lock             read lock   write lock  
thread      set a read lock          Allowed       Allowed               Allowed       Allowed 
                  set a write lock          Allowed       Allowed               Allowed       Allowed 
                                     read          Allowed       Allowed               Allowed       Allowed 
                                     write         Allowed       Allowed               Allowed       Allowed 
process    set a read lock        Allowed       Denied                Allowed       Denied 
                   set a write lock        Denied        Denied                Denied       Denied
                                      read       Allowed       Allowed                Denied      Allowed 
                                      write       Allowed       Allowed                Denied      Denied 

(4) PCTS (http://www.opengroup.org/testing/linux-test/lsb-vsx.html)
PCTS(Posix Complicance Testing Suite),POSIX一致性測試套件,是從POSIX標準出發,通過嚴格的、定量地測試,以驗證、評價、認證操作系統符合POSIX標準的程序的測試軟件。IEEE std2003.1是PCTS的設計標準,常見的PCTS主要有VSX-PCTS、NIST-PCTS、OPTS-PCTS三種實現,上面提供的連接爲VSX-PCTS。

(5) Iozone (http://www.iozone.org)
Iozone是目前應用非常廣泛的文件系統測試標準工具,它能夠產生並測量各種的操作性能,包括read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write等操作。Iozone目前已經被移植到各種體系結構計算機和操作系統上,廣泛用於文件系統性能測試、分析與評估的標準工具。

(6) Postmark (http://www.gtlib.cc.gatech.edu/pub/debian/pool/main/p/postmark/)
Postmark 是由著名的 NAS 提供商 NetApp 開發,用來測試其產品的後端存儲性能。Postmark主要用於測試文件系統在郵件系統或電子商務系統中性能,這類應用的特點是:需要頻繁、大量地存取小文件。 Postmark 的測試原理是創建一個測試文件池。文件的數量和最大、最小長度可以設定,數據總量是一定的。創建完成後, Postmark 對文件池進行一系列的事務( transaction )操作,根據從實際應用中統計的結果,設定每一個事務包括一次創建或刪除操作和一次讀或添加操作,在有些情況下,文件系統的緩存策略可能對性能造成影響, Postmark 可以通過對創建 / 刪除以及讀 / 添加操作的比例進行修改來抵消這種影響。事務操作進行完畢後, Post 對文件池進行刪除操作,並結束測試,輸出結果。 Postmark是用隨機數來產生所操作文件的序號,從而使測試更加貼近於現實應用。輸出結果中比較重要的輸出數據包括測試總時間、每秒鐘平均完成的事務數、在事務處理中平均每秒創建和刪除的文件數,以及讀和寫的平均傳輸速度。 

(7) fio (http://freshmeat.net/projects/fio/)
fio是一個I/O標準測試和硬件壓力驗證工具,它支持13種不同類型的I/O引擎(sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio等),I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs等等。fio可以支持塊設備和文件系統測試,廣泛用於標準測試、QA、驗證測試等,支持Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, HP-UX, Windows等操作系統。

(8) filebench (http://filebench.sourceforge.net/)
Filebench 是一款文件系統性能的自動化測試工具,它通過快速模擬真實應用服務器的負載來測試文件系統的性能。它不僅可以仿真文件系統微操作(如 copyfiles, createfiles, randomread, randomwrite ),而且可以仿真複雜的應用程序(如 varmail, fileserver, oltp, dss, webserver, webproxy )。 Filebench 比較適合用來測試文件服務器性能,但同時也是一款負載自動生成工具,也可用於文件系統的性能。 
發佈了11 篇原創文章 · 獲贊 8 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章