本发明涉及linux内核驱动设计领域,提供一种面向rdma(remote direct memoryaccess)通信的linux内核驱动设计方法,以供gpu与第三方设备基于pcie(peripheralcomponent interconnect express)总线实现无需cpu(central processing unit)参与的直接通信。
背景技术:
1、随着计算机技术的不断发展,算力已经成为了现代社会中的关键生产力,尤其在人工智能、物联网、虚拟现实等领域,对高效计算能力的需求更加迫切。在此背景下,将多种不同类型的处理器或计算设备组合在一起进行计算任务的异构计算技术逐渐崭露头角。与传统的单一类型计算相比,异构计算可以根据计算任务的特点发挥不同计算资源的能力,提高服务器计算性能、能效比和实时性。然而,不同计算单元之间的通信带宽和通信延时限制了异构平台的计算能力的提升。
2、计算任务有两种特点:简单但计算量大、复杂但计算量小,采用下位机fpga(fieldprogrammable gate array)和上位机cpu构成的异构并行计算平台,分别负责计算简单量大和复杂量小的任务可以充分地利用计算资源。由于深度学习等计算领域通常需要大量的计算资源来训练,gpu(graphics processing unit)的并行性能使其成为训练大型神经网络的理性选择,于是可以考虑将gpu代替cpu与fpga构成异构并行计算平台。如果采用传统的驱动设计方法实现两者之间通信,数据必须通过cpu内存,从而会增加传输延迟,亟待一项技术解决解决上述问题。
3、然而nvidia开发的一项技术gpudirect rdma,可实现gpu与第三方设备通信时绕过远程主机,直接与其他设备(例如网卡和存储设备)之间进行数据传输,从而显著降低传输延迟,加快数据交换速度。因此本发明基于rdma技术开发相应linux内核驱动。
技术实现思路
1、为了满足异构计算平台中gpu与fpga通信需求,本发明提供一种面向分子动力学计算的linux内核驱动设计方法。不同于传统的驱动,它能实现gpu与fpga在pcie总线下,绕过cpu,直接进行数据交换,满足异构平台计算速度的需求。
2、本发明采用如下技术方案:
3、步骤s1,与通用的设备驱动类似,rdma驱动通过设置与fpga相对应的device id、vendor id,挂载在fpga上并生成一个可供程序端操作的字符设备句柄。驱动加载至下位机fpga后会有两个关键步骤,一是将pci bar(base address register),即设备的i/o空间或者内存空间,映射到内核地址空间中的指定区域,从而方便内核对设备进行访问和控制;二是将dma操作需要的物理地址与内核使用的虚拟地址进行映射。这些过程都发生在驱动加载至fpga的过程中,一旦驱动卸载就会释放这些映射。
4、步骤s2,在上位机gpu端,分配一段内存空间存储需要传输的数据,再将这段内存空间的参数包括虚拟地址和长度传入驱动,驱动收到后将这段内存固定住,并将其虚拟地址转换为物理地址。程序端利用步骤s1中生成的字符设备句柄,以文件的形式将其打开后,再执行后续的步骤。驱动利用gpudirect rdma技术提供的api将gpu分配的内存固定住并将其虚拟地址转换为物理页列表。
5、步骤s3,dma传输需要上位机和下位机的物理地址。驱动将步骤s2中转换后的物理页列表映射为物理地址,即为gpu的物理地址。fpga物理地址可以通过自定义的vivado工程中的bram内存地址直接读取,并通过上位机程序端直接填写进驱动。
6、步骤s41,上位机利用步骤s1的字符设备句柄,主动发起dma传输,内核驱动得到正确指令后,执行dma传输。首先,dma传输时需要将源地址、目的地址以及传输数据长度传入dma描述符寄存器中,之后驱动需将步骤s2的gpu物理地址、fpga的物理地址以及上位机确定好的数据长度等参数填充进dma描述符寄存器中。
7、步骤s42,驱动初始化控制寄存器描述符、中断寄存器描述符等关键参数,之后驱动内部通过步骤s1中的关键步骤二来将dma需要操作的物理地址映射为内核可使用的虚拟地址。准备好上述条件后,驱动通过写控制寄存器发起传输。在数据传输完毕后,设备会产生一个中断信号,并将中断寄存器的相应位进行复位,以告知驱动本次传输已经完成。驱动程序将读取该中断寄存器后将其复位清除,并通过写控制寄存器来完成dma传输。
8、传输完成后,需要评估通信的速度。本设计框架下采用pcie 4.0架构,理论传输数据速度为32gb/s,其通信速度由以下公式(1)来衡量:
9、
10、其中bw为通信速度,size为传输数据大小,time为传输时间。
1.一种面向rdma通信的linux内核驱动设计方法,其特征在于,包括以下步骤:
2.如权利要求1中的一种面向rdma通信的linux内核驱动设计方法,其特征在于:所述步骤s1中,将fpga和gpu挂载在同一pcie switch下,并加载上驱动,进行映射工作。
3.如权利要求1中的一种面向rdma通信的linux内核驱动设计方法,其特征在于:所述步骤s2中,上位机端对gpu分配一段内存用于存储传输数据,并将其虚拟地址传入驱动,将虚拟地址映射为物理地址。
4.如权利要求1中的一种面向rdma通信的linux内核驱动设计方法,其特征在于:所述步骤s3中,准备好dma传输需要的上下位机硬件的物理地址。
5.如权利要求1中的一种面向rdma通信的linux内核驱动设计方法,其特征在于:所述步骤s4中,上位机启动dma传输指令,驱动接受指令后执行dma传输后,实现gpu对fpga的读写操作。
6.如权利要求1中的一种面向rdma通信的linux内核驱动设计方法,其特征在于:进行完dma传输后,对通信过程的通信速度进行实时评估。