问题标签 [pci-e]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4593 浏览

c# - 确定哪些(如果有)PCI 设备插入主板 PCI(e) 插槽

我正在用 C# 编写一个程序来跨许多 Windows XP 工作站执行硬件审计。

我需要确定哪些 PCI 设备是通过主板插槽连接的实际卡 - 而不是也使用 PCI 总线(内置在主板中)的板载设备。

我可以使用各种 WMI 类成功列出使用所有 PCI 总线的所有设备,但没有提供任何指示板载与通过插槽连接的内容。

只要信息可靠,我对如何检索信息或信息来源(例如 Pinvoke、WMI、注册表等)并不挑剔。

谢谢!

0 投票
1 回答
728 浏览

linux - ISR 内的 PCIe 读写

我正在修改 linux PCIe 驱动程序以使用 altera FPGA PCIe 内核。在我的驱动程序代码中,我执行 pci_set_master(dev) 以使 PCIe 读写工作。

我正在使用 altera SG-DMA 进行 PCIe 传输,而不是使用 ARM DMA。我需要将启用位写入 FPGA DMA 以启动传输。通过对启用位寄存器执行 pcie write(barx,offset,data) 可以完美地工作。

问题是,当 I/O 中断发生时,我需要我的系统启动 PCIe FPGA DMA,但是当中断发生时,我在 ISR 中放置了 pcie write(barx,offset,data),这导致整个 linux 挂在那里.

有人遇到过这种情况吗?请帮我。提前致谢。

0 投票
3 回答
10100 浏览

pci-e - PCIe 端点能否访问根复合体 BAR?

我正在开发一个嵌入式 PCIe 系统,其中两个 SoC 连接在一起,主机是根联合体,从机是端点。主机将运行 Linux。

通常,主机 SoC 提供内存窗口,其中映射了端点 BAR。这允许主机上的卡驱动程序读取/写入从机上的 IO 或内存。通常,从设备将包含一个内置在 PCIe IP 中的 DMAC,它与 PCIe 地址和本地地址一起工作。主机将通过写入内存窗口来设置此 DMAC。

就我而言,端点没有内置到 PCIe IP 中的 DMAC,但确实有系统 DMAC。那么,两个问题...

  1. 端点可以通过 BAR 访问根复合体的内存吗?
  2. 使用系统 DMAC 而不是内置 PCIe DMAC 是否会对性能产生影响?(换句话说,通过 BAR 的访问如何出现在 PCIe 总线上,每次访问是否获得一个 TLP?)

任何帮助表示赞赏!

0 投票
1 回答
177 浏览

memory - 在 Linux 中,我正在尝试编写一个可以检查一些物理内存的用户空间应用程序(出于调试目的)

我正在尝试编写一个可以检查一些物理内存(用于调试目的)的用户登陆应用程序。

(w/ CONFIG_STRICT_DEVMEM=n) 使操作系统崩溃。

我的目录中不存在函数ioremap、、phys_to_virt和。我研究并尝试了该过程,但这些功能仍然没有进入我的 usr/include 目录。AFAIK 这意味着它们不适用于用户级应用程序。有谁知道如何从用户空间应用程序访问物理内存?还有一个仅供参考,我试图读取的物理地址是一个 PCI BAR,它是我在“memory at”行中执行的。phys_to_page/usr/includemake headers_installlspci -v

0 投票
1 回答
356 浏览

x86 - 在 X86 平台上,从根复合体到端点的单个 Memwr TLP(BAR ACCESS) 的最大大小是多少?

在 X86 平台上,从根复合体到端点的单个 Memwr TLP(BAR ACCESS) 的最大大小是多少?

我的系统设置是有一个PCIe端点设备插入X86 PC,这个设备的bar0大小是1 MBytes,这个内存范围已经被内存映射到用户空间。

