- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
你好,
我目前正在开展一个项目,其中不断更换 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 的驱动器的重新扫描,但事实并非如此,因此引用它也无济于事。
提前致谢。
最佳答案
我在使用 QEMU/Proxmox 对 nvme PCIE 直通进行基准测试时遇到了同样的问题。
首先记下正在使用的驱动:
lspci -nnk -s '0000:82:00.0'
应该说
Kernel driver in use: vfio-pci
现在解绑驱动,然后重新探测:
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'
Kernel driver in use: nvme
lsblk 现在应该显示驱动器。找到程序 here
关于linux - 在 Linux 中不关机重新枚举和使用 PCIe SSD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36022132/
我正在编写一个支持多种设备的 Linux 设备驱动程序。我有一个 x8 PCIe 卡,上面有 4 个这样的设备。每个都通过一个 PCIe 交换机运行并获得 2 个 PCIe channel 。有没有办
有谁知道放在 PCIe 卡上的 COM,它有一些闪存、一些 RAM、JTAG 支持(或某种调试支持)、一些输入端口,如 USB,也许支持一些输出,如通过 VGA 或 LVDS,只是像这个板子:http
我是 PCIe 的新手,所以这可能是个愚蠢的问题。这似乎是询问有关 PCIe 接口(interface)的相当基本的信息,但我找不到答案,所以我猜我遗漏了一些使答案显而易见的信息。 我有一个系统,其中
为了实现NVMe SSD和其他PCIe设备之间的p2p通信,我想知道是否需要对Linux内核和NVMe驱动程序进行一些修改,或者其他什么?我应该做哪些修改?我已经搜索了几天,但是这方面的信息很少,我需
我一直在阅读令人恐惧的 PCIe 规范,但仍然无法对以下问题得到任何解决方案。 PCIe 是否允许将巨大(例如 16GB)64 位不可预取内存空间映射到 4GB 边界以上?或者它们仍然与 32 位时代
两个独立的设备(端点)可以在没有根复合体参与 PCIe 的情况下相互通信(根据 PCIe 规范是的,但是如何)? 在内存和 IO 事务的情况下,一个端点如何知道另一个端点的地址? 交换机如何在两个下游
对于另一个问题,我使用了与附件相同的情节。可以看到峰值带宽超过5.5GB/s。我正在使用来自代码示例的 NVidia 带宽测试程序来查找主机到设备之间的带宽,反之亦然。 该系统由两个插槽上的 12 个
过去几天开始,我尝试开发主机和端点之间的数据传输,但我无法实现该实现。我尝试了如何使用一些调用读取配置空间(pci_read_long),已成功读取vendor_id、device_id...等数据。
我正在 Linux 中为在 Xilinx UltrascaleMPSoC FPGA 部分上实现的 PCIe 端点编写一个设备驱动程序。我已经正确实现了删除功能。我使用适配器将设备连接到电脑,打开设备,
我正在为 openwrt 开发一个 PCIE 设备驱动程序,在尝试访问定时器中断中的 io 内存时遇到了数据总线错误,我在 last question 中提到过.经过大量研究,我想我可能找到了原因,但
我正在尝试使用流式 DMA 映射将 DMA 添加到我的 PCIe Linux 驱动程序。 FPGA(端点)为 DMA 配置了 BAR4,在我的设置函数中我做了(按顺序): pci_set_master
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我在这里发现了一些关于它的话题,但没有一个能解释我遇到的问题。我只是想通过将其映射到 Linux 中的用户内存空间来访问 PCIe 设备的内部状态寄存器。这是我的系统配置: # uname -a Li
例如,当我使用带有 CUDA C/C++ 和 GPUDirect 2.0 P2P 的多 GPU 系统时,我使用嵌套的 PCI-Express 开关,如图所示,那么我必须知道任意两个 GPU 之间有多少
我正在开发一个在启动时将大量数据推送到显卡的流媒体应用程序。在推送数据时,CPU 几乎没有做任何事情,它以接近零的使用率闲置。 我想监控哪些机器在推送初始数据时遇到困难,哪些机器可以应付,以便我可以为
我写了一个简单的 PCIe 驱动程序,我想测试它是否有效。例如,如果也可以写入和读取从设备使用的内存。 我该怎么做? 哪些东西也应该被证明? 最佳答案 例如,您需要找到设备的 sysfs 条目 /sy
我在我的 intel i7 PC 上使用 intel i210 1G NIC 卡,我想知道这个 NIC 如何与主机通信而无需开箱即用的任何配置。 什么 NIC 作为 PCIe 设备输出到主机,主机 p
我希望能够将视频从连接到我的计算机的摄像头直接流式传输到我通过 PCIE 连接到我的计算机的 FPGA。 我不介意使用 javascript 或 C# 等高级语言来执行此操作(因为这些是我知道的具有视
我已经编写了一个 PCIe 设备驱动程序,但读/写功能无法正常工作。该设备有 3 个内存区域,分别从 0x10800000、0x0c000000 和 0x80000000 开始。仅出于测试目的,我在驱
我正在为 Linux 编写一个 PCIe 驱动程序,目前没有 DMA,并且需要知道一旦从用户空间启用它后如何读取和写入 PCIe 设备。 在驱动程序中,我在 probe() 中执行基础操作: pci_
我是一名优秀的程序员,十分优秀!