pcie总线频率和带宽_PCIe的通道是怎么分分合合的?详解PCIe bifurcation

本文探讨了PCIe通道的组合和拆分,特别是bifurcation技术如何允许主板厂商灵活配置PCIe设备的通道数。通过硬连线(Hard Strap)、软配置(Soft Strap)和BIOS设置(Wait For BIOS)三种方式,实现PCIe通道的分叉,以满足不同用户需求。内容涉及CPU和南桥PCH提供的PCIe通道、通道宽度的决定因素以及如何通过bifurcation卡实现单个PCIe x16插槽分叉为两个显卡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

351c850a862b972be470e2f25b244583.png点击上方 “公众号” 可以订阅哦!

随着AMD新一代CPU的发布,PCIe 4.0 (Gen4)也进入了人们的视线。然而Intel随后宣传PCIe 4.0对消费市场用处不大,AMD则反讽Intel吃不到葡萄说葡萄酸。正在吃瓜群众搬板凳看热闹的时间,一件事情正在发生。PCIe的标准制定组织,PCI-SIG(Peripheral Component Interconnect Special Interest Group)发布了PCIe 6.0(Gen6)的标准!对,你没有看错,不是5.0而是6.0。实际上5.0刚刚发布,如果我们看最近这个组织的活动轨迹:

0c6db9fa78ecb3277a62592a5d22c9ab.png

也许是哪里来的莫名其妙王子用亲吻唤醒了她,在蛰伏了7年之后,PCI-SIG加速以翻一番的速度发布新标准,从2017年的Gen4,2018年的Gen5,到2019的Gen6,这个节奏简直疯狂。如果说Intel现在的节奏是Tock、Tock、Tock...,那PCIe就是打了鸡血般的Tick、Tick和Tick!这让主板厂商情何以堪?吃瓜群众也一脸懵懂,到底我是不是该升级呢?

尽管我不认为我们在2021年底之前能看到任何的PCIe 6.0的设备,但PCIe标准的高歌猛进让人们更加关注PCIe这个现代计算机的脊柱总线,也是好事一件。我已经有两篇文章介绍PCIe的基本知识:

深入PCI与PCIe之一:硬件篇

深入PCI与PCIe之二:软件篇

今天来让我们稍微深入一些,介绍一下PCIe通道数,和它们是如何组合和拆分的。

PCIe Lane(通道)

af84c013ee4d86b827f85f6c091e892e.png

我在前面文章介绍过,PCIe是串行总线,通过使用差分信号传输(differential transmission),如图

9e2ebcc0d47080e51f2474c250eaadcf.png

相同内容通过一正一反镜像传输,干扰可以很快被发现和纠正,从而可以将传输频率大幅提升。加上PCI原来基本是半双工的(地址/数据线太多,不得不复用线路),而串行可以全双工。

这样一对差分信号组成一个PCIe Lane,也叫做x1通道。把n组绑定在一起,可以让PCIe设备大幅提高传输带宽。如M.2接口的NVMe SSD一般用四组,四个Lane,也就是x4;而最耗带宽的显卡一般要用16组,就是x16。注意这个n应该是2的幂,所以不存在奇数组或者x10等组合。

PCIe通道的组合和差分

af84c013ee4d86b827f85f6c091e892e.png

现在PCIe的设备越来越多,Intel的台式机/笔记本平台为了让主板厂商能够灵活满足客户的需求,在CPU和南桥PCH后面都提供了不少PCIe通道:

3c1a945cfd1584be434ae5adc6c7af4f.png

这是个Haswell的例子,比较老,但和现在系统没有本质区别(现在南桥换成PCIe Gen3了)。CPU一般提供PCIe x16通道给显卡,南桥则提供更多的通道,但因为要经过DMI这个小水管,一般不建议链接显卡等需要高带宽的设备。

计算机用户多种多样,有的用户需要插两组显卡,有的则需要很多x1的插槽。为了给主板厂商提供灵活的空间,芯片厂商通过一种叫做bifurcation(分叉)的方式让主板厂商可以灵活配置,组合或者拆分PCIe通道,来做出满足细分市场的产品来。

PCIe初始化一般分为:

1.bifurcation。

