Can I find out if PCI-e slot is 1.0, 2.0 or 3.0 in linux terminal?

I'm going to purchase a GPU which is for PCI-e 3.0. But since I don't know what PCI-e slot it is in my computer I need to find it out somehow. Is it possible to find it from the terminal in linux?


Solution 1:

Using lspci -vv as root, you can get the transfer rate and compare it with the transfer rate specified for the revisions. A sample output would read:

# lspci -vv | grep -E 'PCI bridge|LnkCap'
00:02.0 PCI bridge: NVIDIA Corporation C51 PCI Express Bridge (rev a1) (prog-if 00 [Normal decode])
                LnkCap: Port #2, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <512ns, L1 <4us
00:03.0 PCI bridge: NVIDIA Corporation C51 PCI Express Bridge (rev a1) (prog-if 00 [Normal decode])
                LnkCap: Port #1, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <512ns, L1 <4us
00:04.0 PCI bridge: NVIDIA Corporation C51 PCI Express Bridge (rev a1) (prog-if 00 [Normal decode])
                LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <512ns, L1 <4us
00:10.0 PCI bridge: NVIDIA Corporation MCP51 PCI Bridge (rev a2) (prog-if 01 [Subtractive decode])

Which shows that the speed here is 2.5GT/s, corresponding to PCIe 1.x.

Solution 2:

You can use the "dmidecode" command to give an in depth list of all the hardware on the system and then view that. I did a "quick and dirty" command to show the pertinent bit as follows:

dmidecode | grep "PCI"

Which returned

PCI is supported
Type: x16 PCI Express 2 x8
Type: x8 PCI Express 2 x4
Type: x8 PCI Express 2 x4
Type: x8 PCI Express 2 x4
Type: 32-bit PCI