PCIe Max_Payload_Size 和 Max_Read_Request_Size

摘要:
PCIe协议允许最大4K的有效负载,但规定整个传输路径上的所有设备必须使用相同的MPS设置,并且不能超过路径上设备的MPS容量。在PCIeSSD的情况下,无论您的Payloadsize有多大,将其插入旧主板都是无用的。PCIeSSD本身的MPScability在其PCIecore初始化阶段设置。OS层可以通过控制PCIeSSD的最大readrequestsize参数来平衡多个PCIeSSD吞吐量,以避免某些SSD占用系统带宽。为了提高传输效率,特别是对于大型BlockSizedata,最好将readrequestsize设置得尽可能大,并以更少的时间传输更多数据。

最近PCIe在SSDFans上镜率挺高,那我们来聊两句MAX_READ_REQUEST_SIZE 和MAX_PAYLOAD_SIZE。

这两个东西都在PCIe Capability Structure 08h (Device Control Register)里

PCIe Max_Payload_Size 和 Max_Read_Request_Size第1张


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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android保持屏幕常亮的方法thinkphp6事件监听和触发多个事件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PCIE学习笔记--PCIe错误源详解(二)

转载地址:http://blog.chinaaet.com/justlxy/p/5100057799 这篇文章主要介绍事务(Transaction)错误、链路流量控制(Link Flow Control)相关的错误、异常的TLP(Malformed TLP)以及内部错误(Internal Errors)等。 事务(Transaction )错误 事务错误主...

DPDK设备驱动的匹配和初始化

前言:DPDK使用了UIO(用户空间I/O)的机制,跳过内核态的网卡驱动,转而使用用户态的收发包驱动,从驱动到内存和数据包,继而到数据包的处理,这是一个完整的收发包流程。这篇主要介绍设备驱动的初始化,和收发包的处理。所选代码以DPDK-17.02版本为依据。 数据包的驱动初始化是在rte_eal_init()进行的,总体上分为2个阶段进行。 1.第一阶...

token的设置与解析

备注: 1.生成token使用的是rest_framework_jwt pip install djangorestframework-jwt # 在此之前一定要确认user对象无误payload = jwt_payload_handler(user_obj) # 对payload加密 token = jwt_encode_handler(payload)...

PCIe知识摘要记录

摘: 一、 在PCIe的Spec中,并没有特别详细的关于Root Complex的定义,从实际的角度来讲,可以把Root Complex理解为CPU与PCIe总线系统通信的媒介。Endpoint处于PCIe总线系统拓扑结构中的最末端,一般作为总线操作的发起者(initiator,类似于PCI总线中的主机)或者终结者(Completers,类似于PCI总线...

EMQ X+TDengine 搭建 MQTT 物联网可视化平台

物联网数据采集涉及到大量设备接入、海量的时序数据传输,EMQ X MQTT 服务器 与 TDengine 大数据平台的组合技术栈完全能够胜任场景中的海量时间序列监测数据的传输、存储和计算。 数据入库后,往往需要其他方式如数据可视化系统将数据按照规则统计、展现出来,实现数据的监控、指标统计等业务需求,以便充分发挥数据的价值,TDengine 搭配开源软件 G...

学习Python:StringIO与cStringIO

StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以将操作磁盘文件那样来操作StringIO。一个简单的例子,让你对StringIO有一个感性的认识: from StringIO import StringIO # 生成一个StringIO对象,当前缓冲区内容为ABCDEF s = Strin...