pci-e相关内容
如果我将单个字节从 CUDA 内核传输到 PCI-E 到主机(零拷贝内存),与传输 200 兆字节的数据相比,它的速度要慢多少? 我想知道,因为我知道通过 PCI-E 传输对于 CUDA 内核来说很慢,所以我想知道的是:如果我只传输一个字节或大量数据,它会改变什么吗?或者可能由于内存传输是“批量"执行的,传输单个字节相对于传输 200 MB 而言非常昂贵且无用? 解决方案 希望这张图
..
如果我只有通过 PCI-Express BAR(基地址寄存器)映射到设备缓冲区的内存缓冲区的物理地址,我如何将该缓冲区映射到用户空间? 例如,代码在 Linux 内核中通常应该是什么样子? unsigned long long phys_addr = ...;//获取设备物理地址unsigned long long size_buff = ...l//获取设备大小 buff//... mm
..
我是 PCIe 的新手,所以这可能是一个愚蠢的问题.这似乎是询问有关 PCIe 接口的相当基本的信息,但我很难找到答案,所以我猜我遗漏了一些使答案显而易见的信息. 我有一个系统,其中有一个 ARM 处理器(主机)通过 PCIe(设备)与 Xilinx SoC 通信.SoC 内的端点也是 ARM 处理器. 外部 ARM 处理器(主机)将通过 PCIe 写入 SoC 的 ARM 处理器(设
..
我已经为 RCar-salvator-xs 板构建了 Yocto AGL(6.0.0) 映像并刷新了它的超闪存.现在,我想进行 PCIe 相关调查,为此我想使用 lspci 命令.但是,在以 root 身份登录闪烁的 AGL 映像并执行 lspci 命令后,它会给出 command not found. 如何在 AGL 源代码中包含 pciutils 并构建它以使用 lspci 命令.
..
在向 PCIe 设备写入数据时,可以使用写入组合映射来提示 CPU 应该向设备生成 64 字节的 TLP. 是否可以为读取做类似的事情?以某种方式提示 CPU 读取整个缓存行或更大的缓冲区,而不是一次读取一个字? 解决方案 英特尔有 一份关于从视频 RAM 复制到主内存的白皮书;这应该是相似的,但要简单得多(因为数据适合 2 或 4 个向量寄存器). 它说 NT 加载会将整个缓
..
我正在用 C# 编写一个程序,以在许多 Windows XP 工作站上执行硬件审计. 我需要确定哪些 PCI 设备是通过主板插槽连接的实际卡 - 而不是也使用 PCI 总线(内置于主板中)的板载设备. 我可以使用各种 WMI 类成功列出使用所有 PCI 总线的所有设备,但没有任何设备提供板载设备与通过插槽连接的设备的任何指示. 只要信息可靠,我不会对信息的检索方式或信息来源(例如
..
我试图了解 PCI Express 的工作原理,以便我可以编写一个 Windows 驱动程序,该驱动程序可以在没有板载内存的情况下读写自定义 PCI Express 设备. 我了解 PCIE 配置空间中的基址寄存器 (BAR) 保存 PCI Express 应响应/允许写入的内存地址.(这样理解正确吗?) 我的问题如下: 在谈论 PCIE 时,与物理地址相比,什么是“总线特定地址
..
嗨,我正在编写一个内核,并计划对PCI设备使用MSI中断. 但是,我对文档也很困惑. 我对MSI的理解如下: 从PCI设备的角度来看: 文档表明我需要找到Capabillty ID = 0x05来定位3个寄存器:消息控制(MCR),消息地址(MAR)和消息数据(MDR)寄存器 MCR为MSI中断提供控制功能, MAR提供PCI设备的物理地址一旦中断发生就会写 MDR形
..
我希望所有人都阅读&向PCIe设备写入要由CPU缓存缓存的请求.但是,它没有按我预期的那样工作. 这些是我对回写MMIO区域的假设. 对PCIe设备的写入仅在高速缓存写回时发生. TLP有效负载的大小是缓存块大小(64B). 但是,捕获的TLP不符合我的假设. 每次写入MMIO区域时都会写入PCIe设备. TLP有效载荷的大小为1B. 我使用以下用户空间程序&将8
..
假设您有一个PCIE设备,该设备显示了一个pAR和一个用pci_alloc_consistent(..)声明的DMA区域。 BAR的标志指示不可预取,不可缓存的内存区域。 什么是导致读取DMA区域延迟的原因,同样,这些原因是什么? 感谢您回答这个简单的问题:D! 解决方案 这闻起来有点像作业,但我怀疑很多人对这些概念还不甚了解,因此我将添加一个答案。 仔细考虑一下就是要考
..
我是PCIe的新手,所以这可能是一个愚蠢的问题.这似乎是询问PCIe接口的相当基本的信息,但是我很难找到答案,因此我猜测我缺少一些使答案显而易见的信息. 我有一个系统,其中有一个ARM处理器(主机)通过PCIe(设备)与Xilinx SoC通信. SoC中的端点也是ARM处理器. 外部ARM处理器(主机)将通过PCIe写入SoC的ARM处理器(设备)的寄存器空间.这将命令SoC做各种事
..
我们正在使用Xilinx Vivado开发带有VC709 FPGA的定制处理器,Microblaze和一些外设的系统.我们在“用于PCI Express的AXI桥"中使用了两个"PCIe:BARs". 最初,命令'lspci -vv'用于显示Ubuntu终端中的内存区域. $ lspci -vv 0a:00.0 Memory controller: Xilinx Corporat
..
我正在Linux(Ubuntu 14.04)上使用NVMe卡. 使用xfs文件系统(默认扇区大小为512)格式化时,我发现Intel NVMe卡的性能下降.或任何其他小于4096的扇区. 在实验中,我使用默认选项的xfs文件系统对卡进行了格式化.我尝试在64k页面大小的arm64平台上以64k块大小运行fio. 这是使用的命令 fio --rw=randread --bs=64k --ioe
..
有人可以很简短地指出计算机体系结构中的内存总线和地址总线之间的区别吗?另外,当您说内存总线时,是否表示您是在指数据总线? 解决方案 详细解释了此处。 孤立地,微处理器,内存和输入/输出 端口是有趣的组件,但是它们不能做任何有用的事情。 如果 能够相互通信,它们可以组合成一个完整的系统。这种通信是通过将 系统的各个部分连接在一起的 信号线束(称为总线)完成的。 通常有三
..
我有一个PCIe设备,当准备读取数据缓冲区时,它将发送硬件中断.我相信最好的方法是使用信号,但是我不确定如何使用信号.我相信我需要做的是: 保存用户空间应用程序的PID,以便驱动程序知道将信号发送到哪里 在PCIe设备驱动程序的中断处理程序中,向用户空间应用程序发送信号 在用户空间应用程序中实现信号处理程序功能以处理信号 我不确定如何执行这两个操作. 如何/在哪里保存用户空间应用程
..
我想以编程方式从用户空间访问pci设备树信息.就像根联合体和与其相连的设备一样.我该怎么办,请告诉我. 关于, 普拉迪普(Pradeep) 解决方案 libpci或pcilib(基于lspci的基础)使用sysfs,procfs以及可能的其他方式来访问PCI信息.您可以检查pciutils软件包的源代码以获取更多参考: https://github.com/gittup/pci
..
可以公平地说,pci_alloc_consistent分配了一个连续的非缓存,非分页的内核内存块.我问的原因是我在某些内核/驱动程序代码中看到了此注释(不是在原始内核源代码中),并且我认为我理解内存是连续的,但是不确定是否将其分配为非缓存的,因为缓存一致性的想法是保持缓存中的数据与DMA内存一致. 此外,不确定为什么他们将其称为非分页的. 例如 https://www.kernel.o
..
在Linux内核的上下文中,什么是DMA映射和DMA引擎? 何时可以在Linux设备驱动程序中使用DMA映射API和DMA引擎API? 任何真正的Linux设备驱动程序示例都可以作为参考. 解决方案 在Linux内核的上下文中什么是DMA映射和DMA引擎? 内核通常使用虚拟地址. kmalloc(),vmalloc()之类的函数通常返回虚拟地址.可以将其存储在void*中.虚拟内
..
我有从我的PCIe驱动程序的probe()函数调用的代码(宽松地基于此帖子): 编辑:基于 Andreas Bombe的回复,我将代码更改为使用pci_iomap(),但我仍然遇到系统挂起的情况 static my_pci_dev pci_dev; /* local structure */ static int pci_setup_region(struct pci_dev *dev
..
我有一个带用户空间驱动程序的PCIe设备.我正在通过BAR将命令写入设备,这些命令对延迟敏感,并且数据量很小(〜64字节),所以我不想使用DMA. 如果我使用ioremap_wc重映射内核中BAR的物理地址,然后将64字节写入内核内部的BAR ,则可以看到64字节被写为PCIe上的单个TLP.如果我允许用户空间程序使用MAP_SHARED标志mmap对该区域进行写入,然后写入64字节,则
..