操作須知
測試性能時,若分區的初始磁柱編號是非4KB對齊,則對性能影響較大,請先確保分區的初始磁柱編號已經4KB對齊,再開始測試。
注意
測試共享云硬盤性能時,必須滿足以下要求:
共享云硬盤必須同時掛載至多臺云主機(彈性云主機或者物理機)。
當共享云硬盤掛載至多臺彈性云主機時,這些彈性云主機必須位于同一個策略為“反親和性”的云主機組內。
如果彈性云主機不滿足反親和性,則共享云硬盤性能無法達到最優。
LINUX
CentOS 6.5等較老版本的操作系統用fdisk創建分區時,默認為非4KB對齊選擇初始磁柱編號,對性能有較大的影響,建議針對該類操作系統,在創建分區時4KB對齊選取初始磁柱編號。
本文以“CentOS 7.2 64位”操作系統為例,不同操作系統的格式化操作可能不同,本文僅供參考,具體操作步驟和差異請參考對應操作系統的產品文檔。
測試性能前請先安裝fio性能測試工具。
1、登錄云主機并切換為root用戶。
2、進行性能測試之前,請執行以下步驟,確認磁盤分區的初始磁柱編號是否已經4KB對齊。
fdisk -lu
回顯類似如下信息:
[root@ecs-centos sdc]# fdisk -lu
Disk /dev/xvda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7db77aa5
Device Boot Start End Blocks Id System
/dev/xvda1 * 2048 20968919 10483436 83 Linux
Disk /dev/xvdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/xvdc: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x3cf3265c
Device Boot Start End Blocks Id System/dev/xvdc1 2048 41943039 20970496 83 Linux
若start對應的初始磁柱編號能被8整除,則表示4KB對齊,請執行3進行性能測試。
若start對應的初始磁柱編號不能被8整除,則表示未4KB對齊,如需繼續測試請刪除原有分區,重新按照4KB對齊選擇初始磁柱編號。
說明
刪除分區并重新按照4KB對齊選取初始磁柱編號會導致磁盤原有數據的丟失,請謹慎操作。
3、執行以下命令,使用fio工具測試磁盤性能。
測試隨機寫IOPS:fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Write_IOPS_Test
測試隨機讀IOPS:fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_IOPS_Test
測試寫吞吐量:fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Write_BandWidth_Test
測試讀吞吐量:fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Read_BandWidth_Test
測試單隊列隨機讀時延:fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=60 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_LATE_Test
說明
使用fio工具進行裸盤性能測試時,不能在已創建文件系統的磁盤上測試,因為fio性能測試會破壞文件系統,導致磁盤變為只讀,需要刪除后重新購買。
請盡量不要在保存業務數據的磁盤上進行測試。如果需要,請按照以下建議操作:
在測試開始前對磁盤數據進行備份,防止誤操作造成數據丟失。
在測試命令中指定filename參數為某個文件,例如-filename=/opt/fiotest/fiotest.txt。
測試fio相關參數說明如下表所示。
| 參數 | 說明 |
|---|---|
| direct | 定義是否使用direct IO,可選值如下: 值為0,表示使用buffered IO 值為1,表示使用direct IO |
| iodepth | 定義測試時的IO隊列深度,默認為1。此處定義的隊列深度是指每個線程的隊列深度,如果有多個線程測試,意味著每個線程都是此處定義的隊列深度。fio總的IO并發數=iodepth * numjobs。 |
| rw | 定義測試時的讀寫策略,可選值如下: 隨機讀:randread 隨機寫:randwrite 順序讀:read 順序寫:write混合 隨機讀寫:randrw |
| ioengine | 定義fio如何下發IO請求,通常有同步IO和異步IO: 同步IO一次只能發出一個IO請求,等待內核完成后才返回。這樣對于單個線程IO隊列深度總是小于1,但是可以透過多個線程并發執行來解決。通常會用16~32個線程同時工作把IO隊列深度塞滿。 異步IO則通常使用libaio這樣的方式一次提交一批IO請求,然后等待一批的完成,減少交互的次數,會更有效率。 |
| bs | 定義IO的塊大小(block size),單位是k、K、m和M等,默認IO塊大小為4 KB。 |
| size | 定義測試IO操作的數據量,若未指定runtime這類參數,fio會將指定大小的數據量全部讀/寫完成,然后才停止測試。該參數的值,可以是帶單位的數字,比如size=10G,表示讀/寫的數據量為10GB;也可是百分數,比如size=20%,表示讀/寫的數據量占該設備總文件的20%的空間。 |
| numjobs | 定義測試的并發線程數。 |
| runtime | 定義測試時間。如果未配置,則持續將size指定的文件大小,以每次bs值為分塊大小讀/寫完。 |
| group_reporting | 定義測試結果顯示模式,group_reporting表示匯總每個進程的統計信息,而非以不同job匯總展示信息。 |
| filename | 定義測試文件(設備)的名稱。 此處選擇文件,則代表測試文件系統的性能。例如:-filename=/opt/fiotest/fiotest.txt 此處選擇設備名稱,則代表測試裸盤的性能。例:-filename=/dev/vdb1 須知: 如果在已經分區、并創建文件系統,且已寫入數據的磁盤上進行性能測試,請注意filename選擇指定文件,以避免覆蓋文件系統和原有數據。 |
| name | 定義測試任務名稱。 |