本文描述了區塊存放裝置效能的重要指標、不同區塊存放裝置類型的效能、效能測試方式和結果解讀。

衡量指標

衡量區塊存放裝置產品的效能指標主要包括:IOPS、輸送量和訪問時延。

IOPS

IOPS是Input/Output Operations per Second,即每秒能處理的I/O個數,用於表示區塊存放裝置處理讀寫(輸出/輸入)的能力。如果要部署事務密集型應用,典型場景比如資料庫類業務應用,需要關注IOPS效能。

最普遍的IOPS效能指標是順序操作和隨機操作,如下表所示。

IOPS效能指標 描述
總 IOPS 每秒執行的I/O操作總次數。
隨機讀IOPS 每秒執行的隨機讀I/O操作的平均次數 對硬碟儲存位置的不連續訪問。
隨機寫IOPS 每秒執行的隨機寫I/O操作的平均次數
順序讀IOPS 每秒執行的順序讀I/O操作的平均次數 對硬碟儲存位置的連續訪問。
順序寫IOPS 每秒執行的順序寫I/O操作的平均次數
輸送量

輸送量是指單位時間內可以成功傳輸的資料數量。

如果要部署大量順序讀寫的應用,典型場景比如Hadoop離線計算型業務,需要關注輸送量。

訪問時延

訪問時延是指區塊存放裝置處理一個I/O需要的時間。

如果您的應用對時延比較敏感,比如資料庫(過高的時延會導致應用效能下降或報錯),建議您使用SSD雲端碟、SSD共用區塊存放裝置或本地SSD盤類產品。

如果您的應用更偏重儲存吞吐能力,對時延相對不太敏感,比如Hadoop離線計算等吞吐密集型應用,建議您使用本地HDD盤類產品,如d1或d1ne大資料型執行個體。

效能

以下是不同區塊存放裝置產品的效能對比表。

雲端碟效能
三種雲端碟的效能對比如下表所示。
參數 SSD雲端碟 高效雲端碟 普通雲端碟
單盤最大容量 32768 GiB 32768 GiB 2000 GiB
最大IOPS 25000* 5000 數百
最大輸送量 300 MBps* 140 MBps 30−40 MBps
單盤效能計算公式** IOPS = min{1800 + 30 * 容量, 25000} IOPS = min{1800 + 8 * 容量, 5000}
輸送量 = min{120 + 0.5 * 容量, 300} MBps 輸送量 = min{100+ 0.15 * 容量, 140} MBps
資料可靠性 99.9999999% 99.9999999% 99.9999999%
API名稱 cloud_ssd cloud_efficiency cloud
典型應用場景
  • PostgreSQL、MySQL、Oracle、SQL Server等中大型關聯式資料庫應用
  • 對資料可靠性要求高的中大型開發測試環境
  • MySQL、SQL Server、PostgreSQL等中小型關聯式資料庫應用
  • 對資料可靠性要求高、中度效能要求的中大型開發測試應用
  • 資料不被經常訪問或者低I/O負載的應用場景(如果應用需要更高的I/O效能,建議使用SSD雲端碟)
  • 需要低成本並且有隨機讀寫I/O的應用環境

* SSD雲端碟的效能因資料區塊大小而異,資料區塊越小,輸送量越小,IOPS越高,如下表所示。只有掛載到I/O優化的執行個體時,SSD雲端碟才能獲得期望的IOPS效能。掛載到非I/O優化的執行個體時,SSD雲端碟無法獲得期望的IOPS效能。

資料區塊大小 IOPS最大值 輸送量
4 KiB 約25000 很小,遠低於300 MBps
16 KiB 約17200 將近300 MBps
32 KiB 約9600
64 KiB 約4800

** 單盤效能計算公式說明:

  • 以單塊SSD雲端碟最大IOPS計算公式為例說明:起步1800 IOPS,每GiB增加30 IOPS,最高25000 IOPS。
  • 以單塊SSD雲端碟最大輸送量計算公式為例說明:起步120 MBps,每GiB增加0.5 MBps,上限為 300 MBps的輸送量。

不同雲端碟的單路隨機寫訪問時延如下:

  • SSD雲端碟:0.5−2 ms
  • 高效雲端碟:1−3 ms
  • 普通雲端碟:5−10 ms
共用區塊存放裝置效能

2種共用區塊存放裝置的效能對比如下表所示。

參數 SSD共用區塊存放裝置 高效共用區塊存放裝置
最大容量
  • 單盤:32768 GiB
  • 單個執行個體:最大128 TiB
  • 單盤:32768 GiB
  • 單個執行個體:最大128 TiB
