我在这里读到了关于GPUDirect的https://developer.nvidia.com/gpudirect,在那里的例子中有一个网卡连接到PCIe以及两个图形处理器和一个中央处理器。
如何在尝试访问网络设备的所有客户端之间实施隔离?它们是否都在访问设备的同一PCI条?
网络设备是否使用某种SR-IOV机制来实施隔离?
发布于 2014-01-03 09:46:35
我相信你说的是rDMA,它在GPU Direct的第二版中得到了支持。在这里,NIC卡可以在主机外部发送/接收数据,并利用点对点DMA传输与GPU的内存进行交互。
nVidia将各种函数导出到内核空间,允许程序员查找物理页面驻留在GPU中的位置,并手动映射它们。nVidia 还要求在内核空间内使用物理寻址,这极大地简化了其他第三方驱动程序与的交互方式--通过主机的物理地址空间。
“GPUDirect的RDMA目前依赖于从设备的角度来看,所有物理地址都是相同的。”
-nVidia,Design Considerations for rDMA and GPUDirect
由于nVidia需要物理寻址方案,因此必须在系统中禁用所有IOMMU,因为这些将改变每个卡查看其他卡的存储空间的方式。目前,只有nVidia 支持内核空间中rDMA+GPUDirect的物理寻址。虚拟寻址可以通过它们的UVA提供给用户空间。
如何在尝试访问网络设备的所有客户端之间实施隔离?它们是否都在访问设备的同一PCI条?
是。在内核空间中,每个GPU的内存都是由它的物理地址访问的。
网络设备是否使用某种SR-IOV机制来实施隔离?
网卡的驱动程序负责设置描述符列表和管理对资源的并发访问--在本例中,资源将是GPU的内存。如上所述,nVidia为驱动程序开发人员提供了在图形处理器上管理物理内存映射的能力,允许第三方的NIC驱动程序控制哪些资源对远程计算机可用或不可用。
根据我对网卡驱动程序的了解,我认为这是一个关于rDMA和GPUDirect的非常粗略的概述:
GPU网卡收到rDMA请求(无论是正在读取,还是GPU卡的驱动程序收到数据已到达的中断,或者某些轮询机制已检测到数据已到达。
所有通过rDMA请求数据的远程机器都将使用该主机的物理寻址方案来操作内存。例如,如果两台不同的计算机希望从支持rDMA+GPUDirect的第三台计算机的图形处理器中读取相同的缓冲区,则可以预期传入的读取请求的偏移量是相同的。写入也是如此;但是,如果将多个DMA引擎设置为操作重叠区域中的数据,则会引入一个额外的问题。此并发问题应由第三方NIC驱动程序处理。
在一个非常相关的注释中,我的another post有很多关于nVidia的统一虚拟寻址( UVA )方案的信息,以及如何处理来自内核空间的内存操作本身。这篇文章中的一些句子就是从上面摘录的。
对您问题的简短回答:如果您所说的“隔离”是指每个卡如何为rDMA+GPUDirect操作保留自己的唯一地址空间,这是通过依赖主机的物理地址空间来实现的,该物理地址空间从根本上隔离了PCI上的所有设备所请求的物理地址空间。通过强制使用每个主机的物理寻址方案,nVidia基本上隔离了该主机中的每个GPU。
https://stackoverflow.com/questions/20783037
复制相似问题