2.Root Port Training。根据信号完整性的不同,尽管Root port支持PCIe Gen3/4,但主板走线有问题,有干扰,可能只能Training出Gen2,甚至Gen1的速度来。信号完整性可以参考我的这篇文章:芯片中的数学——均衡器EQ和它在高速外部总线中的应用

3. PCI枚举。

4. PCI/PCIe的各种特性(Feature)设置,如CTO等等。

作为初始化的第一步,bifurcation的重要性自不待言。它决定了各个设备和PCIe插槽的通道宽度。它一般有三种方式:Hard Strap,Soft Strap或者Wait for BIOS。

Hard Strap

af84c013ee4d86b827f85f6c091e892e.png

所谓Hard,是指这种方式是硬件连线,不能后期修改。在酷睿桌面CPU后面的PCIe通道通常采用这些方式。我们来看个例子,下面所有内容来自Intel官网,7代i5的Datasheet(参考资料1)

558a1023865d959f12d98c0538b0b6e0.png

注意红框部分

我们可以看到这种bifurcation,CPU后面的PCIe是一个x16,还是两个x8,亦或1个x8家两个x4,取决于CFG信号。

1daba3ed79cd2779e9d56816f9d0984e.png

主板厂商根据自己主板样式,如提供了一个显卡插槽,则把CFG[6:5]信号都连高电平,就是一个x16;如果提供两个显卡插槽,则把CFG[6:5]信号连接一高一低,就是两个x8,即两个PCIe显卡就降成x8使用;还有些厂商喜欢把NVMe的m.2连接到CPU后面,来提高存储速度,则可以把CFG[6:5]信号都连低电平,则是1个x8连接显卡,两个x4来连接M.2 SSD。

这种bifurcation一旦确定,就不能更改,除非重新布线。

Soft Strap

af84c013ee4d86b827f85f6c091e892e.png

所谓Soft,就是软件可以修改。PCH下PCIe root port一般是这种方式。这种配置一般储存在BIOS Image前面的discription中,可以通过工具修改:

04e29bfc2969c0a80d9415da86503a27.png

这种修改一般和BIOS程序无关,修改后直接烧录BIOS即可。当然BIOS在Image没有被锁定的情况下,可以重新修改这个区域,但修改后需要重新启动才可以生效。

主板厂商一般根据自己的主板设计情况,在烧录BIOS的时候就用软件改好了相应的值,BIOS一般没有界面去修改这个值。

Wait For BIOS

af84c013ee4d86b827f85f6c091e892e.png

这种方式是纯BIOS设置,也就是在PCIe Training之前,通过BIOS对相关PCIe root complex的寄存器进行设置来确定通道宽度。

这种方式一般用于至强系列CPU,它们在CPU后面提供高达40个Lanes的支持:

1827af6b610243143aa081dc74cab88c.png

为什么是44个Lane?

如图中,我们数一下,一共是44个Lane,不是说40个Lane吗?其实P0的lane是给DMI用的,如果在多路情况下,除了第一个Socket,其他CPU才可以把它用起来。

这么多Lane,因为最高一个设备只支持x16,所以分为几组。一般一组是一个PCIe device,分为4个function,在bifurcation之后,如果该Function轮空,需要我们禁掉该function来省电。

这种方式是最灵活的方式,它赋予至强CPU的用户极大的灵活性,一般会有配置界面来配置:

5c0a4800b10080235cc331642119884f.png

结论

af84c013ee4d86b827f85f6c091e892e.png

这许多细节也许比较枯燥,但只有了解现象后面的本质,我们才能够更深刻地理解计算机是怎么工作的。

最后来解决一下有些同学的实际问题,有的同学主板只有一个X16的槽,但想要插两个显卡(想想什么情况下需要),怎么办呢?可以借助一种叫做bifurcation卡的PCIe卡:

39a716cb1110d1c3472e91e412ca939c.png

现在你知道为什么叫做bifurcation了吧,顾名思义,真的就是分叉啊。

参考资料

af84c013ee4d86b827f85f6c091e892e.png

[1] https://www.intel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-h-processor-lines-datasheet-vol-1.html

