技术与生活 性能之重 持久内存编程指南—乱译连载 (24.附录E.远程持久内存复制的未来)

持久内存编程指南—乱译连载 (24.附录E.远程持久内存复制的未来)

如第18章所述,通用目的和应用远程持久性存储器方法是简单的高层协议(ULP)更改。这些方法在对远程持久内存进行多次RDMA写入之后添加一个辅助RDMA Send或RDMA Read。这些实现的痛点之一是特定于Intel的平台特性,即分配写入,默认情况下,该功能会将入站PCIe写入数据从NIC直接推送到最低层的CPU缓存中,从而加快本地软件对新写入数据的访问。

24  附录E.远程持久内存复制的未来

如第18章所述,通用目的和应用远程持久性存储器方法是简单的高层协议(ULP)更改。这些方法在对远程持久内存进行多次RDMA写入之后添加一个辅助RDMA Send或RDMA Read。这些实现的痛点之一是特定于Intel的平台特性,即分配写入,默认情况下,该功能会将入站PCIe写入数据从NIC直接推送到最低层的CPU缓存中,从而加快本地软件对新写入数据的访问。对于持久性内存,最好关闭对持久性内存的写操作分配,提升刷新CPU缓存的需求以保证持久性。但是,平台对分配写操作的控制的限制只是对整个PCIe根复合体的写操作行为的不精确控制。所有连接到给定根复合体的设备都将以相同的方式工作。对系统上运行的其他软件的影响可能很难确定是否通过绕过缓存来延迟对写入数据的访问。这些要求是相互矛盾的,因为对于写入持久内存的操作,应该禁用分配写操作,而对于写入易失性内存的操作,应该启用分配写操作。

要使每个IO都能进行这种控制,网络硬件和软件需要对持久内存提供原生支持。如果网络栈知道持久性内存区域,则可以选择是以每个IO为基础将写入转向持久性内存子系统还是易失性内存子系统,从而完全无需更改全局PCIe根复合体分配写入设置。

此外,如果硬件知道要写入持久内存,则可以通过减少软件必须等待的往返完成次数,在某些工作负载下看到一些显著的性能提高。据估计,这种流水线效率的提高将使常见的数据库SQL Tail-of-Log用例的round-trip延迟减少30-50%,在这种情况下,对持久性内存的较大数据写操作之后会进行8字节的指针更新,只有在持久性域中考虑到第一个远程写数据之后才会写入。第一代软件远程持久化方法需要两个软件round-trip完成,分别用于初始SQL数据写入和小的8字节指针更新写入,如图E-1A所示。在图E-1B所示的改进原生硬件解决方案中,软件等待通过网络的单次round-trip完成。

图24-1 采用RDMA协议高效支持持久内存,避免写后调用发送指令

这些性能改进将在未来的Intel平台、支持Intel RDMA的原生NIC以及行业网络标准中实现。其他供应商支持RDMA的NIC也将支持改进的标准。要允许任何供应商的NIC的用户在任意数量的平台上使用任何供应商的持久内存,就需要广泛的采用。为了实现这一点,IETF、Internet工程任务组和IBTA、InfiniBand贸易协会正在将本地持久内存支持驱动到标准iWarp-wire协议和标准InfiniBand和RoCE-wire协议中。这两个协议在架构上相互跟踪,并在现有的易失性存储器支持中添加了RDMA Flush和RDMA原子写命令。

RDMA Flush–是一个协议命令,用于刷内存区域的一部分。flush命令的完成表示flush域中的所有RDMA写入都已到达最终位置。刷位置暗示允许启动程序软件请求刷新全局可见内存(可以是易失性或持久性内存区域),并分别请求刷新内存是易失性还是持久性内存。RDMA刷新域中包含的RDMA写入数据的范围由正在刷的内存区域的偏移量和长度驱动。覆盖RDMA Flush命令中包含的内存区域的所有RDMA写操作都应包含在RDMA Flush中。这意味着RDMA Flush命令将不会在发起程序系统上完成,除非这些区域以前的所有远程写入都已到达最终请求的放置位置。

RDMA Atomic Write–是一个协议命令,指示NIC以流水线高效的方式将指针更新直接写入持久内存。这使得前面的RDMA Write、RDMA Flush、RDMA Atomic Write和RDMA Flush序列只发生一个完整的软件往返延迟。它只需要等待最终的RDMA Flush完成。

需要对平台硬件进行更改,以便有效地利用新的网络协议添加以实现持久内存支持。RDMA Flush命令中提供的布局暗示允许四种可能的路由组合:

  • 缓存属性;
  • 无缓存属性;
  • 易失性目标;
  • 持久内存目标。

芯片组、CPU和PCIe根复合体需要了解这些布局属性,并根据请求将请求引导或路由到适当的硬件块。

在即将到来的Intel平台上,CPU将查看PCIe TLP处理器提示(PCIe TLP Processor Hint)字段,以允许NIC将指导信息添加到为入站RDMA写入和RDMA Flush生成的每个PCIe数据包中。此PCIe指导机制的可选使用由ACPI规范中的PCIe固件接口定义,并允许NIC内核驱动程序和PCI总线驱动程序启用IO引导并本质上选择cache、no cache作为内存属性和persistent memory或DRAM作为目标。

从软件启用的角度来看,IBTA定义的动词定义将发生变化。这将定义NIC如何管理和实现该特性的细节。中间件,包括OFA libibverbs和libfabric,将基于这些对网络协议的核心添加进行更新,以支持本机持久内存。

鼓励寻求有关RDMA的这些持久性内存扩展开发的更具体信息的读者遵循本书中的参考资料和此处共享的信息,以开始更详细地搜索对高性能远程访问的本机持久性内存支持。在持久性内存使用方面有许多令人兴奋的新发展。

作者: charlie_chen

编程是一生最爱: >> 架构与设计; >> 软件工程; >> 项目管理; >> 产品研发。
联系我们

联系我们

022-XXXXXXXX

在线咨询: QQ交谈

邮箱: 1549889473@qq.com

欢迎交流。
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部