在不关机的情况下在 Linux 中重新枚举和使用 PCIe SSD

问题描述 投票:0回答:3

美好的一天,

我目前正在进行一个项目,其中 PCIe SSD 不断被换出并通过基准测试程序(如 VDBench 和 Iometer)进行测试。我现在面临的问题,仅在 Linux 端(在 Windows 上运行良好)是,如果驱动器在初始启动时未打开,它们永远不会出现在 GParted 或磁盘下。这是我所做的:

冷启动,PCIe 附加卡 SSD 关闭。然后通过逻辑控制的直通卡启动,以确保电源和短路不是问题。

我打开设备,然后运行:

sudo sh -c "echo 1 > /sys/bus/pci/rescan"

表演

lspci -tv

设备在树中显示没有问题。但是,当我在“磁盘”下查看时,它不在那里。

我尝试了很多不同的命令,但似乎没有一个对我有帮助。我试过了

partprobe

什么都没做。和:

sudo sh -c "echo 1 > /sys/bus/pci/devices/0000:82:00.0/remove"

跟进另一个重新扫描:

sudo sh -c "echo 1 > /sys/bus/pci/rescan"

以及:

sudo sh -c "echo 1 > /sys/bus/pci/devices/0000:82:00.0/enable"

还是没有。还跑了:

dmesg

其中显示:

[   68.128778] pci 0000:82:00.0: [8086:0953] type 00 class 0x010802
[   68.128797] pci 0000:82:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
[   68.128820] pci 0000:82:00.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
[   68.133398] pci 0000:84:00.0: [1c58:0003] type 00 class 0x010802
..............................

[   68.141751] nvme 0000:82:00.0: enabling device (0100 -> 0102)
..............................

我确实在其他地址的 dmesg 中看到很多失败,例如:

[ 1264.718446] pcieport 0000:03:04.0: BAR 14: no space for [mem size     0x00400000]
[ 1264.718448] pcieport 0000:03:04.0: BAR 14: failed to assign [mem size 0x00400000]
[ 1264.718451] pcieport 0000:03:04.0: BAR 13: no space for [io  size 0x1000]
[ 1264.718453] pcieport 0000:03:04.0: BAR 13: failed to assign [io  size 0x1000]

虽然我觉得这些与我所做的无关,但我很乐意有人证明我错了。

所以,在所有这些尝试之后,有没有人知道是否有办法(或者甚至可能)扫描这个 PCIe 附加 NVMe SSD 并且能够在不重启的情况下使用它?我还查看了其他 HDD 的一些线程,这些线程引用了基于 sata 的驱动器的重新扫描,但事实并非如此,因此引用它也无济于事。

提前致谢。

linux disk solid-state-drive
3个回答
1
投票

我在使用 QEMU / Proxmox 对 nvme PCIE 直通进行基准测试时遇到了同样的问题。

首先注意使用的驱动程序:

lspci -nnk -s '0000:82:00.0'

应该说

使用的内核驱动:vfio-pci

现在解绑驱动,然后reprobe:

echo '0000:82:00.0' > /sys/bus/pci/drivers/vfio-pci/unbind
echo '0000:82:00.0' > /sys/bus/pci/drivers_probe

再次检查驱动程序:

lspci -nnk -s '0000:82:00.0'

使用的内核驱动:nvme

lsblk 现在应该显示驱动器。在这里找到程序


0
投票

我尝试这样做是为了节省重启所用的时间。当时的 PCI 设备驱动程序充其量是 dodgy 成功地重新扫描并让所有的鸭子排成一行。该设备是一个 FPGA,为我正在开发的设备驱动程序提供了一个专有接口设备。那是内核 2.6.30-2014 年 3 月左右尝试过的东西。我的(不合标准,但可以接受的)解决方案是重新启动系统。


0
投票

尝试将 pci=realloc 添加到您的内核 cmdline

© www.soinside.com 2019 - 2024. All rights reserved.