以下命令提供有关 PCIe 插槽的信息:
# lspci -vv | grep -E 'PCI bridge|LnkCap:'
00:01.0 PCI bridge: Intel (...) PCIe Controller (x16) (...)
LnkCap: Port #2, Speed 8GT/s, Width x16 (...)
00:1b.0 PCI bridge: Intel (...)
LnkCap: Port #17, Speed 8GT/s, Width x4 (...)
00:1c.0 PCI bridge: Intel (...)
LnkCap: Port #1, Speed 8GT/s, Width x1 (...)
00:1c.2 PCI bridge: Intel (...)
LnkCap: Port #3, Speed 8GT/s, Width x1 (...)
00:1c.3 PCI bridge: Intel (...)
LnkCap: Port #4, Speed 8GT/s, Width x1 (...)
00:1c.4 PCI bridge: Intel (...)
LnkCap: Port #5, Speed 8GT/s, Width x4 (...)
00:1d.0 PCI bridge: Intel (...)
LnkCap: Port #9, Speed 8GT/s, Width x4 (...)
LnkCap: Port #0, Speed 8GT/s, Width x16 (...)
LnkCap: Port #0, Speed 8GT/s, Width x16 (...)
LnkCap: Port #0, Speed 16GT/s, Width x4 (...)
LnkCap: Port #0, Speed 2.5GT/s, Width x1 (...)
笔记本电脑是 2017 款华硕 ROG G752VSK。规格说明有两个 PCIe 3.0x4。
为什么我的输出中有这么多槽?如果我查找维基百科,我可以推断出我有:
- 1 个 PCIe 3.0 x16(速度 8GT/s,宽度 x16)
- 2 个 PCIe 3.0 x4(速度 8GT/s,宽度 x4)
- 3 个 PCIe 3.0 x1(速度 8GT/s,宽度 x1)
最后一个桥怎么样,它似乎有 5 个端口,其中一个看起来像 PCIe 4.0 x4(速度 16GT/s,宽度 x4)?
我无法理解它。我本想lspci
展示我可以在笔记本电脑中实际识别的 2 个 PCIe 3.0x4。为什么还有这么多其他 PCIe 端口?
[编辑,应u1686_grawity的要求]
# lspci -tvnn
-[0000:00]-+-00.0 Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers [8086:5910]
+-01.0-[01]--+-00.0 NVIDIA Corporation GP104BM [GeForce GTX 1070 Mobile] [10de:1be1]
| \-00.1 NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0]
+-14.0 Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller [8086:a12f]
+-14.2 Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem [8086:a131]
+-15.0 Intel Corporation 100 Series/C230 Series Chipset Family Serial IO I2C Controller #0 [8086:a160]
+-15.1 Intel Corporation 100 Series/C230 Series Chipset Family Serial IO I2C Controller #1 [8086:a161]
+-16.0 Intel Corporation 100 Series/C230 Series Chipset Family MEI Controller #1 [8086:a13a]
+-17.0 Intel Corporation Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode] [8086:a102]
+-1b.0-[02]----00.0 Sandisk Corp Device [15b7:5030]
+-1c.0-[03]--
+-1c.2-[04]----00.0 Intel Corporation Wireless 8260 [8086:24f3]
+-1c.3-[05]----00.0 Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168]
+-1c.4-[06-3e]--
+-1d.0-[3f]----00.0 Micron/Crucial Technology Device [c0a9:540a]
+-1f.0 Intel Corporation CM238 Chipset LPC/eSPI Controller [8086:a154]
+-1f.2 Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller [8086:a121]
+-1f.3 Intel Corporation CM238 HD Audio Controller [8086:a171]
\-1f.4 Intel Corporation 100 Series/C230 Series Chipset Family SMBus [8086:a123]
[编辑2]
基本上,我想做的是找到一种方法来确认两个 NVMe/PCIe 插槽确实是 3.0x4。
事实上,我想将该技术应用到我拥有的另一台笔记本电脑上:官方规格说它有一个 Gen4x4 和一个 Gen4x2,当我联系他们识别每台笔记本电脑时,他们告诉我他们的网站已经过时,事实上我的笔记本电脑有两个Gen4x4。所以我正在寻找一种方法来确认这一点
[编辑3,遵循@Mokubai的回答和评论]
我的 grep 添加了一些不相关的行。这个更好:
# lspci -vv | grep 'PCI bridge' -A40 | grep -E 'PCI bridge|LnkCap:'
00:01.0 PCI bridge: Intel (...) PCIe Controller (x16) (...)
LnkCap: Port #2, Speed 8GT/s, Width x16 (...)
00:1b.0 PCI bridge: Intel (...)
LnkCap: Port #17, Speed 8GT/s, Width x4 (...)
00:1c.0 PCI bridge: Intel (...)
LnkCap: Port #1, Speed 8GT/s, Width x1 (...)
00:1c.2 PCI bridge: Intel (...)
LnkCap: Port #3, Speed 8GT/s, Width x1 (...)
00:1c.3 PCI bridge: Intel (...)
LnkCap: Port #4, Speed 8GT/s, Width x1 (...)
00:1c.4 PCI bridge: Intel (...)
LnkCap: Port #5, Speed 8GT/s, Width x4 (...)
00:1d.0 PCI bridge: Intel (...)
LnkCap: Port #9, Speed 8GT/s, Width x4 (...)
结合lspci -tvnn
的结果,我们确实可以得出结论,2 个 NVMe 插槽分别为1b.0
和1d.0
,例如 Sandisk(我的例子是 WD)和 Micron/Crucial,均位于Speed 8GT/s, Width x4
,例如 Gen3x4。
插槽和端口不同。
显然,您有多个连接系统中其他设备的桥接器。据推测,各种 PCIe 集线器上的端口连接有 PCIe 以太网、WiFi、SATA、NVMe、蓝牙和其他设备。
PCIe 只是一种连接设备的方式,这些设备不必有物理连接器或插槽,它们可以直接连接到集线器上的端口,而无需使用可移动连接器。
试图总结评论
除了物理连接器之外,PCIe 还用于许多其他用途。PCIe 定义了一种将 PCI 协议封装在快速高效的电气接口内的方法。它不仅仅是您看到的连接器,而且设备通常是在不使用更明显的连接器的情况下进行电气连接的。
识别设备
lspci
有点碰运气。(据我所知)它只会显示当前的链接速度而不是完整的功能,并且grep
可能会遗漏重要的上下文。您的许多尾随行可能与其他设备(显示链接速度功能)相关,但与上面的设备无关。为了进行有根据的猜测,我建议您的 NVMe 设备是
请注意,Sandisk 是 Western Digital 的子公司,
lspci
可能使用内部“供应商 ID”列表来匹配设备。我有一块 Western Digital NVMe SSD,它在 Windows 中报告的供应商 ID 为 15B7。其他 NVMe 设备很可能是表示具有您期望的宽度的
Speed 8GT/s, Width x4
PCIe 3.0 接口 ( )。8GT/s
以此为起点,您应该能够识别第二台笔记本电脑中的端口。
您显示的输出不描述插槽- 它描述链接。链接可能会通过物理卡插槽(例如 SSD M.2 插槽),但它也可能直接连接到另一个芯片,或者可能会通过 Thunderbolt 等。甚至可能存在非链接连接到任何东西。
笔记本电脑的规格仅记录外部(面向用户的)插槽,但 PCI 不仅仅涉及外部插槽 - 有许多内部设备,无论是在 CPU/SoC 内部还是主板上的其他位置,都通过 PCI 进行通信 - Express,例如您的 Wi-Fi 接口或独立 GPU 或整个 USB 主机控制器。(这类似于您的笔记本电脑网络摄像头或蓝牙模块是内部 USB 设备,并且在 USB 主机上有自己的“端口”。)
计算机规范通常不会记录此类内部连接,因为如果用户无法根据自己的需要重新调整连接的用途,那么无论用户是通过 USB、PCIe 还是 SPI 连接,几乎都与用户无关。
(此外,即使您的 Wi-Fi/蓝牙卡可能位于带有 PCIe+USB 的可拆卸 M.2 插槽中,但很少有记录,因为制造商不喜欢您更换该卡;许多笔记本电脑只接受特定型号的卡。 )