InfiniBand如何工作?

这篇文章描述了CPU和NIC之间通过PCI Express结构在幕后发生的一系列协调事件,这些事件通过InfiniBand互连传输消息并发出完成信号。

应用介绍

这篇文章描述了CPU和NIC之间通过PCI Express结构在幕后发生的一系列协调事件,这些事件通过InfiniBand互连传输消息并发出完成信号。

通过InfiniBand发送消息的主要方法是通过Verbs API。libibverbs是这个API的标准实现,由linux RDMA社区维护。Verbs有两种功能:慢路径功能和快路径功能。慢路径功能(如ibv_open_device、ibv_alloc_pd等)是与资源(如上下文、保护域和内存区域)的创建和配置相关的功能。它们之所以被称为“慢”,是因为它们涉及内核,因此会产生上下文切换的昂贵开销。快速路径功能(如ibv_post_send、ibv_poll_cq等)处理操作的启动和完成。它们被称为“快”,因为它们绕过内核,因此比慢路径函数快得多。通信的关键路径主要由快速路径功能和偶尔的慢路径功能组成,如ibv_reg_mr,以动态注册内存区域(取决于通信中间件)。本文主要讨论程序员执行ibv_post_send后发生的机制。

1


快速PCIe背景


网络接口卡(NIC)通常通过PCI Express(PCIe)插槽连接到服务器。PCIe I/O子系统的主导体是根复合体(Roo Complex, RC)。RC将处理器和内存连接到PCIe结构。PCIe结构可以由设备的层次结构组成。连接到PCIe结构的外围设备称为PCIe端点。PCIe协议由三层组成:事务层、数据链路层和物理层。第一层,最上层,描述发生的事务的类型。对于本文,两种类型的传输层数据包(TLP)是相关的:Memory Write(MWr)和Memory Read(MRd)。与独立的MWr TLP不同,MRd TLP与来自目标PCIe端点的“带数据完成”( Completion with Data, CplD)事务耦合在一起,该事务包含启动器请求的数据。数据链路层使用数据链路层分组(DLLP)确认(ACK/NACK)和基于Credits的流控制机制来确保所有事务的成功执行。发起方可以发出一个事务,只要它有足够的Credits额度。当它从它的邻居那里接收到更新流控制(UpdateFC)DLLPs时,它的Credits就会被补充。这种流控制机制允许PCIe协议具有多个未完成事务。


2


涉及的基本机制


首先,我将描述如何使用完全卸载的方法发送消息,也就是说,CPU只通知NIC有要传输的消息;NIC将做其他一切来传输数据。在这种方法中,CPU更适合于计算活动。然而,这种方法可能对小消息的通信性能有害(这将很快变得明显)。为了提高这种情况下的通信性能,InfiniBand提供了一些操作特性,将在下一节中介绍这些特性。

从CPU程序员的角度来看,存在一个传输队列(Verbs中的发送队列是队列对(Queue Pair,QP))和完成队列(Verbs中是CQ的long)。用户将他们的消息描述符(MD;Work Queue Element/Entry(WQE;wookie)以Verbs形式发布到传输队列,然后在CQ上轮询以确认所发布消息的完成。用户也可以请求得到关于完成的中断的通知。然而,轮询方法是面向延迟的,因为关键路径中没有上下文切换到内核。消息在网络上的实际传输通过处理器芯片和网卡之间的协调来实现,使用内存映射I/O(MMIO)和直接内存访问(DMA)读写。下图中描述这些步骤。

图片

步骤0:用户首先将MD排队到TxQ中。然后,网络驱动程序准备设备特定的MD,该MD包含NIC的报头和指向有效负载的指针。

步骤1:使用8字节的原子写入内存映射位置,CPU(网络驱动程序)通知NIC消息已准备好发送。这叫做按门铃。RC使用MWr PCIe事务执行门铃。

步骤2:门铃响后,网卡通过DMA读取MD。MRd PCIe事务执行DMA读取。

步骤3:NIC将使用另一个DMA读取(另一个MRd TLP)从注册的内存区域获取有效负载。请注意,在NIC可以执行DMA读取之前,必须将虚拟地址转换为物理地址。

步骤4:一旦网卡接收到有效载荷,它就会通过网络传输读取的数据。成功传输后,NIC从目标NIC接收确认(ACK)。

步骤5:接收到ACK后,NIC将DMA写入(使用MWr TLP)一个完成队列条目(CQE;动词中称为cookie;Mellanox InfiniBand中为64字节)到与TxQ关联的CQ。然后CPU将轮询此完成情况以取得进展。


总之,每个post的关键数据路径需要一个MMIO写入、两个DMA读取和一个DMA写入。DMA读取转换为昂贵的往返PCIe延迟。例如,ThunderX2机器的往返PCIe延迟约为125纳秒。

3


操作特性


内联/inlining、Postlist、unsigned completion和Programmed I/O是IB的操作特性,有助于减少这种开销。考虑到QP的深度为n,将在下面描述它们。


  • Postlist:IB允许应用程序通过一个调用ibv_post_send来发布WQE的链接列表,而不是每次只发布一个WQE。它可以将门铃响的次数从n减少到1。

  • 内联:这里,CPU(网络驱动程序)将数据复制到WQE中。因此,通过对WQE的第一次DMA读取,NIC也获得了有效载荷,从而消除了针对有效载荷的第二次DMA读取。

  • unsigned Completions:IB允许应用程序关闭WQE的完成,而不是为每个WQE发送一个完成信号,前提是每n个WQE中至少有一个被发出信号。关闭Completion可以减少NIC对CQE的DMA写入。此外,应用程序轮询更少的CQE,从而减少了取得进展的开销。

  • BlueFlame:BlueFlame是Mellanox用于编程I/O的术语,它编写WQE和Doorbell,切断WQE本身的DMA读取。请注意,BlueFlame只在没有Postlist的情况下使用。使用Postlist,网卡将DMA读取链接列表中的WQEs。


为了减少PCIe往返延迟的开销,开发人员通常将内联和BlueFlame一起用于小消息。它消除了两个PCIe往返延迟。虽然内联和BlueFlame的使用取决于消息大小,但是Postlist和unsigned completion的使用主要依赖于用户的设计选择和应用程序语义

文件列表(部分)

名称 大小 修改日期

立即下载

相关下载

[磁耦合谐振buckss仿真] 无线电能传输技术可有效地解决电源接入问题,使充电过程便捷、安全,解决了传统依靠电导体直接进行物理接触的电源直接接触式输电模式所带来的插电火花、积碳、不易维护、易产生磨损,特别是在特殊环境下用电存在的安全隐患等问题。
[QT学习日记篇01(1)-QT界面初探- *.pro文件详解] Qt基础课程完结项目,完成一款小游戏并封装:翻金币游戏,通过点击金币进行翻面,让所有金币为同一面就游戏通过进入下一关。 过程中会使用前面学到的 “信号和槽”,“Qt图片资源显示”,“Qt播放音频”,“Qt绘图函数”,“Qt消息控件”等等知识。是一次前面所学知识的汇总。
[MMC模块化多电平换流器常用调制策略的对比分析] 在Matlab/Simulink环境下分别搭建了桥臂数量为6和10的两种调制方法的仿真模型,分析了模块数量与调制方法对输出的正弦电压的影响。
[svpwm同步调制] 同步调制下,通过把载波的频率固定为参考波频率的整数倍,同时固定两者的相位关系。通过这种方法可以消除3的倍数次谐波,并且通过适合pwm波正负半周期对称(N载波比取奇数),消除偶次谐波,总体同步调制所含谐波只为6k+1也就是5 7 11 13次谐波等。
[避雷器comsol仿真] comsol实现避雷器的电,磁,热仿真计算模型
[FPGA车牌识别代码

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部