PCIe Max_Payload_Size 和 Max_Read_Request_Size

Posted tcicy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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



以上是关于PCIe Max_Payload_Size 和 Max_Read_Request_Size的主要内容,如果未能解决你的问题,请参考以下文章

AHCI协议NVME协议SATA总线PCIe总线SATA接口PCIe接口M.2接口

pcie与DMA求助

m.2 nvme和m.2的区别是啥?

nvme和ngff的区别是啥?

用了m.2转pcie插槽,装了系统启动项那里可以识别,但是开机却进不了系统?

hpz620在pcie固态硬盘安装win7 uefi引导,找不到pcie固态硬盘,请问如何加载驱动