问题标签 [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.
c# - 确定哪些(如果有)PCI 设备插入主板 PCI(e) 插槽
我正在用 C# 编写一个程序来跨许多 Windows XP 工作站执行硬件审计。
我需要确定哪些 PCI 设备是通过主板插槽连接的实际卡 - 而不是也使用 PCI 总线(内置在主板中)的板载设备。
我可以使用各种 WMI 类成功列出使用所有 PCI 总线的所有设备,但没有提供任何指示板载与通过插槽连接的内容。
只要信息可靠,我对如何检索信息或信息来源(例如 Pinvoke、WMI、注册表等)并不挑剔。
谢谢!
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 挂在那里.
有人遇到过这种情况吗?请帮我。提前致谢。
pci-e - PCIe 端点能否访问根复合体 BAR?
我正在开发一个嵌入式 PCIe 系统,其中两个 SoC 连接在一起,主机是根联合体,从机是端点。主机将运行 Linux。
通常,主机 SoC 提供内存窗口,其中映射了端点 BAR。这允许主机上的卡驱动程序读取/写入从机上的 IO 或内存。通常,从设备将包含一个内置在 PCIe IP 中的 DMAC,它与 PCIe 地址和本地地址一起工作。主机将通过写入内存窗口来设置此 DMAC。
就我而言,端点没有内置到 PCIe IP 中的 DMAC,但确实有系统 DMAC。那么,两个问题...
- 端点可以通过 BAR 访问根复合体的内存吗?
- 使用系统 DMAC 而不是内置 PCIe DMAC 是否会对性能产生影响?(换句话说,通过 BAR 的访问如何出现在 PCIe 总线上,每次访问是否获得一个 TLP?)
任何帮助表示赞赏!
memory - 在 Linux 中,我正在尝试编写一个可以检查一些物理内存的用户空间应用程序(出于调试目的)
我正在尝试编写一个可以检查一些物理内存(用于调试目的)的用户登陆应用程序。
(w/ CONFIG_STRICT_DEVMEM=n
) 使操作系统崩溃。
我的目录中不存在函数ioremap
、、phys_to_virt
和。我研究并尝试了该过程,但这些功能仍然没有进入我的 usr/include 目录。AFAIK 这意味着它们不适用于用户级应用程序。有谁知道如何从用户空间应用程序访问物理内存?还有一个仅供参考,我试图读取的物理地址是一个 PCI BAR,它是我在“memory at”行中执行的。phys_to_page
/usr/include
make headers_install
lspci -v
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
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
我无法解释我会多么感激任何一点洞察力。
谢谢,
斯科特
cuda - 点对点 CUDA 传输
我听说过点对点内存传输并阅读了一些有关它的内容,但无法真正理解与标准 PCI-E 总线传输相比有多快。
我有一个使用多个 gpu 的 CUDA 应用程序,我可能对 P2P 传输感兴趣。我的问题是:它与 PCI-E 相比有多快?我可以经常使用它来让两台设备相互通信吗?
cuda - CUDA - 通过 PCI-E 传输的速度有多慢?
如果我将单个字节从 CUDA 内核传输到 PCI-E 到主机(零拷贝内存),与传输 200 兆字节的数据相比,它慢了多少?
我想知道,因为我知道通过 PCI-E 传输对于 CUDA 内核来说很慢,所以我想知道的是:如果我只传输一个字节或大量数据,它会改变什么吗?或者也许由于内存传输是“批量”执行的,传输单个字节相对于传输 200 MB 而言非常昂贵且无用?
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?
cuda - CUDA - 将缓冲区传输到多个设备
如果我有三个 gpus 并且我需要向所有三个 gpus 传输一个巨大的缓冲区,如果我为每个 gpus 使用一个 CUDA 流以便它们的复制引擎可以同时执行传输,会有什么不同吗?我的意思是:到达它们三个的 PCI-E 总线是相同的,不是吗?