最大隨機讀寫IOPS* 30000 5000
最大順序讀寫輸送量* 512 MBps 160 MBps
單盤效能計算公式** IOPS = min{1600 + 40 * 容量, 30000} IOPS = min{1000 + 6 * 容量, 5000}
輸送量 = min{100 + 0.5 * 容量, 512} MBps 輸送量 = min{50 + 0.15 * 容量, 160} MBps
典型應用場景
  • Oracle RAC
  • SQL Server
  • 容錯移轉叢集
  • 伺服器高可用
  • 伺服器高可用架構
  • 開發測試資料庫高可用架構

* 最大IOPS和輸送量是在2個或2個以上執行個體同時壓測裸裝置能達到的效能數值。

** 單盤效能計算公式說明:

  • 以單塊SSD共用區塊存放裝置最大IOPS計算公式為例:起步1600 IOPS,每GiB增加40 IOPS,最高30000 IOPS。
  • 以單塊SSD共用區塊存放裝置最大輸送量計算公式為例:起步100 MBps,每GiB增加0.5 MBps,上限為512 MBps的輸送量。

不同共用區塊存放裝置的單路訪問時延如下:

  • SSD共用區塊存放裝置:0.5−2 ms
  • 高效共用區塊存放裝置:1−3 ms
本地盤效能

本地盤的效能資訊,請參考 本地碟

效能測試

根據ECS執行個體的作業系統不同,您可以使用不同的工具測試區塊存放裝置效能:

  • Linux執行個體:可以使用DD、fio或sysbench等工具測試區塊存放裝置效能。
  • Windows執行個體:可以使用fio、Iometer等工具測試區塊存放裝置效能。
说明
在不同作業系統環境中,不同工具測試出來的硬碟基準效能會有差異。本文中所描述的績效參數,均為Linux執行個體下採用fio工具的測試結果,以此作為區塊存放裝置產品效能指標參考。

本文以Linux執行個體和fio為例,說明如何使用fio測試區塊存放裝置效能。在進行測試前,請確保區塊存放裝置裝置已經4 KiB對齊。

警告
測試裸盤可以獲得真實的區塊存放裝置盤效能,但直接測試裸盤會破壞檔案系統結構,請在測試前提前做好資料備份。建議您只在新購無資料的ECS執行個體上使用工具測試區塊存放裝置效能,避免造成資料丟失。
  • 測試隨機寫IOPS,運行以下命令:

    fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
  • 測試隨機讀IOPS,運行以下命令:

    fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
  • 測試順序寫輸送量,運行以下命令:

    fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
  • 測試順序讀輸送量,運行以下命令:

    fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing

下表以測試隨機寫IOPS的命令為例,說明命令中各種參數的含義。

參數 說明
-direct=1 表示測試時忽略I/O緩存,資料直寫。
-iodepth=128 表示使用AIO時,同時發出I/O數的上限為128。
-rw=randwrite 表示測試時的讀寫策略為隨機寫(random writes)。作其它測試時可以設定為:
  • randread(隨機讀random reads)
  • read(順序讀sequential reads)
  • write(順序寫sequential writes)
  • randrw(混合隨機讀寫mixed random reads and writes)
-ioengine=libaio 表示測試方式為libaio(Linux AIO,非同步I/O)。應用程式使用I/O通常有兩種方式:
  • 同步

    同步的I/O一次只能發出一個I/O請求,等待核心完成才返回。這樣對於單個線程iodepth總是小於1,但是可以透過多個線程並發執行來解決。通常會用16−32根線程同時工作將iodepth塞滿。

  • 非同步

    非同步I/O通常使用libaio這樣的方式一次提交一批I/O請求,然後等待一批的完成,減少互動的次數,會更有效率。

-bs=4k

表示單次I/O的塊檔案大小為4 KB。未指定該參數時的預設大小也是4 KB。

測試IOPS時,建議將bs設定為一個比較小的值,如本樣本中的4k。

測試輸送量時,建議將bs設定為一個較大的值,如本樣本中的1024k。

-size=1G 表示測試檔案大小為1 GiB。
-numjobs=1 表示測試線程數為1。
-runtime=1000 表示測試時間為1000秒。如果未配置,則持續將前述-size指定大小的檔案,以每次-bs值為分塊大小寫完。
-group_reporting 表示測試結果裡匯總每個進程的統計資訊,而非以不同job匯總展示資訊。
-filename=iotest 指定測試檔案的名稱,比如iotest。測試裸盤可以獲得真實的硬碟效能,但直接測試裸盤會破壞檔案系統結構,請在測試前提前做好資料備份。
-name=Rand_Write_Testing 表示測試工作名稱為Rand_Write_Testing,可以隨意設定。