以下命令提供有关我的 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 x PCIe 3.0 x16(速度 8GT/s,宽度 x16)
- 2 x PCIe 3.0 x4(速度 8GT/s,宽度 x4)
- 3 x 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。
答案1
插槽和端口不同。
您显然有多个桥接器连接系统中的其他设备。我猜有 PCIe 以太网、WiFi、SATA、NVMe、蓝牙和其他设备连接到各种 PCIe 集线器上的端口。
PCIe 只是一种连接设备的方式,这些设备不必有物理连接器或插槽,它们可以直接连接到集线器上的端口,而无需使用可拆卸连接器。
尝试总结评论
PCIe 除了物理连接器外,还有许多其他用途。PCIe 定义了一种将 PCI 协议封装在快速高效的电气接口中的方法。它不仅仅是您看到的连接器,而且设备通常在不使用更明显的连接器的情况下进行电气连接。
识别设备的方式lspci
有点碰运气。据我所知,它只会显示当前链接速度,而不是全部功能,并且grep
可能会遗漏重要的上下文。您的许多尾行可能与其他设备(显示链接速度功能)相关,但与上方的设备无关。
为了做出合理的猜测,我建议您的 NVMe 设备
1b.0-[02]----00.0 Sandisk Corp Device [15b7:5030]
请注意,Sandisk 是 Western Digital 的子公司,lspci
可能使用内部“供应商 ID”列表来匹配设备。我有一台 Western Digital NVMe SSD,它在 Windows 中也报告供应商 ID 为 15B7。另一台 NVMe 设备很可能是
1d.0-[3f]----00.0 Micron/Crucial Technology Device [c0a9:540a]
表示您期望的宽度的Speed 8GT/s, Width x4
PCIe 3.0 接口( )。8GT/s
以此为起点,您应该能够识别第二台笔记本电脑上的端口。
答案2
您显示的输出没有描述插槽– 它描述了链接。链接可能经过物理卡槽(例如 SSD M.2 插槽),但也可能直接连接到另一个芯片,或者可能经过 Thunderbolt 等设备。甚至可能存在根本没有连接到任何东西的链接。
笔记本电脑的规格仅记录了外部(面向用户)插槽,但 PCI 并不只涉及外部插槽——还有很多通过 PCI-Express 进行通信的内部设备(包括 CPU/SoC 内部和主板上的其他设备),例如 Wi-Fi 接口、独立 GPU 或整个 USB 主机控制器。(这类似于笔记本电脑的网络摄像头或蓝牙模块是内部 USB 设备,并且在 USB 主机上有自己的“端口”。)
计算机规格通常不记录此类内部连接,因为如果用户无法根据自己的需要重新利用该连接,那么无论通过 USB 还是 PCIe 还是 SPI 连接,对于用户来说几乎都无关紧要。
(此外,即使您的 Wi-Fi/蓝牙卡可能位于带有 PCIe+USB 的可拆卸 M.2 插槽中,但这种情况很少被记录下来,因为制造商不喜欢您更换该卡;许多笔记本电脑只接受特定型号。)