SAS JBOD 效能

目前手邊有一台 PCI-E Gen 2 的 Server + 6G SAS HBA – LSI 9200-8e + NetApp IOM3 / IOM6 的 JBOD,來試試看 SAS JBOD 的速度距離理想值 6*4=24Gb 會有多大的差距.

不過要注意的瓶頸會有 PCI-E , SAS , JBOD 我們先來一一確定,目前看到 PCI-E Gen2 的速度是沒有問題的.

root@benjr:~# lspci |grep -i lsi
03:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
root@benjr:~# lspci -n |grep -i 03:00.0
03:00.0 0107: 1000:0072 (rev 03)
root@benjr:~# lspci -n -d 1000:0072 -vvv |grep -i width
pcilib: sysfs_read_vpd: read failed: Connection timed out
                LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM L0s, Exit Latency L0s <64ns, L1 <1us
                LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

資料顯示 5GT/s, Width x8 算出來約 5Gbpsx8 = 40Gbps (20% overhead-PCIe並且在每八個位元的資料串上用十位元來加以編碼)= 32Gbps (4 GB/sec)

NetApp IOM3 / IOM6 的 JBOD 理想值是.

  • 3Gb SAS 1.0 提供約 ~12Gb (3Gb x4 wide port), 8b/10b 編碼 20% 的 overhead 實際有效頻寬為 1.2GB/s
  • 6Gb SAS 2.0 提供約 ~24Gb (6Gb x4 wide port), 8b/10b 編碼 20% 的 overhead 實際有效頻寬為 2.4GB/s

連接方式也很簡單 使用 minisas -> QSFP 將 LSI 9200-8e 與 NetApp IOM3 / IOM6 JBOD (方型標誌的連接埠)相連接.
sas03

這次我使用了 Fio – http://benjr.tw/34632 當做硬碟效能的測試工具.

root@benjr:~# vi fio.cfg
[global]
direct=1
iodepth=16
ioengine=libaio
numjobs=16
blocksize=512k
time_based
rw=read
runtime=60s
group_reporting
[dev-sdb]
filename=/dev/sdb
[dev-sdc]
filename=/dev/sdc
[dev-sdd]
filename=/dev/sdd
[dev-sde]
filename=/dev/sde
[dev-sdf]
filename=/dev/sdf
[dev-sdg]
filename=/dev/sdg
[dev-sdh]
filename=/dev/sdh
[dev-sdi]
filename=/dev/sdi
[dev-sdj]
filename=/dev/sdj
[dev-sdk]
filename=/dev/sdk
[dev-sdl]
filename=/dev/sdl
[dev-sdm]
filename=/dev/sdm
[dev-sdn]
filename=/dev/sdn
[dev-sdo]
filename=/dev/sdo

Job 設定檔有兩段,[global] : 共用的設定參數 , [job] :特別指定的參數(這邊指定待測裝置名稱).

參數說明

  • direct=1
    預設值為 0 ,必須設定為 1 才會測試到真實的 non-buffered I/O
  • iodepth=16
    同一時間有多少 I/O 在做存取,越多不代表存儲裝置表現會更好,通常是 RAID 時須要設大一點.
  • ioengine=libaio
    定義如何跑 I/O 的方式, libaio 是 Linux 本身非同步(asynchronous) I/O 的方式.
    其他還有 sync , psync , vsync , posixaio , mmap , splice , syslet-rw , sg , null , net , netsplice , cpuio , guasi , external
  • numjobs=16
    跟前面的 iodepth 類似,但不一樣,在 Linux 下每一個 job 可以生出不同的 processes/threads ,numjobs 就是在同一個 workload 同時提出多個 I/O 請求,通常負載這個會比較大.預設值為 1.
  • blocksize=512k
    bs 或是 blocksize ,也就是檔案寫入大小,預設值為 4K,如何設定這個值,因為不同性質的儲存裝置需要不同的值.看你是 File Server,Web server , Database … 設定都會不一樣.
  • time_based
    測試以時間為單位,另外一種方式是以 kb_base (kilobyte).
  • rw=read
    可以設定的參數如下,通常在跑效能時會使用單純的 read 與 write,其他可以使用參數如下:

    • read : Sequential reads. (循序讀)
    • write : Sequential writes. (循序寫)
    • trim : Sequential trim.
    • randread : Random reads. (隨機讀)
    • randwrite : Random writes. (隨機寫)
    • randtrim : Random trim.
    • rw : Mixed sequential reads and writes. (循序讀寫)
    • readwrite : Sequential read and write mix (循序混合讀寫)
    • randrw : Mixed random reads and writes. (隨機讀寫)
    • trimwrite : Trim and write mix, trims preceding writes.
  • runtime=60s
    這一測試所需的時間,單位為 秒.
  • group_reporting
    如果 numjobs 有指定,設定 group_reporting 報告會以 per-group 的顯示方式,而不是預設的 of per-job (會顯示所有個別 numjobs 的測試結果)

我系統一共有 14 顆硬碟.下面是測試結果

IOM3

root@benjr:~# fio fio.cfg

Run status group 0 (all jobs):
   READ: io=62987MB, aggrb=1036.4MB/s, minb=1036.4MB/s, maxb=1036.4MB/s, mint=60776msec, maxt=60776msec

IOM6

root@benjr:~# fio fio.cfg

Run status group 0 (all jobs):
   READ: io=93198MB, aggrb=1548.3MB/s, minb=72689KB/s, maxb=160388KB/s, mint=60110msec, maxt=60195msec

怪了 IOM3 在合理值內,理想值是 3G*4 =12Gb=1.2GB (8b/10b 編碼 20% 的 overhead) ,實測為 1.0364GB,但 IOM6 的值偏低怎麼調整都不對 ,理想值是 6G*4 =24Gb=2.4GB (8b/10b 編碼 20% 的 overhead ) ,實測為 1.5483 GB.

最後去查 Molex’s iPass™ Connector System Offering a full interconnect system that enables flexible speed compatibility for applications up to 14 Gbps.

好像問題是出在 Mini-SAS -> QSFP (iPass) Cable 的支援問題上,似乎這一條線只支援到 14G(1.4GB)

儲存裝置的效能測試 除了 PCI-E , SAS , JBOD 外 連使用的 cable 線材都需要注意.

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *