本文介紹如何在Linux/Windows系統中使用FIO工具對文件系統進行吞吐和IOPS的性能測試。
前提條件
您已經創建了待測試的文件系統,并將文件系統掛載到ECS實例上。具體操作,請參見快速入門。
背景信息
本文示例的性能參數,均為Linux/Windows系統下采用FIO工具的測試結果,以此作為文件存儲NAS產品性能指標參考。如果想達到文件存儲NAS的官網性能指標 ,建議使用多臺ECS進行測試。文件存儲NAS的官網性能指標,請參見文件存儲 NAS。
注意事項
性能測試前,請注意以下事項。
吞吐最大不會超過ECS內網帶寬,如果內網帶寬太小,則吞吐會被流量控制。
例如,您購買的是最低容量的通用容量型NAS文件系統,其初始讀吞吐為150 MB/s。如果您的ECS內網帶寬為100 Mbps,則吞吐最大可達12.5 MB/s,如果要測試達到150 MB/s,則需要至少12臺ECS進行測試。 如果您的ECS內網帶寬為1 Gbps,則吞吐最大可達到125 MB/s,如果要測試達到150 MB/s,則需要至少2臺ECS進行測試。
在Linux操作系統中,NFS客戶端對于同時發起的NFS請求數量進行了控制,默認編譯的內核中此參數值為2,嚴重影響性能。請在安裝NFS客戶端后,修改同時發起的NFS請求數量,提高NFS性能。具體操作,請參見如何修改同時發起的NFS請求數量?。
在Windows操作系統中,測試NFS協議NAS文件系統性能會受限于Windows NFS客戶端串行執行單個文件系統的請求,請調整
-numjobs
參數增加FIO測試文件數量。
操作步驟
遠程連接ECS實例。具體操作,請參見ECS連接方式。
安裝FIO測試工具。如果已安裝,請跳過此步驟,直接運行性能測試命令。
Linux操作系統
操作系統
安裝命令
CentOS
sudo yum install fio
Redhat
Alibaba Cloud Linux
Ubuntu
依次執行以下安裝命令:
sudo apt-get update
sudo apt-get install fio
Debian
Windows操作系統
您可以下載msi格式的安裝包進行安裝。FIO安裝包下載地址,請參見fio官網。
運行性能測試命令,具體的命令請參見下文。
關于在Linux系統下的測試命令,請參見Linux系統下的性能測試命令。
關于在Windows系統下的測試命令,請參見Windows系統下的性能測試。
Linux系統下的性能測試命令
本節以通用容量型NAS為例,在單臺Linux ECS中執行以下命令測試性能。
隨機讀IOPS:
fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randread -bs=4K -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt
測試結果樣例:
隨機寫IOPS:
fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randwrite -bs=4K -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt
測試結果樣例:
隨機讀吞吐:
fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randread -bs=1M -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt
測試結果樣例:
隨機寫吞吐:
fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randwrite -bs=1M -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt
測試結果樣例:
Windows系統下的性能測試
本節以通用容量型NAS掛載到Z
盤,FIO可執行文件安裝在C:\Program Files\fio\fio.exe
為例,執行以下命令測試性能。
如果在Windows系統測試NFS協議NAS文件系統性能,受限于Windows NFS客戶端串行執行單個文件系統的請求,請調整-numjobs
參數增加FIO測試文件數量。
隨機讀IOPS:
"c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randread -bs=4K -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\
測試結果樣例:
隨機寫IOPS:
"c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randwrite -bs=4K -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\
測試結果樣例:
隨機讀吞吐:
"c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randread -bs=1M -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\
測試結果樣例:
隨機寫吞吐:
"c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randwrite -bs=1M -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\
測試結果樣例:
FIO參數說明
測試命令中有關FIO各參數含義的說明如下表所示。
參數 | 說明 |
direct | 表示是否使用direct I/O。默認值:1。
|
iodepth | 表示測試時的IO隊列深度。例如 |
rw | 表示測試時的讀寫策略。您可以設置為:
|
ioengine | 表示測試時FIO選擇哪種I/O引擎,通常選擇libaio,更符合日常應用模式,更多的選擇請查閱FIO官方文檔。 |
bs | 表示I/O單元的塊大小(block size)。讀取和寫入的值可以以read、write格式單獨指定,其中任何一個都可以為空以將該值保留為其默認值。 |
size | 表示測試文件大小。 FIO會將指定的文件大小全部讀/寫完成,然后才停止測試,除非受到其他選項(例如運行時)的限制。如果未指定該參數,FIO將使用給定文件或設備的完整大小。也可以將大小作為1到100之間的百分比給出。例如指定size=20%,FIO將使用給定文件或設備完整大小的20%空間。 |
numjobs | 表示測試的并發線程數。 |
runtime | 表示測試時間,即FIO運行時長。 如果未指定該參數,則FIO會持續將上述size指定大小的文件,以每次bs值為塊大小讀/寫完。 |
group_reporting | 表示測試結果顯示模式。 如果指定該參數,測試結果會匯總每個進程的統計信息,而不是以不同任務來統計信息。 |
directory | 表示待測試的文件系統掛載路徑。 |
name | 表示測試任務名稱,可以隨意設定。 |
有關各參數的更多說明,請參見FIO MAN手冊。
相關問題
更多有關NAS性能方面的FAQ,請參見性能說明FAQ。