強制重新協商 PCI Express 連結速度?x2 卡恢復為 x1 寬度
為了規避將 SSD 驅動器與較新的 HP ProLiant Gen8 伺服器一起使用的兼容性和成本障礙,我正在努力在平台上驗證基於 PCIe 的 SSD。我一直在嘗試來自Other World Computing的一個有趣的產品,稱為Accelsior E2。
這是一個基本設計;帶有Marvell 6Gbps SATA RAID 控制器的 PCIe 卡和連接到該卡的兩個 SSD“刀片”。這些可以傳遞給軟體 RAID(例如ZFS)的作業系統,或者用作硬體 RAID0 條帶或 RAID1 鏡像對。漂亮。它實際上只是將控制器和磁碟壓縮成一個非常小的外形尺寸。
問題:
看看那個 PCIe 連接器。那是一個PCie x2介面。物理PCIe 插槽/通道大小通常為x1、x4、x8 和 x16,電氣連接通常為 x1、x4、x8 和 x16。沒關係。我以前在伺服器中使用過x1 卡。
我開始在啟動的系統上測試這張卡的性能,發現無論伺服器/插槽/BIOS 配置如何,讀/寫速度都被限制在 ~410 MB/s。使用的伺服器是帶有 x4 和 x8 PCIe 插槽的 HP ProLiant G6、G7 和 Gen8(Nehalem、Westmere 和 Sandy Bridge)系統。查看卡的 BIOS 顯示設備協商:
PCIe 2.0 5.0Gbps x1
- 所以它只使用一個 PCIe 通道而不是兩個,因此只有廣告頻寬的一半可用。有什麼方法可以強制 PCIe 設備以不同的速度執行?
我的研究表明,PCIe x2 的通道寬度有點奇怪…… PCI Express 標準顯然不需要與 x2 通道寬度兼容,所以我的猜測是我伺服器上的控制器正在回退到 x1……我有什麼辦法嗎?
縮寫
lspci -vvv
輸出。LnkSta
注意和LnkCap
行之間的區別。05:00.0 SATA controller: Marvell Technology Group Ltd. Device 9230 (rev 10) (prog-if 01 [AHCI 1.0]) Subsystem: Marvell Technology Group Ltd. Device 9230 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend- LnkCap: Port #0, Speed 5GT/s, Width x2, ASPM L0s L1, Latency L0 <512ns, L1 <64us ClockPM- Surprise- LLActRep- BwNot- LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt- LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis- Kernel driver in use: ahci Kernel modules: ahci
我在稍微不同的 HP 平台上再次嘗試了此操作,即 2U HP ProLiant DL380p Gen8 與 1U DL360p Gen8。使用這種硬體組合,我收到了正確的結果。
目前的 Gen8 主機韌體現在允許 PCIe 鏈路以適當的速度進行協商,因此這些設備與 ProLiant DL380p Gen8 伺服器兼容。
Speed 5GT/s, Width x2, ASPM L0s L1, Latency L0 <512ns, L1 <64us LnkSta: Speed 5GT/s, Width x2, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
這是 OWS 的官方答案,如果可以強制 hp 控制器將其提高到 x2 寬度,現在是另一個答案,這需要更多的研究。-)