医疗网站建设要多少钱,做网站大连,网站做填充,网站备案能查到什么东西ATC 2024 Paper CXL论文阅读笔记整理
问题
远程过程调用#xff08;RPC#xff09;是分布式系统中的一项基本技术#xff0c;它允许函数在远程服务器上通过本地调用执行来促进网络通信#xff0c;隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…ATC 2024 Paper CXL论文阅读笔记整理
问题
远程过程调用RPC是分布式系统中的一项基本技术它允许函数在远程服务器上通过本地调用执行来促进网络通信隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心通信基础设施的重要组成部分如Protobufs[21]、Thrift[40]和Finagle[20]。性能和可扩展性对于现代RPC实现至关重要。通信和反序列化的额外网络延迟和数据复制会阻碍性能而硬件网络和软件缓冲区管理级别的拥塞会影响可扩展性。
现有RPC采用如图2所示的消息传递。沉重的网络堆栈给传统的基于TCP/IP的RPCA带来了负担带来很高的CPU开销。利用RDMA来实现RPC可以提高性能同时保持与现有应用程序的兼容性现有方法可分为双边B和单边C方法。HERD[29]和FaSST[30]是双边操作但需要额外的数据副本。RFP[41,46]提出单边操作通过引用服务器向客户端写入引用客户端使用该引用通过RDMA Read获取但需要额外的网络往返来发。
CXLCompute Express Link是一种行业支持的用于内存和设备缓存一致性互连提供高速、高效和灵活的互连。这种环境促进了更复杂、更高效的RPC机制的开发来增加的吞吐量和降低开销。通过内存共享功能可以让多台机器访问相同的数据[4]从而取代繁重的网络通信。 挑战
现有基于消息传递的RPC面临三个挑战 网络开销。如图2所示每个RPC包含两个消息或RDMA操作这至少比正常的内存访问贵10倍。即使使用RDMA最佳的网络往返时间也在2μs左右而在CXL HDM中只需要300ns。 数据复制。现代分布式处理系统如Ray[39]通常按引用传递来避免昂贵的数据复制图2A/B/C。使用分布式存储来存储数据只通过RPC传输这些数据的引用从而减少了数据传输开销提高了效率和性能。 可扩展性。多个RPC连接应建立其缓冲区缓冲区共享应限制在同一台服务器上。但是不平衡的RPC连接工作负载会导致高内存占用和较差QoS。从网络的角度来看大量的RPC连接可能会导致网络拥塞。
传统RPC的实现基于消息传递但CXL只提供共享内存抽象通过CXL实现RPC需要考虑三个问题 如何设计RPC的控制平面和RPC协议以充分利用CXL HDM主机管理设备内存的潜在性能。 CXL HDM提供共享内存接口没有消息传递接口没有高效易用的机制来通知CPU请求/响应的到达。 如何在RPC场景中使用CXL HDM时管理它。
本文方法
本文提出了利用CXL HDM主机管理设备内存进行数据传输的HydraRPC。 利用在多台机器之间共享的CXL HDM来避免昂贵的网络轮询、内存复制和反序列化。多个客户端/服务器通过物理链路或CXL交换机连接到同一CXL HDM。每个RPC连接中在CXL HDM有两个消息队列和数据区域消息队列负责将引用作为请求/响应缓冲区传递数据区存储请求/响应的原始数据。消息队列中的每个条目大小为64位包括对数据区域的嵌入式引用偏移和1位到达标志。为了为请求/响应数据分配内存采用了用户空间级内存分配器通过映射设备内存区域来管理CXL HDM。 采用不可缓存的共享来绕过CPU缓存而不是通用的load/store内存访问指令。 利用英特尔的内存类型范围寄存器MTRR技术[31]来控制物理内存区域的访问和缓存在Intel和AMD CPU中都可用。通过优化CPU缓存特定范围内存地址的方式来提高系统性能允许直写、写组合或回写缓存。有两个接口可以设置MTRR一个是ASCII接口允许在/proc/mtrr中读写。另一个是ioctl接口。参数是基本物理地址和存储区域的长度。从ACPI中的SRAT获取CXL HDM的物理内存区域使用ioctl将该内存区域设置为不可缓存。 Intel ISA提供了特定的指令如clflush、clwb或ntstore用于将数据刷新或直接写入CXL HDM。在HydraRPC中客户端和服务器端都使用了非临时内存操作使用clflush/refetch绕过本地缓存。使用内存存储/加载围栏sfence/lfence用于同步非临时访问。 这两种绕过缓存机制的延迟接近。 为了实现低CPU利用率和提高性能提出两种方法。 基于轮询的优化。利用CXL HDM上的轮询来检测传入的请求/响应[23,47]。CPU读取请求/响应条目的到达标志并在到达标志有效时启动处理。为了缓解繁忙轮询期间在内存位置上旋转的问题使用了两个内部函数monitor和mwait专门为具有第三代数据流单指令多数据扩展指令集SSE3的英特尔处理器设计还具有用户模式等效项ummonitor和umwait。客户端/服务器以循环缓冲区的缓存行粒度发出监视指令随后执行mwait指令以停止CPU并节约电源。当另一方修改监控数据时CPU会被唤醒。这种方法有效地减少了CPU占用空间提高了内存轮询的性能。 基于中断。PCIe MSI消息信号中断允许PCIe设备通过消息而不是物理中断线路向CPU发送中断信号[6]通过为每个设备提供多个可扩展的中断向量提供了更高的性能。CXL的事务层基于PCIe可以在内核的MSI表中定义一个新的中断类型。当新的内存写入即将到来时它会启动一个指向主机软件的内存写入事务层包TLP此TLP数据包是使用MSI表中相应条目的地址和数据生成的。随后主机的中断服务例程将TLP识别为中断并相应地对其进行寻址RPC处理被唤醒。【目前平台中的无法启用注册以发出MSI信号没有实现】 支持滑动窗口协议以防止访问拥塞。
在真实的CXL硬件上对HydraRPC进行了评估HydraRPC每个RPC连接可以实现620KOPS的吞吐量比mRPC[17]和基于RDMA的RPC高1.6/3.1倍最低RPC延迟为1.47μs。HydraRPC具有良好的可扩展性每台服务器可以扩展到96个以上的RPC连接性能仅下降19%。
实验
实验环境 硬件架构基于Intel Agilex I系列FPGA[26]和配备Sapphire Rapids CPU的Archer City平台。服务器有96个超线程和64GB DIMM带有16GB CXL HDM的CXL FPGA插入一个节点的PCIe插槽并用两根8x MCIO电缆连接到另一个节点。FPGA中的硬CXL IP严格遵守CXL规范要求并配置为支持内存池和共享。硬件架构存在几个限制 必须对CXL链接访问的内存部分和访问类型读取或读写进行对齐。HydraRPC应管理该内存例如使用memmap内核选项以防止不受控制的访问。 为了确保从devkit内存而不是本地缓存读取数据需要对地址进行缓存失效。 为了确保数据被写入devkit内存而不仅仅是写入本地缓存需要在写入后刷新缓存行例如clflush/refetch。 软件配置使用CXL 1.1驱动程序支持CXL HDM的服务器内共享。使用daxctl工具在devdax设备直接访问模式下初始化CXL HDM允许load/store指令通过mmap映射dax设备来访问CXL HDM。
实验对比延迟、吞吐量、CPU利用率
实验参数请求大小、滑动窗口大小、客户端数量
总结
本文提出基于CXL优化RPC现有基于消息传递的RPC面临网络开销高数据复制开销可扩展性差。本文提出利用CXL HDM主机管理设备内存进行数据传输的HydraRPC。包括4个技术1利用多机间共享的CXL HDM来避免昂贵的网络开销、内存复制和反序列化。2采用不可缓存的共享来绕过CPU缓存而不是通用的load/store内存访问指令。3基于轮询的优化使用SSE3的功率降低指令降低CPU利用率。4滑动窗口协议防止访问拥塞。