HydraRPC: RPC in the CXL Era——论文阅读

ATC 2024 Paper CXL论文阅读笔记整理

问题

远程过程调用(RPC)是分布式系统中的一项基本技术,它允许函数在远程服务器上通过本地调用执行来促进网络通信,隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心通信基础设施的重要组成部分,如Protobufs[21]、Thrift[40]和Finagle[20]。性能和可扩展性对于现代RPC实现至关重要。通信和(反)序列化的额外网络延迟和数据复制会阻碍性能,而硬件(网络)和软件(缓冲区管理)级别的拥塞会影响可扩展性。

现有RPC采用如图2所示的消息传递。沉重的网络堆栈给传统的基于TCP/IP的RPC(A)带来了负担,带来很高的CPU开销。利用RDMA来实现RPC可以提高性能,同时保持与现有应用程序的兼容性,现有方法可分为双边(B)和单边(C)方法。HERD[29]和FaSST[30]是双边操作,但需要额外的数据副本。RFP[41,46]提出单边操作,通过引用,服务器向客户端写入引用,客户端使用该引用通过RDMA Read获取,但需要额外的网络往返来发。

CXL(Compute Express Link)是一种行业支持的用于内存和设备缓存一致性互连,提供高速、高效和灵活的互连。这种环境促进了更复杂、更高效的RPC机制的开发,来增加的吞吐量和降低开销。通过内存共享功能,可以让多台机器访问相同的数据[4],从而取代繁重的网络通信。

挑战

现有基于消息传递的RPC面临三个挑战:

  • 网络开销。如图2所示,每个RPC包含两个消息或RDMA操作,这至少比正常的内存访问贵10倍。即使使用RDMA,最佳的网络往返时间也在2μs左右,而在CXL HDM中,只需要300ns。

  • 数据复制。现代分布式处理系统,如Ray[39],通常按引用传递来避免昂贵的数据复制(图2(A/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)滑动窗口协议,防止访问拥塞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/382183.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】内存五大分区

目录 堆(Heap)是什么五大分区栈区堆区全局/静态区常量区(即.rodata)代码区(.text) 函数栈堆和栈的区别和联系图解 OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会有很大帮助。C语言…

PHP接入consul,注册服务和发现服务【学习笔记】

PHP接入consul,注册服务和发现服务 consul安装 链接: consul安装 启动consul C:\Users\14684>consul agent -dev安装TP5 composer create-project topthink/think5.0.* tp5_pro --prefer-dist配置consul 创建tp5_pro/application/service/Consul.php <?php /*****…

《昇思25天学习打卡营第25天|文本解码原理--以MindNLP为例》

文本解码是自然语言处理&#xff08;NLP&#xff09;中的一个关键步骤&#xff0c;用于将模型生成的向量表示转化为可读的文本。 文本解码的基本原理 在 NLP 中&#xff0c;解码过程通常从模型输出的概率分布或嵌入向量开始&#xff0c;通过某种策略将这些概率或嵌入转化为…

html改写vue日志

本人最近学了vue&#xff0c;想着练手的方法就是改写之前在公司开发的小系统前端&#xff0c;将前端的AJAXJSThymeleaf改为axiosvue。 改写html 将<html>中的<head>和<body>结构移除&#xff0c;将css部分移入<style>&#xff0c; 重新定义了全局的&…

《昇思25天学习打卡营第21天|Pix2Pix实现图像转换》

Pix2Pix 是一种图像转换模型&#xff0c;使用条件生成对抗网络&#xff08;Conditional Generative Adversarial Networks&#xff0c;cGANs&#xff09;实现图像到图像的转换。它主要由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…

【Linux】深入探索`cp`命令:文件复制的全面指南

文章目录 一、cp命令概述二、cp命令的基本用法1. 复制单个文件2. 复制多个文件到目录 三、cp命令的常用选项1. -i&#xff1a;交互式复制&#xff08;interactive&#xff09;2. -r或-R&#xff1a;递归复制目录&#xff08;recursive&#xff09;3. -v&#xff1a;详细模式&am…

DAY05 CSS

文章目录 1 CSS选择器(Selectors)8. 后代(包含)选择器9. 直接子代选择器10. 兄弟选择器11. 相邻兄弟选择器12. 属性选择器 2 伪元素3 CSS样式优先级1. 相同选择器不同样式2. 相同选择器相同样式3. 继承现象4. 选择器不同权值的计算 4 CSS中的值和单位1. 颜色表示法2. 尺寸表示法…

2024.7.22 作业

1.将双向链表和循环链表自己实现一遍&#xff0c;至少要实现创建、增、删、改、查、销毁工作 循环链表 looplinklist.h #ifndef LOOPLINKLIST_H #define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node {union {int len;datatype data;}…

41 QOS技术(服务质量)

1 QOS 产生背景 对于网络业务&#xff0c;影响服务质量的因素包括传输的带宽、传送的时延、数据的丢包率等。网络资源总是有限的&#xff0c;只要存在抢夺网络资源的情况&#xff0c;就会出现服务质量的要求网络总带宽固定的情况下&#xff0c;如果某类业务占用的带宽越多&am…

2024导游资格考试,这些材料提前准备✅

2024年导游考试报名本月开始&#xff01; &#x1f499;大家提前准备好报名材料 1、个人近期白底1寸证件照。 2、身份证照片 3、学历照片 4、健康证明或健康承诺书 5、其他需要上传的材料 &#x1f499;照片文件不通过原因汇总&#xff0c;记得避开这些坑&#xff01; &#x1…

深入浅出理解 C 语言中的 qsort 函数

目录 引言 一、什么是qsort 二、函数原型 1.qsort函数 2.比较函数 三、qsort函数使用示例 1.使用qsort排序整形数据 2.使用qsort排序结构数据 总结 引言 在编程中&#xff0c;排序是一个常见且重要的操作。C 语言标准库提供了一系列排序函数&#xff0c;其中 qsort 函…

嵌入式C++、STM32、树莓派4B、OpenCV、TensorFlow/Keras深度学习:基于边缘计算的实时异常行为识别

1. 项目概述 随着物联网和人工智能技术的发展,智能家居安全系统越来越受到人们的关注。本项目旨在设计并实现一套基于边缘计算的智能家居安全系统,利用STM32微控制器和树莓派等边缘设备,实时分析摄像头数据,识别异常行为(如入侵、跌倒等),并及时发出警报,提高家庭安全性。 系…

HALSTM32 SPI/ABZ/PWM方式读取MT6816磁编码器数据

HALSTM32 SPI方式读取MT6816磁编码器数据 &#x1f4da;MT6816相关资料&#xff08;来自商家的相关资料&#xff09;&#xff1a; 资料&#xff1a;https://pan.baidu.com/s/1CAbdLBRi2dmL4D7cFve1XA?pwd8888 提取码&#xff1a;8888&#x1f4cd;驱动代码编写&#xff0c;可…

【HarmonyOS】HarmonyOS NEXT学习日记:六、渲染控制、样式结构重用

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;六、渲染控制、样式&结构重用 渲染控制包含了条件渲染和循环渲染&#xff0c;所谓条件渲染&#xff0c;即更具状态不同&#xff0c;选择性的渲染不同的组件。 而循环渲染则是用于列表之内的、多个重复元素组成的结构中。 …

yolo5图片视频、摄像头推理demo

yolo5图片、视频推理demo 图片 import torch# 加载预训练模型 model torch.hub.load(./yolo5, custom, pathyolov5s.pt, sourcelocal)# 加载图片 img 1.jpg# 进行推理 results model(img)# 解析结果 detections results.xyxy[0].cpu().numpy() # [x1, y1, x2, y2, confid…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel 简介熔断降级什么是熔断什么是降级相同点不同点 整合Sentinel自定义sentinel流控返回数据使用Sentinel来保护feign远程调用自定义资源给网关整合Sentinel参考 简介 熔断降…

C++的UI框架和开源项目介绍

文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目&#xff1a;QGIS&#xff08;地理信息系统&#xff09; https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目&#xff1a;filezilla https://svn.filezilla-project.org/svn/ wxWidg…

【复习】软件工程

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现&#xff1a; 开发成本和进度的估计常常很不准确 用户对已完成的软件系统不满意&#xff0c;闭门造车 软件质量&#xff08;quality&#xff09;不可靠 软件常常是不可维护的 软件产品供不应…

二次元手游《交错战线》游戏拆解

交错战线游戏拆解案 游戏亮点即核心趣味 一、关键词&#xff1a; 回合制游戏、二次元、机甲、横板、剧情、养成、异星探索。 二、游戏亮点&#xff1a; 符合目标群体审美的原画。 三、核心趣味&#xff1a; 抽卡、肝或者氪金解锁新皮肤。 核心玩法及系统规则 核心玩法&…

el-menu弹出菜单样式不生效

1. 使用 ruoyi 项目时出现的问题。 <template><el-menu:default-active"activeMenu":collapse"false":unique-opened"true"class"container":collapse-transition"true"mode"horizontal"><sideba…