如果我将数据复制到内存的一部分,我可以获得端点侧的条形访问(MemWr)。但是如果我做一个大的副本,例如 1 MB,Memwr请求总是被分成非常小的 Memwr TLP(8字节或 4 字节),这128字节的最大有效负载大小相差甚远

为什么根复杂拆分请求?这与X86平台有关吗?在 X86 平台上,从根复合体到端点的 Memwr TLP 的最大大小是多少?

谢谢你。

C

0 投票
1 回答
1819 浏览

linux-kernel - 从 Linux 内核空间到 PCIe 卡的 DMA

我正在尝试为 PCIe 设备编写 linux 驱动程序 - Adlink PCIe 7300A 高速数字 IO 卡。

该驱动程序对于正常的内存传输工作正常,但尝试使用卡的总线主控功能启动缓冲区从 CPU 内存到设备的输出 FIFO 缓冲区的 DMA 传输根本不起作用。

我一直在尝试以几周而不是几天的顺序来解决这个问题。

任何见解都将非常感激。

驱动代码——https://github.com/sbrookes/timing_driver_sdarn/blob/master/kernel_land/timing.c

设备数据表——http: //www.acceed.com/manuals/adlink/P7300A%20Manual.PDF

PLX 9080 PCI 接口芯片数据表 -- http://www.der-ingo.de/bin/milanhelp/PLX9080.pdf

我无法解释我会多么感激任何一点洞察力。

谢谢,

斯科特

0 投票
1 回答
5173 浏览

cuda - 点对点 CUDA 传输

我听说过点对点内存传输并阅读了一些有关它的内容,但无法真正理解与标准 PCI-E 总线传输相比有多快。

我有一个使用多个 gpu 的 CUDA 应用程序,我可能对 P2P 传输感兴趣。我的问题是:它与 PCI-E 相比有多快?我可以经常使用它来让两台设备相互通信吗?

0 投票
2 回答
2119 浏览

cuda - CUDA - 通过 PCI-E 传输的速度有多慢?

如果我将单个字节从 CUDA 内核传输到 PCI-E 到主机(零拷贝内存),与传输 200 兆字节的数据相比,它慢了多少?

我想知道,因为我知道通过 PCI-E 传输对于 CUDA 内核来说很慢,所以我想知道的是:如果我只传输一个字节或大量数据,它会改变什么吗?或者也许由于内存传输是“批量”执行的,传输单个字节相对于传输 200 MB 而言非常昂贵且无用?

0 投票
2 回答
2887 浏览

linux - MMIO read/write latency

I found my MMIO read/write latency is unreasonably high. I hope someone could give me some suggestions.

In the kernel space, I wrote a simple program to read a 4 byte value in a PCIe device's BAR0 address. The device is a PCIe Intel 10G NIC and plugged-in at the PCIe x16 bus on my Xeon E5 server. I use rdtsc to measure the time between the beginning of the MMIO read and the end, a code snippet looks like this:

I'm expecting the elapsed time between (end, init) to be less than 1us, after all, the data traversing the PCIe data link should be only a few nanoseconds. However, my test results show at lease 5.5use to do a MMIO PCIe device read. I'm wondering whether this is reasonable. I change my code to remote the memory barrier (rmb) , but still get around 5 us latency.

This paper mentions about the PCIe latency measurement. Usually it's less than 1us. www.cl.cam.ac.uk/~awm22/.../miller2009motivating.pdf‎ Do I need to do any special configuration such as kernel or device to get lower MMIO access latency? or Does anyone has experiences doing this before?

0 投票
1 回答
217 浏览

cuda - CUDA - 将缓冲区传输到多个设备

如果我有三个 gpus 并且我需要向所有三个 gpus 传输一个巨大的缓冲区,如果我为每个 gpus 使用一个 CUDA 流以便它们的复制引擎可以同时执行传输,会有什么不同吗?我的意思是:到达它们三个的 PCI-E 总线是相同的,不是吗?