setpci改pcie寄存器的值

1、lspci -tv解释

BUS号为37的是从CPU直接出来的

BUS号为26的是接到了PCIE Switch,switch再接到设备

[28-2e]这种写法表示后面的设备编号范围

2、读写PCIE设备寄存器
2.1获取寄存器地址

使用lspci -s -vvv查看寄存器的基地址,如下图0x78

确认你要读取的某个值的寄存器相对地址,比如读取DevCtl的值,查PCIE SPEC可以知道,相对地址为Device ConTrol所对应的offset值,为08h

2.2 读取寄存器的值

使用命令setpci -s bus 基地址+相对地址.w

转换为二进制如下

查询PCIE SPEC ,找到08h的定义章节

相应的字节置1表示对应项是enable的,后面会显示+,比如CorrErr+,其中5-7字节,12-14字节有特殊定义,

12-14字节=001,表示256bytes的max_read_request_size。

2.3 改变寄存器的值

要修改对应项的值,只需要是的对应的字节置0或者置1即可实现。比如我需要屏蔽CorrErr选项,就使最低位为0

改为0001 1001 0011 0110,同时转换为16进制数1936。

使用命令setpci -s bus 基地址+相对地址.w=值,写入寄存器值,不输入数值则只是查看。

使用lspci -vvv 查看,CorrErr后面是-,已经修改成功了

spec显示RW的基本都可以修改

2.4 在测试中常见的用法

GPU性能不达标,关闭ACS

找到要关闭ACS的pcie设备,查看基地址,查看SPEC找到ACSctl对应寄存器相对地址0x06,对应选项置0即可,全部关闭就0000。

setpci -s 17:00.0 170+6.w=0000

网卡性能不达标,设置PCle Read Request Size=1k

查看SPEC找到MAX Read Request Size对应寄存器相对地址0x08,设置12-14字节为011就表示1k大小,最高位默认一般都是0,所以对应值一般写为3XXX。                                         

参数是setpci -s 2c:00.0 68.W=3000:f000

查看网卡基地址 60

相对地址08

地址就是60+08.w,简写为68.w

对于INTEL网卡,基地址为a0

地址就是a0+80.w,简写为a8.w

部分高性能NVME SSD测试也用到Read Request Size调优项。

注入错误(谨慎使用)

可以设置某些寄存器的值不符合要求,比如修改Max_Payload_Size的值,或者修改Max_Read_Request_Size的值小于Max_Payload_Size的值。就会产生服务器宕机,重启,报CPU IERR,pcie error等错误。

说明:Max_Payload_Size,控制一个TLP可以传输的最大数据长度, PCIe协议允许最大一个Payload可以到4K,但是规定了在整个传输路径上的所有Device,都必须使用相同的MPS设置,同时不能超过该路径上一个设备的MPS能力值。也就是说,MPS capability高的设备要迁就低的设备。系统的MPS值设置是在上电以后的设备枚举配置阶段完成的, 以主板上的PCIe RC和PCIe SSD为例,他们都在Device Capability Register里声明自己能支持的各种MPS,OS的PCIe驱动侦测到他们各自的能力值,然后挑低的那个设置到两者的Device Control register中。

Max_Read_Request_Size,在配置阶段,OS的PCIe驱动也会配置这个参数,于控制一个Memory read的最大size,最大4K,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之间的吞吐量。为了提高特别是大Block Size data的传输效率,尽量把read request size设的大一点,用更少的次数传递更多的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值