PCIe Max_Payload_Size 和 Max_Read_Request_Size


最近PCIe在SSDFans上鏡率挺高,那我們來聊兩句MAX_READ_REQUEST_SIZE 和MAX_PAYLOAD_SIZE。

這兩個東西都在PCIe Capability Structure 08h (Device Control Register)里

 


Maximum Payload Size (簡稱MPS)

控制一個TLP可以傳輸的最大數據長度。作為接收方,必須能處理跟MPS設定大小相同的TLP數據包,作為傳輸方,不允許創建超過MPS設定的TLP數據包。

 PCIe協議允許最大一個Payload可以到4K,但是規定了在整個傳輸路徑上的所有Device,都必須使用相同的MPS設置,同時不能超過該路徑上一個設備的MPS能力值。也就是說,MPS capability高的設備要遷就低的設備。以PCIe SSD來說,插到一塊老掉牙的主板上(MPS只有128 Byte),你的Payload size再大,也是沒有用的。

 系統的MPS值設置是在上電以后的設備枚舉配置階段完成的, 以主板上的PCIe RC和PCIe SSD為例,他們都在Device Capability Register里聲明自己能支持的各種MPS,OS的PCIe驅動偵測到他們各自的能力值,然后挑低的那個設置到兩者的Device Control register中。

 PCIe SSD自身的MPS capability則是在其PCIe core初始化階段設置的。

Maximum Read Request Size 

在配置階段,OS的PCIe驅動也會配置另外一個參數maximum read request size,用於控制一個Memory read的最大size,最大4K(以128 Byte為單位)
Read request size是可以大於MPS滴,比如給一個MPS=128 Byte的PCIe SSD發一個512 Byte的read request,PCIe SSD可以通過返回多個4個128 Byte的 Cpld,或者8個64 Byte的Cpld,完成這個request的響應。OS 層面可以通過控制PCIe SSD的maximum read request size參數,平衡多個PCIe SSD之間的吞吐量,避免系統帶寬(總共40個lane)被某些個SSD霸占。

 同時,Read request size也對PCIe SSD的Performance有影響,這個size太小,意味着同樣的data,需要發送更多的request去獲取,而read request的TLP是不帶任何data payload的。

 舉例來說,要傳64K的數據,如果read request=128 byte, 需要512個read TLP,512個TLP的浪費那是不小滴。

 為了提高特別是大Block Size data的傳輸效率,盡量把read request size設的大一點,用更少的次數傳遞更多的數據,那是很好的。 

 

原文鏈接

http://china.xilinx.com/support/answers/36596.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM