PCIE研究-1

2023-09-18 10:46:34

PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,

PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。

PCI Express X1规格支持双向数据传输,每向数据传输带宽250MB/s,PCI Express X1已经可以满足主流声效芯片、网卡芯片和存储设备对数据传输带宽的需求,但是远远无法满足图形芯片对数据传输带宽的需求。

通常将PCI-e总线协议分为3层处理:

一 、PCI-e协议层

通常将机械层和物理层合并为物理层(PHY Layer)(PLP),紧接着第二层为数据链路层(DLL)(DLLP),第三层为事务传输层(TL)(TLP),应用层不算在内。

物理层中的机械层:

机械层定义了诸如对连接器、卡外形尺寸、卡检测和热插拔等要求的机械环境。

物理层中的电气和逻辑层:

    • 物理层下的电气层实现包括收发器、模拟缓冲器、串行/解串行器(SerDes)在内的模拟器件以及10位接口。

    • 物理编码子层(PCS)把每8位数据字节编码/解码为10位代码。这种编码特性不仅能检查有效字符,而且也限制了被发送的“0”和“1”数量上的差异,从而同时在发射器和接收器侧保持了DC均衡,进而大大提高了电磁兼容性(EMC)和电气信号性能。

插入一个概念:

数据包:数据在PCIe网络上的传输过程,PCIe实际上是以数据包的形式在各系统间或数字接口的各层之间传输的。首先是应用层发起事务传输,事务传输层把把请求转换为一个PCIe数据包。数据链路层为该包添加序列号和链路CRC(LCRC)。数据链路层确保数据接收的正确性,然后在物理层PCIe链路上传输该事务。

数据链路层:实际上该层的主要作用是保证数据传输的可靠性,对接受或者发送的数据包进行各种校验处理。

数据链路层完成的主要任务是:

    1. 数据交换。接收发送方处理层的TLP包,并送到物理层。另外从物理层接收TLP包并送到接收端的处理层。

    2. 出错检测和裁决。LCRC和序列号(TLP Sequence Number)的生成;存储发送端的TLP用于再试重发;为TLP和DLLP做数据完成性检测(crc校验);DLLP的ack和nack响应;错误指示;链接确认超时重试机制。

    3. 初始化和电源管理。跟踪链路状态并传送链路活动、链路复位、链路失去连连等状态给处理层;

    4. 生成DLLP。用于链路管理功能包括TLP确认、电源管理、流程控制信息(VC通道初始化)交流。在链接两端的数据链路层点对点传输、

二、PCI 总线域

PCI 总线域由 PCI 设备所能直接访问的地址空间组成。在一个处理器系统中,可能存在多个 HOST 主桥,因此也存在多个 PCI 总线域。在上图所示的处理器系统中,具有两个 HOST 主桥,因而在这个处理器系统中存在 PCI 总线 x 和 y 域。

在多数处理器系统中,分属于两个 PCI 总线域的 PCI 设备并不能直接进行数据交换,而需要通过 FSB 进行数据交换。值得注意的是,如果某些处理器的 HOST 主桥支持 Peer-to-Peer 数据传送,那么这个 HOST 主桥可以支持不同 PCI 总线域间的数据传送。

lspci 用于查看 linux 系统下面的pci设备。详细帮助可以通过命令 man lspci 获取详情。

[root@localhost ~]# lspci
00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Controller (rev 06)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller (rev 06)
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 05)
00:16.0 Communication controller: Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1 (rev 04)
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection I217-LM (rev 05)
....

通过 lspci 命令,我们可以得知当前系统上所有的 pci 设备信息。当需要选择特定一个 pci 设备的时候,可以通过 lspci -s bdf 来指定,这个 bdf 就是 lspci 输出的前三列的内容。bdf 的全称其实就是 bus : device . func。

[root@nsa ~]# man lspci
....
 Options for selection of devices
       -s [[[[<domain>]:]<bus>]:][<device>][.[<func>]]
....


三、linux 系统下的 pci 设备目录

pci 的拓扑结构为:pci 桥(包括 HOST 主桥)下面可以延伸出一条 pci 总线,pci 总线上面挂着 pci 设备和 pci 桥。

我们可以通过 /sys/class/pci_bus/ 目录查看 linux 系统下有多少条 pci 总线,查看pci bus总线情况。

[root@localhost ~]# ls /sys/class/pci_bus/
0000:00  0000:01  0000:02  0000:03  0000:04  0000:05  0000:06  0000:07  0000:08  0000:09

我们也可以通过 /sys/bus/pci/devices/ 目录查看 linux 系统下有多少个 pci 设备(以及相应的设备号 bdf),查看pcie设备号。

[root@localhost ~]# ls /sys/bus/pci/devices/
0000:00:00.0  0000:00:03.0  0000:00:19.0  0000:00:1c.0  0000:00:1f.0  0000:01:00.0  0000:02:0c.0  0000:04:00.0
0000:00:01.0  0000:00:14.0  0000:00:1a.0  0000:00:1c.1  0000:00:1f.3  0000:02:04.0  0000:02:10.0  0000:09:00.0
0000:00:02.0  0000:00:16.0  0000:00:1b.0  0000:00:1d.0  0000:00:1f.5  0000:02:08.0  0000:02:14.0

系统上电以后,host会自动完成上述的设备枚举过程。除一些专有系统外,普通系统只会在开机阶段进行设备的扫描。当我们安装一个 pci 设备驱动后,可以在 /sys/bus/pci/drivers 目录下找到我们安装的 pci 设备驱动模块。

[root@localhost ~]#  ls /sys/bus/pci/drivers
agpgart-intel  ata_generic  ehci-pci    i915    lpc_ich    ohci-pci   pci-stub  snd_hda_intel     xhci_hcd
agpgart-sis    ata_piix     hsw_uncore  igb     mei_me     pata_acpi  serial    uhci_hcd
agpgart-via    e1000e       i801_smbus  ioapic  mlx5_core  pcieport   shpchp    xen-platform-pci
[root@localhost ~]#
[root@localhost ~]# ls /sys/bus/pci/devices/
0000:00:00.0  0000:00:03.0  0000:00:19.0  0000:00:1c.0  0000:00:1f.0  0000:01:00.0  0000:02:0c.0  0000:04:00.0
0000:00:01.0  0000:00:14.0  0000:00:1a.0  0000:00:1c.1  0000:00:1f.3  0000:02:04.0  0000:02:10.0  0000:09:00.0
0000:00:02.0  0000:00:16.0  0000:00:1b.0  0000:00:1d.0  0000:00:1f.5  0000:02:08.0  0000:02:14.0
[root@localhost platform]# insmod  nsa_dma.ko # 安装驱动模块
[root@localhost platform]#
[root@localhost platform]# ls /sys/bus/pci/drivers  # 多出了一个 nsa_dma 驱动模块
agpgart-intel  ata_generic  ehci-pci    i915    lpc_ich    nsa_dma    pcieport  shpchp         xen-platform-pci
agpgart-sis    ata_piix     hsw_uncore  igb     mei_me     ohci-pci   pci-stub  snd_hda_intel  xhci_hcd
agpgart-via    e1000e       i801_smbus  ioapic  mlx5_core  pata_acpi  serial    uhci_hcd
[root@localhost platform]# ls /sys/bus/pci/devices/ # pci 设备数量不变,因为只会在开机阶段进行 pci 设备扫描
0000:00:00.0  0000:00:03.0  0000:00:19.0  0000:00:1c.0  0000:00:1f.0  0000:01:00.0  0000:02:0c.0  0000:04:00.0
0000:00:01.0  0000:00:14.0  0000:00:1a.0  0000:00:1c.1  0000:00:1f.3  0000:02:04.0  0000:02:10.0  0000:09:00.0
0000:00:02.0  0000:00:16.0  0000:00:1b.0  0000:00:1d.0  0000:00:1f.5  0000:02:08.0  0000:02:14.0
[root@localhost platform]#

通过 lspci -tv 命令,我们可以获得当前 linux 系统下的 pci 设备树

只有 pci 桥(包含 HOST 主桥)下,可以新开一条 pci bus 总线。因此,pci 树形结构是以 pci 桥为连接点的。

一个 pci 桥设备只能新开一条 pci bus 总线,pci bus 总线上又可以连接 pci 桥设备,继而又新开 pci bus 总线。同时,pci 扫描采用深度优先算法,因此先扫描到的 pci bus 总线,就优先编号。

更多推荐

初识canvas

对于一个前端人员来说,canvas是必须掌握的技能之一。如果你想像画画一样在浏览器上作画,那么canvas就可以做你的画布。接下啦我们就以画画的标准来初步认识下canvas1.画布画画的第一步你得有一张画纸或者画布,canvas标签就是我们的画布。画布都是有尺寸的,如果你想要做大一点的画那就需要大一点的画布,反之也是,

shell脚本命令

Shell命令是在类Unix操作系统中使用的命令行解释器(shell)中执行的命令。Shell命令可以用于执行系统命令、操作文件、进行文本处理、管理进程等。以下是一些常见的Shell命令:1.`ls`:列出当前目录下的文件和文件夹。2.`cd`:切换当前工作目录。3.`pwd`:显示当前工作目录的路径。4.`mkdir

linux下二进制安装docker最新版docker-24.0.6

一.基础环境本次实操是公司技术培训下基于centos7.9操作系统安装docker最新版docker-24.0.6,下载地址是:https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz二.下载Docker压缩包mkdir-p/opt

docker学习1-基本概念

Dockerjar包+环境=镜像,镜像存在docker仓库中,随用随取,无需现配环境docker通过隔离机制,各个镜像之间互不干扰docker比vm轻量化,每次只需运行镜像即可,镜像占内存小启动快,虚拟机启动慢,占内存较大docker是基于go语言开发的开源项目虚拟机技术运行方式(资源占用多,冗余步骤多,启动慢):容器

el-table表格中加入输入框

<template><divclass="box"><divclass="btn"><el-buttontype="primary">发送评委</el-button><el-buttontype="primary"@click="flag=true"v-if="!flag">编辑</el-button><el-butt

Python案例|Pandas正则表达式

字符串的处理在数据清洗中占比很大。也就是说,很多不规则的数据处理都是在对字符串进行处理。Excel提供了拆分、提取、查找和替换等对字符串处理的技术。在Pandas中同样提供了这些功能,并且在Pandas中还有正则表达式技术的加持,让其字符串处理能力更加强大。01、正则正则就是正则表达式(RegularExpressio

C语言计算2的1024次方

C语言计算2的1024次方迅雷有这么一道笔试题,编程计算2的1024次方。所谓2的1024次方,就是有1024个2相乘,于是有些同学顺手就能写出代码:intmain(){intreslut=1;for(inti=0;i<1024;i++){result*=2;}printf("%d\n",result);return0

微信小程序 动漫游戏资讯推荐系统

配置文件(自动编号、配置参数名称、配置参数值);系统的设计与实现采用Spring、SpringMVC和MyBatis作为主体框架,系统设计遵循界面层、业务逻辑层和数据访问层的Web开发三层架构。采用B/S结构,使得系统更加容易维护。系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理用户模块、用户表模块、推荐信

纽禄美卡Neuromeka亮相美国FABTECH,展示用于焊接的3D视觉协作机器人

原创|文BFT机器人纽禄美卡Neuromeka公司在由美国精密成型协会、美国焊接协会、化工涂料协会等5大协会举办的美国金属加工及焊接展览会FABTECH上精彩亮相。这家总部位于韩国首尔的公司成立于2013年,是机器人解决方案领域的领先供应商,致力于提高各种行业的自动化水平。他们在现场展示了其公司研发的协作式焊接机器人,

钉钉对接打通金蝶云星空获取审批实例详情接口与采购订单新增接口

钉钉对接打通金蝶云星空获取审批实例详情接口与采购订单新增接口数据源平台:钉钉钉钉是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能人事、钉工牌、工作台深度整合,打造简单、高效、安全、智能的数字化未来

Python在工业自动化领域的应用详解

概要当我们开始讨论在工业自动化应用中使用哪种编程语言时,通常我们会首先谈论IEC61131-3标准中用于可编程逻辑控制器(PLC)的语言,比如经典的梯形图(LD)或结构化文本(ST)。对于机器人等应用,我们经常看到低级编译语言,比如C语言。这几年有不少人讨论在工厂生产线上使用Python。是什么让Python这种解释型

热文推荐