本发明涉及数据传输,尤其涉及一种远程内存访问的数据传输方法、装置、设备及存储介质。
背景技术:
1、数据中心应用越来越依赖高速网络,需要具备高吞吐量、低延迟、低cpu开销的网络通信特性,支持大规模的网络通信。特别是对于带宽密集型应用,例如分布式机器学习和云存储,服务器之间需要超过100gbps的网络带宽,而对于在线服务,如数据库在线分析处理,则需要低延迟以最小化查询响应时间。同时,大多数应用都希望网络堆栈具有低cpu开销,以便为计算保留尽可能多的cpu核。
2、远程直接内存访问(remote direct memory access,rdma)已成为一种流行的高速网络技术,这主要归功于其内核旁路和传输卸载等架构创新所提供的高吞吐量、低延迟和低cpu开销。然而,尽管rdma技术具有高性能和低cpu开销,但商用rdma网卡(rdmanetwork interface card,rnic)仍然面临着主存带宽竞争问题,具体表现为:当rnic执行直接内存访问(direct memory access,dma)操作将接收到的消息存储到主存时,rnic会与cpu的其他计算流程(例如主存数据分析、数据复制和垃圾收集等)争用主存带宽;在此竞争下,rnic难以获得足够的主存带宽来将接收到的数据包及时存储到主存,致使rnic片上缓存充斥未处理的数据包,最终导致rnic内数据溢出,只能丢弃已收到但未处理的数据包;同时,数据溢出会触发拥塞控制,从而导致网络吞吐量下降和显著增加延迟。
3、随着高速网络发展和部署规模扩大,主存带宽竞争问题将进一步加剧。因此,如何避免主存带宽竞争对rdma网络通信的影响,是rdma网络应用中急需解决的问题。
技术实现思路
1、基于此,有必要针对上述问题,提出了一种远程内存访问的数据传输方法、装置、设备及存储介质。
2、一种远程内存访问的数据传输方法,所述方法包括:
3、s1、第二主机需要向第一主机发送的待传输消息;
4、s2、所述第二主机确定所述待传输消息的消息类型,所述消息类型包括大消息、小消息;
5、s3、确定所述待传输消息的消息类型为小消息后,所述第二主机与第一主机通过rdma send&recv原语进行通信;所述第二主机生成对应的工作队列元素放入发送队列;所述第一主机从末级缓存模块中的小消息缓存区取出一个缓存块并生成相应的工作队列元素放入共享接收队列;
6、s4:所述第一主机判断所述小消息缓存区中是否存在剩余缓存块或存在空闲缓存;
7、s5:如果所述小消息缓存区不存在剩余缓存块和空闲缓存,则所述第一主机拒绝所述第二主机的通信请求;
8、s6:如果所述小消息缓存区存在剩余缓存块或者空闲缓存,所述第二主机根据工作队列元素指向的主存消息存放地址取出待传输消息发送到所述第一主机,所述第一主机根据共享接收队列中的工作队列元素指向的地址将待传输消息传输到准备好的缓存空间中,执行s11;
9、s7、确定所述待传输消息的消息类型为大消息后,所述第二主机与第一主机通过rdma read/write原语进行通信,所述第一主机确定待传输消息的需求容量大小;
10、s8、所述第一主机判断所述待传输消息的需求容量大小是否满足剩余存储空间;
11、s9、如果所述待传输消息的需求容量大于剩余存储空间,所述第一主机拒绝所述第二主机的通信请求;
12、s10、如果所述待传输消息的需求容量小于等于剩余存储空间,所述第一主机根据需求容量在大消息缓存区分配容量,所述第二主机将待发送消息切分为多个数据包发送,每个数据包一抵达第一主机的大消息缓存区后立刻执行s11;
13、s11、当末级缓存模块中的缓存区接收数据后,缓存区通过与应用程序的共享缓存映射通知应用程序处理数据;
14、s12、如果数据在末级缓存模块中的停留时间大于数据停留时间阈值,将该消息的数据卸载到主存的接收缓冲区中,并告知所述应用程序相关信息,所述应用程序后续从主存中取出数据并处理;
15、s13、如果数据在末级缓存模块中的停留时间小于等于数据停留时间阈值,确定处理完成。
16、在一种具体实施例中,所述s1之前,所述方法还包括:
17、所述第一主机与第二主机建立rdma通信,初始化通信资源,包括双方的队列对编号、数据缓存地址;
18、所述初始化通信资源通过套接字通信或rdma连接管理器完成。
19、所述方法中,所述确定所述待传输消息的消息类型,具体包括:根据所述待传输消息的大小与数据阈值进行比较,根据比较结果确定消息类型;
20、如果所述待传输消息的大小小于等于数据阈值,确定消息类型为小消息;
21、如果所述待传输消息的大小大于数据阈值,确定消息类型为大消息。
22、在一种具体实施例中,所述数据阈值设置为4kb;共享接收队列中每个工作队列元素指向末级缓存模块中的大小为4kb的缓存块。
23、在一种具体实施例中,所述末级缓存模块中分配属于rdma通信下的数据接收使用的缓存空间,小消息缓存区和大消息缓存区共用该缓存空间;所述末级缓存模块的缓存空间大小=网络带宽*数据停留时间阈值*需要在缓存空间中处理的停留数据比例。
24、在一种具体实施例中,所述第一主机确定待传输消息的需求容量大小,具体包括:待传输消息的需求容量=待发送数据量*数据停留时间阈值,所述数据停留时间阈值设置为200微秒。
25、在一种具体实施例中,所述第二主机将待发送消息切分为多个数据包发送,具体包括:将待发送消息切分为若干个不大于256kb的数据包发送。
26、一种远程通信装置,所述装置包括:
27、请求模块,用于在第二主机需要向第一主机发送的待传输消息时生成通信请求;
28、消息类型确定模块,用于确定所述待传输消息的消息类型,所述消息类型包括大消息、小消息;
29、小消息传输模块,用于确定所述待传输消息的消息类型为小消息后,所述第二主机与所述第一主机通过rdma send&recv原语进行通信;所述第二主机生成对应的工作队列元素放入发送队列;所述第一主机从末级缓存模块中的小消息缓存区取出一个缓存块并生成相应的工作队列元素放入共享接收队列,并判断所述小消息缓存区中是否存在剩余缓存块或存在空闲缓存;如果所述小消息缓存区不存在剩余缓存块和空闲缓存,拒绝第二主机到第一主机的通信请求;如果所述小消息缓存区存在剩余缓存块或者空闲缓存,所述第二主机根据工作队列元素指向的主存消息存放地址取出待传输消息发送到第一主机,所述第一主机根据共享接收队列中的工作队列元素指向的地址将待传输消息传输到准备好的缓存空间中;
30、大消息传输模块,用于确定所述待传输消息的消息类型为大消息后,所述第二主机与所述第一主机通过rdma read/write原语进行通信,所述第一主机确定待传输消息的需求容量大小,并判断所述待传输消息的需求容量大小是否满足剩余存储空间;如果所述待传输消息的需求容量大于剩余存储空间,拒绝第二主机到第一主机的通信请求;如果所述待传输消息的需求容量小于等于剩余存储空间,所述第一主机根据需求容量在大消息缓存区分配容量,所述第二主机将待发送消息切分为多个数据包发送;
31、传输处理模块,用于当末级缓存模块中的缓存区接收数据后,缓存区通过与应用程序的共享缓存映射通知应用程序处理数据;如果数据在末级缓存模块中的停留时间大于数据停留时间阈值,将该消息的数据卸载到主存的接收缓冲区中,并告知所述应用程序相关信息,所述应用程序后续从主存中取出数据并处理;如果数据在末级缓存模块中的停留时间小于数据停留时间阈值,确定处理完成。
32、一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行以下步骤:
33、s1、第二主机需要向第一主机发送的待传输消息;
34、s2、所述第二主机确定所述待传输消息的消息类型,所述消息类型包括大消息、小消息;
35、s3、确定所述待传输消息的消息类型为小消息后,所述第二主机与第一主机通过rdma send&recv原语进行通信;所述第二主机生成对应的工作队列元素放入发送队列;所述第一主机从末级缓存模块中的小消息缓存区取出一个缓存块并生成相应的工作队列元素放入共享接收队列;
36、s4:所述第一主机判断所述小消息缓存区中是否存在剩余缓存块或存在空闲缓存;
37、s5:如果所述小消息缓存区不存在剩余缓存块和空闲缓存,则所述第一主机拒绝所述第二主机的通信请求;
38、s6:如果所述小消息缓存区存在剩余缓存块或者空闲缓存,所述第二主机根据工作队列元素指向的主存消息存放地址取出待传输消息发送到所述第一主机,所述第一主机根据共享接收队列中的工作队列元素指向的地址将待传输消息传输到准备好的缓存空间中,执行s11;
39、s7、确定所述待传输消息的消息类型为大消息后,所述第二主机与第一主机通过rdma read/write原语进行通信,所述第一主机确定待传输消息的需求容量大小;
40、s8、所述第一主机判断所述待传输消息的需求容量大小是否满足剩余存储空间;
41、s9、如果所述待传输消息的需求容量大于剩余存储空间,所述第一主机拒绝所述第二主机的通信请求;
42、s10、如果所述待传输消息的需求容量小于等于剩余存储空间,所述第一主机根据需求容量在大消息缓存区分配容量,所述第二主机将待发送消息切分为多个数据包发送,每个数据包一抵达第一主机的大消息缓存区后立刻执行s11;
43、s11、当末级缓存模块中的缓存区接收数据后,缓存区通过与应用程序的共享缓存映射通知应用程序处理数据;
44、s12、如果数据在末级缓存模块中的停留时间大于数据停留时间阈值,将该消息的数据卸载到主存的接收缓冲区中,并告知所述应用程序相关信息,所述应用程序后续从主存中取出数据并处理;
45、s13、如果数据在末级缓存模块中的停留时间小于等于数据停留时间阈值,确定处理完成。
46、一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行以下步骤:
47、s1、第二主机需要向第一主机发送的待传输消息;
48、s2、所述第二主机确定所述待传输消息的消息类型,所述消息类型包括大消息、小消息;
49、s3、确定所述待传输消息的消息类型为小消息后,所述第二主机与第一主机通过rdma send&recv原语进行通信;所述第二主机生成对应的工作队列元素放入发送队列;所述第一主机从末级缓存模块中的小消息缓存区取出一个缓存块并生成相应的工作队列元素放入共享接收队列;
50、s4:所述第一主机判断所述小消息缓存区中是否存在剩余缓存块或存在空闲缓存;
51、s5:如果所述小消息缓存区不存在剩余缓存块和空闲缓存,则所述第一主机拒绝所述第二主机的通信请求;
52、s6:如果所述小消息缓存区存在剩余缓存块或者空闲缓存,所述第二主机根据工作队列元素指向的主存消息存放地址取出待传输消息发送到所述第一主机,所述第一主机根据共享接收队列中的工作队列元素指向的地址将待传输消息传输到准备好的缓存空间中,执行s11;
53、s7、确定所述待传输消息的消息类型为大消息后,所述第二主机与第一主机通过rdma read/write原语进行通信,所述第一主机确定待传输消息的需求容量大小;
54、s8、所述第一主机判断所述待传输消息的需求容量大小是否满足剩余存储空间;
55、s9、如果所述待传输消息的需求容量大于剩余存储空间,所述第一主机拒绝所述第二主机的通信请求;
56、s10、如果所述待传输消息的需求容量小于等于剩余存储空间,所述第一主机根据需求容量在大消息缓存区分配容量,所述第二主机将待发送消息切分为多个数据包发送,每个数据包一抵达第一主机的大消息缓存区后立刻执行s11;
57、s11、当末级缓存模块中的缓存区接收数据后,缓存区通过与应用程序的共享缓存映射通知应用程序处理数据;
58、s12、如果数据在末级缓存模块中的停留时间大于数据停留时间阈值,将该消息的数据卸载到主存的接收缓冲区中,并告知所述应用程序相关信息,所述应用程序后续从主存中取出数据并处理;
59、s13、如果数据在末级缓存模块中的停留时间小于等于数据停留时间阈值,确定处理完成。
60、采用本发明实施例,具有如下有益效果:
61、本发明分别对小消息和大消息采用不同的rdma操作和控制方法。对于小消息,选择rdma send/recv,并用共享接收队列机制来聚合接收队列;对于大消息,使用rdma read/write,根据需求容量大小,两者共享使用数据接收缓存池的缓存空间,通过设置两类消息的使用数据阈值来避免缓存资源独占。
1.一种远程内存访问的数据传输方法,其特征在于,所述方法包括:
2.根据权利要求1所述的远程内存访问的数据传输方法,其特征在于,所述s1之前,所述方法还包括:
3.根据权利要求2所述的远程内存访问的数据传输方法,其特征在于,所述确定所述待传输消息的消息类型,具体包括:根据所述待传输消息的大小与数据阈值进行比较,根据比较结果确定消息类型;
4.根据权利要求3所述的远程内存访问的数据传输方法,其特征在于,所述数据阈值设置为4kb;共享接收队列中每个工作队列元素指向末级缓存模块中的大小为4kb的缓存块。
5.根据权利要求3所述的远程内存访问的数据传输方法,其特征在于,所述末级缓存模块中分配属于rdma通信下的数据接收使用的缓存空间,小消息缓存区和大消息缓存区共用该缓存空间;所述末级缓存模块分配的缓存空间大小=网络带宽*数据停留时间阈值*需要在缓存空间中处理的停留数据比例。
6.根据权利要求1所述的远程内存访问的数据传输方法,其特征在于,所述第一主机确定待传输消息的需求容量大小,具体包括:待传输消息的需求容量=待发送数据量*数据停留时间阈值,所述数据停留时间阈值设置为200微秒。
7.根据权利要求1所述的远程内存访问的数据传输方法,其特征在于,所述第二主机将待发送消息切分为多个数据包发送,具体包括:将待发送消息切分为若干个不大于256kb的数据包发送。
8.一种远程通信装置,其特征在于,所述装置包括:
9.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。