全部產品
Search
文件中心

Elastic Compute Service:測試Block Storage效能

更新時間:Sep 30, 2024

通過測試Block Storage效能,可以協助您更好地理解存放裝置的能力,並對其進行相應的最佳化和調整,以確保最佳效能。本文介紹如何在Linux系統中使用開源測試載入器FIO測試Block Storage的關鍵效能指標,包括IOPS(每秒輸入/輸出操作次數)、輸送量(資料轉送速率)和時延(回應時間)。

說明

FIO(Flexible I/O Tester)是一個開源的、強大的I/O效能測試工具,可以用來對存放裝置進行隨機讀寫、順序讀寫等負載測試。

操作步驟

重要
  • 雖然測試裸盤可以獲得較為真實的Block Storage盤效能,但會破壞檔案系統結構,請在測試前提前建立快照做好資料備份。具體操作,請參見建立快照

  • 強烈建議不要將作業系統所在的系統硬碟或含有重要資料的雲端硬碟作為測試對象,以避免資料丟失。建議在新建立的、無重要資料的資料盤或臨時盤上使用工具測試Block Storage效能。

  • 如果需要對系統硬碟進行裸盤壓測,壓測完成後建議重設系統後再部署業務使用,避免壓測活動引入的潛在問題,從而確保系統的長期穩定運行。

  • 效能測試結果均在測試環境下獲得,僅供參考。在真實生產環境中,受網路環境、並發訪問量等因素影響,雲端硬碟的效能表現可能存在差異,請您以實際情況為準。

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 查詢Block Storage裝置是否已經4 KiB對齊。

    說明

    Block Storage裝置4 KiB對齊可以減少資料轉送的開銷,提高I/O效能。

    sudo fdisk -lu

    返回的結果中,Start值能被8整除即是4 KiB對齊。否則,請完成4 KiB對齊後再繼續效能測試。

    Device     Boot Start      End  Sectors Size Id Type
    /dev/vda1  *     2048 83886046 83883999  40G 83 Linux
  3. 運行以下命令,安裝libaio庫和測試載入器FIO。

    sudo yum install libaio libaio-devel fio -y
  4. 運行以下命令,切換路徑。

    cd /tmp
  5. 運行效能測試命令,具體的命令請參見下文。

雲端硬碟效能測試命令

說明

樣本命令中的參數取值僅供參考,請您根據實際情況替換。例如,如果需要測試的雲端硬碟裝置名稱為/dev/vdb,則將以下樣本命令中的/dev/your_device替換為/dev/vdb。更多資訊,請參見FIO參數說明

  • 測試雲端盤的隨機寫IOPS:

    sudo fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Write_Testing
  • 測試雲端盤的隨機讀IOPS:

    sudo fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Read_Testing
  • 測試雲端盤的順序寫輸送量:

    sudo fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Write_PPS_Testing
  • 測試雲端盤的順序讀輸送量:

    sudo fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Read_PPS_Testing
  • 測試雲端盤的隨機寫時延:

    sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Write_Latency_Testing
  • 測試雲端盤的隨機讀時延:

    sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Read_Latency_Testing

關於各雲端硬碟詳細的測試步驟,請參見測試ESSD雲端硬碟IOPS效能

本地碟效能測試命令

以下測試命令適用於NVMe SSD本地碟和SATA HDD本地碟。

說明

樣本命令中的參數取值僅供參考,請您根據實際情況替換。例如,如果需要測試的雲端硬碟裝置名稱為/dev/vdb,則將以下樣本命令中的/dev/your_device替換為/dev/vdb。更多資訊,請參見FIO參數說明

  • 測試本地碟的隨機寫IOPS:

    sudo fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 測試本地碟的隨機讀IOPS:

    sudo fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 測試本地碟的順序寫輸送量:

    sudo fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 測試本地碟的順序讀輸送量:

    sudo fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 測試本地碟的隨機寫時延:

    sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 測試本地碟的隨機讀時延:

    sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 測試本地碟的順序寫時延:

    sudo fio -direct=1 -iodepth=1 -rw=write -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 測試本地碟的順序讀時延:

    sudo fio -direct=1 -iodepth=1 -rw=read -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test

關於i4p執行個體本地碟效能的測試步驟,請參見測試i4p執行個體本地碟效能

FIO參數說明

測試命令中有關FIO各參數含義的說明如下表所示。

參數

說明

direct

表示是否使用direct I/O。預設值:1。

  • 值為1:表示使用direct I/O,忽略I/O緩衝,資料直接寫入。

  • 值為0:表示不使用direct I/O。

iodepth

表示測試時的IO隊列深度。例如-iodepth=128表示FIO控制請求中的I/O最大個數為128。

rw

表示測試時的讀寫策略。您可以設定為:

  • randwrite:隨機寫。

  • randread:隨機讀。

  • read:順序讀。

  • write:順序寫。

  • randrw:混合隨機讀寫。

ioengine

表示測試時FIO選擇哪種I/O引擎,通常選擇libaio,更符合日常應用模式,更多的選擇請查閱FIO官方文檔。

bs

表示I/O單元的塊大小(block size)。預設值:4 KiB。讀取和寫入的值可以以read、write格式單獨指定,其中任何一個都可以為空白以將該值保留為其預設值。

size

表示測試檔案大小。

FIO會將指定的檔案大小全部讀/寫完成,然後才停止測試,除非受到其他選項(例如運行時)的限制。如果未指定該參數,FIO將使用給定檔案或裝置的完整大小。也可以將大小作為1到100之間的百分比給出。例如指定size=20%,FIO將使用給定檔案或裝置完整大小的20%空間。

numjobs

表示測試的並發線程數。預設值:1。

runtime

表示測試時間,即FIO運行時間長度。

如果未指定該參數,則FIO會持續將上述size指定大小的檔案,以每次bs值為塊大小讀/寫完成。

group_reporting

表示測試結果顯示模式。

如果指定該參數,測試結果會匯總每個進程的統計資訊,而不是以不同任務來統計資訊。

filename

表示待測試的物件路徑,路徑可以是雲端硬碟裝置名稱或者一個檔案地址。本文中的FIO測試全部是以整盤為測試對象,不含檔案系統,即裸盤測試。同時為了避免誤測試到其他盤導致資料被破壞,本樣本地址為/dev/your_device,請您正確替換。

name

表示測試工作名稱,可以隨意設定。例如本樣本的Rand_Write_Testing

有關各參數的更多說明,請參見FIO MAN手冊