c5990f1a304c8c396b6834267e05f47a.png ab34f06b50adb640e236e652c31cac14.gif
<think>好的,用户问的是“/dev/nvme0n1如何对应PCIe总线”,我需要详细解释它们之间的关系。首先,我要确定用户可能对NVMe设备PCIe总线的基本概念是否了解,可能需要从基础开始讲起。 首先,NVMe是Non-Volatile Memory Express的缩写,它是一种用于访问固态硬盘(SSD)的协议,而PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准。NVMe设备通常通过PCIe接口连接到主板上,因此它们会占用PCIe总线上的一个通道。 接下来,/dev/nvme0n1是Linux系统中的设备文件,代表第一个NVMe控制器(nvme0)下的第一个命名空间(n1)。这里的“命名空间”相当于该控制器管理的一个存储单元,类似于传统硬盘的分区,但概念上更高级。 然后,我需要解释如何将/dev/nvme0n1映射到具体的PCIe总线位置。通常,可以通过lspci命令查看系统中所有的PCI设备,找到对应的NVMe控制器。例如,运行lspci -vnn | grep -i nvme可以列出所有NVMe设备的信息,包括它们的PCI地址(如0000:01:00.0)。 每个PCI设备在系统中都有一个唯一的BDF(Bus, Device, Function)编号,形如BB:DD.F,其中BB是总线号,DD是设备号,F是功能号。通过这个BDF编号,可以确定设备在PCIe总线上的位置。 此外,Linux的sysfs文件系统提供了详细信息。在/sys/block/nvme0n1/device/路径下,可以找到符号链接指向对应的PCI设备目录,例如../../0000:01:00.0,这样就建立了设备文件与PCIe总线的关联。 用户可能需要知道如何验证这种对应关系,因此我应该给出具体的命令步骤,比如使用lspci查看sysfs中的链接。同时,提醒用户权限问题,可能需要使用sudo来执行这些命令。 最后,总结整个过程,强调NVMe设备通过PCIe接口连接,而Linux通过设备文件sysfs信息将它们关联起来,帮助用户理解硬件与系统层面的对应关系。</think>让我们逐步理清/dev/nvme0n1设备文件与PCIe总线的对应关系: 1. **基础概念** - **NVMe协议**:专为SSD优化的高速访问协议 - **PCIe总线**:提供物理连接传输通道 - **设备文件**:Linux通过/dev下的文件抽象硬件设备 2. **命名规则解析** $$ \text{/dev/nvme}[控制器编号][命名空间编号] $$ - `nvme0`:第一个NVMe控制器 - `n1`:该控制器下的第一个命名空间 3. **对应关系确认步骤** **(1) 查看设备信息** ```bash sudo lspci -vnn | grep -i nvme ``` 示例输出: ``` 01:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd NVMe SSD Controller [144d:a808] ``` **(2) 查看设备拓扑** ```bash sudo tree -L 2 /sys/block/nvme0n1/device/ ``` 典型结构: ``` /sys/block/nvme0n1/device └── -> ../../../0000:01:00.0 ``` **(3) 解析PCI地址** - `0000:01:00.0` 解读: - **Domain**: 0000(通常为默认域) - **Bus**: 01(总线号) - **Device**: 00(设备号) - **Function**: 0(功能号) 4. **对应关系示意图** ``` PCIe拓扑: [0000:01:00.0] ←物理连接→ NVMe控制器 ←虚拟映射→ /dev/nvme0n1 ``` 5. **关键验证命令** ```bash # 查看详细PCI信息 sudo lspci -s 01:00.0 -vvv # 查看设备物理位置 sudo lshw -c storage -businfo ``` 6. **系统层面关联** - **设备初始化**:内核NVMe驱动识别PCIe设备 - **命名空间创建**:控制器初始化后分配设备文件 - **I/O路径**:应用程序 → 设备文件 → NVMe驱动 → PCIe总线 → 物理设备 **典型应用场景**: 当需要定位物理设备时(如更换故障SSD): 1. 通过`dmesg | grep nvme`查看初始化日志 2. 根据设备文件找到PCI地址 3. 对照服务器物理插槽编号(需参考主板手册) **注意**: - 多CPU架构服务器可能有多个PCIe域 - 部分服务器支持PCIe bifurcation会影响设备枚举顺序 - 虚拟化环境中可能呈现不同拓扑结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值