GPUDirect如何在共享设备上强制隔离

时间:2013-12-26 10:17:13

标签: gpu nvidia pci-e rdma gpudirect

我一直在这里阅读有关GPUDirect的https://developer.nvidia.com/gpudirect, 在这个示例中,有一个网卡连接到PCIe以及两个GPU和一个CPU。

如何在尝试访问网络设备的所有客户端之间实施隔离?它们都访问设备的相同PCI BAR吗?

网络设备是否使用某种SR-IOV机制来强制隔离?

1 个答案:

答案 0 :(得分:1)

我相信你在谈论 rDMA ,这是第二版GPU Direct支持的。这是NIC卡可以在主机外部发送/接收数据的地方,并利用点对点DMA传输与GPU的内存进行交互。

nVidia将各种函数导出到内核空间,允许程序员查找物理页面驻留在GPU本身的位置,并手动映射它们。 nVidia还要求在内核空间中使用物理寻址,这极大地简化了其他[第三方]驱动程序与GPU交互的方式 - 通过主机的物理地址空间。

  

“GPUDirect的RDMA目前依赖于从PCI设备的角度来看所有物理地址相同。

     

-nVidia,Design Considerations for rDMA and GPUDirect

由于nVidia需要物理寻址方案,所以必须在系统中禁用所有IOMMU,因为这会改变每张卡查看其他卡的存储空间的方式。目前,nVidia 支持内核空间中rDMA + GPUDirect的物理寻址。虚拟寻址可通过其UVA实现,可供用户空间使用。

  

如何在尝试访问网络设备的所有客户端之间实施隔离?它们都访问设备的相同PCI BAR吗?

是。在内核空间中,每个GPU的内存都是通过它的物理地址访问的。

  

网络设备是否使用某种SR-IOV机制来强制隔离?

网卡的驱动程序是设置描述符列表和管理资源并发访问的所有工作 - 在这种情况下,这将是GPU的内存。如上所述,nVidia使驱动程序开发人员能够管理GPU上的物理内存映射,允许第三方的NIC驱动程序控制远程计算机可用或不可用的资源。

根据我对NIC驱动程序的理解,我认为这是对rDMA和GPUDirect相关的一个非常粗略的概述:

  1. 网卡接收rDMA请求(无论是读取还是写入)。
  2. 网卡的驱动程序收到数据已到达的中断或某些轮询机制已检测到数据已到达。
  3. 驱动程序处理请求;现在执行任何地址转换,因为GPU的所有内存映射都可用于内核空间。此外,驱动程序很可能必须配置网络本身,以准备传输(例如,设置特定寄存器,确定地址,创建描述符列表等)。
  4. 启动DMA传输,网卡直接从GPU读取数据。
  5. 然后,此数据通过网络发送到远程计算机。
  6. 所有通过rDMA请求数据的远程机器都将使用该主机的物理寻址方案来操作内存。例如,如果两台独立的计算机希望从具有rDMA + GPUDirect支持的第三台计算机的GPU读取相同的缓冲区,则可以预期传入的读取请求的偏移量是相同的。写作也是如此;但是,如果设置多个DMA引擎来操纵重叠区域中的数据,则会引入另外的问题。此并发问题应由第三方NIC驱动程序处理。

    在一个非常相关的说明中,我的another post有很多关于nVidia的UVA(统一虚拟寻址)方案的信息,以及如何处理内核空间本身的内存操作。这篇文章中的一些句子都是从中抓取来的。

    对您的问题的简短回答:如果“隔离”是指每张卡如何为rDMA + GPUDirect操作保留其自己唯一的地址空间,则可以通过依赖主机的物理实现地址空间从根本上区分PCI总线上所有设备请求的物理地址空间。通过强制使用每台主机的物理寻址方案,nVidia基本上隔离了该主机中的每个GPU。