当前位置: 首页 > news >正文

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)滑动窗口协议,防止访问拥塞。

相关文章:

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

ATC 2024 Paper CXL论文阅读笔记整理 问题 远程过程调用(RPC)是分布式系统中的一项基本技术,它允许函数在远程服务器上通过本地调用执行来促进网络通信,隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…...

pve笔记

配置显卡直通参考 https://blog.csdn.net/m0_59148723/article/details/130923893 https://foxi.buduanwang.vip/virtualization/pve/561.html/ https://www.cnblogs.com/MAENESA/p/18005241 https://www.wangsansan.com/archives/181/ pve配置显卡直通到虚拟机后,…...

typecho仿某度响应式主题Xaink

新闻类型博客主题,简洁好看,适合资讯类、快讯类、新闻类博客建站,响应式设计,支持明亮和黑暗模式 直接下载 zip 源码->解压后移动到 Typecho 主题目录->改名为xaink->启用。 演示图: 下载链接: t…...

springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step

springcloud RocketMQ ,一个mq消息发送后,客户端是怎么一步步拿到消息去消费的?我们要从代码层面探究这个问题。 找的流程图,有待考究。 以下我们开始debug: 拉取数据的线程: PullMessageService.java 本…...

GPT-4o mini小型模型具备卓越的文本智能和多模态推理能力

GPT-4o mini 是首个应用OpenAI 指令层次结构方法的模型,这有助于增强模型抵抗越狱、提示注入和系统提示提取的能力。这使得模型的响应更加可靠,并有助于在大规模应用中更安全地使用。 GPT-4o mini 在学术基准测试中,无论是在文本智能还是多模…...

Milvus 向量数据库进阶系列丨部署形态选型

本系列文章介绍 在和社区小伙伴们交流的过程中,我们发现大家最关心的问题从来不是某个具体的功能如何使用,而是面对一个具体的实战场景时,如何选择合适的向量数据库解决方案或最优的功能组合。在 “Milvus 向量数据库进阶” 这个系列文章中&…...

【React】详解受控表单绑定

文章目录 一、受控组件的基本概念1. 什么是受控组件?2. 受控组件的优势3. 基本示例导入和初始化定义函数组件处理输入变化处理表单提交渲染表单导出组件 二、受控组件的进阶用法1. 多个输入框的处理使用多个状态变量使用一个对象管理状态 2. 处理选择框(…...

使用puma部署ruby on rails的记录

之前写过一篇《记录一下我的Ruby On Rails的systemd服务脚本》的记录,现在补上一个比较政治正确的Ruby On Rails的生产环境部署记录。使用Puma部署项目。 创建文件 /usr/lib/systemd/system/puma.service [Unit] DescriptionPuma HTTP Server DocumentationRuby O…...

如何在Linux上使用Ansible自动化部署

Ansible是一个开源的自动化工具,可以帮助开发人员和系统管理员对大规模的服务器进行自动化部署和管理。它使用SSH协议来在远程服务器上执行任务,并通过模块化的方式提供了丰富的功能,可以轻松地管理服务器配置、软件部署和应用程序运行。 在…...

scrapy爬取城市天气数据

scrapy爬取城市天气数据 一、创建scrapy项目二、修改settings,设置UA,开启管道三、编写爬虫文件四、编写items.py五、在weather.py中导入WeatherSpiderItem类六、管道中存入数据,保存至csv文件七、完整代码一、创建scrapy项目 先来看一下爬取的字段情况: 本次爬取城市天…...

一天搞定React(5)——ReactRouter(下)【已完结】

Hello!大家好,今天带来的是React前端JS库的学习,课程来自黑马的往期课程,具体连接地址我也没有找到,大家可以广搜巡查一下,但是总体来说,这套课程教学质量非常高,每个知识点都有一个…...

微信小程序之计算器

在日常生活中,计算器是人们广泛使用的工具,可以帮助我们快速且方便地计算金额、成本、利润等。下面将会讲解如何开发一个“计算器”微信小程序。 一、开发思路 1、界面和功能 “计算器”微信小程序的页面效果如图所示 在计算器中可以进行整数和小数的…...

【logstash】logstash使用多个子配置文件

这里有个误区在pipelines.yml中写conf.d/*,实测会有问题,不同的filter处理逻辑会复用。 现在有两个从kafka采集日志的配置文件:from_kafka1.conf,from_kafka2.conf 修改pipelines.yml配置文件 config/pipelines.yml- pipeline.i…...

暴风骑士S9电摩上市,定义青少年骑行安全新标准

暴风骑士,作为全球高端儿童电动车的开创品牌,以其卓越的技术实力和创新精神,不断推动行业发展。如今,暴风骑士再次突破自我,推出了全新力作——S9青少年电摩。这款全新上市的青少年专属电摩,以其领先的安全…...

spring security如何适配盐存在数据库中的密码

19.token认证过滤器代码实现_哔哩哔哩_bilibili19.token认证过滤器代码实现是SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权-挑战黑马&尚硅谷的第20集视频,该合集共计41集,视频收藏或关注UP主,及时了解更多相关视…...

Go语言编程 学习笔记整理 第2章 顺序编程 后半部分

1.流程控制 1.1 条件语句 if a < 5 { return 0 } else { return 1 } 注意&#xff1a;在有返回值的函数中&#xff0c;不允许将“最终的”return语句包含在if...else...结构中&#xff0c; 否则会编译失败&#xff01;&#xff01;&#xff01; func example(x int) i…...

美团后端二面

美团后端二面 ……………………………… 两道场景 一道 数字转中文读法&#xff08;1000-》一千&#xff09; 0八股0自我介绍 反问 “您觉得我能过吗&#xff1f;” “这个需要横行对比之后才能有结果” ……………………………… 什么时候到岗 场景题 1 假设我有一个…...

学懂C语言(十六):对C语言作用域规则 局部变量、全局变量的认识

一、C 作用域规则 任何一种编程中&#xff0c;作用域是程序中定义的变量所存在的区域&#xff0c;超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量&#xff1a; 局部变量&#xff1a;在函数或块内部全局变量&#xff1a;在所有函数外部形式参数&#xff1a;在函数…...

关于TS(typescript)的理论知识

关于TS&#xff08;typescript&#xff09;的理论知识 TypeScript 是一种由微软开发的开源编程语言&#xff0c;它是 JavaScript 的一个超集&#xff0c;添加了可选的静态类型和基于类的面向对象编程。TypeScript 最终会被编译成纯 JavaScript 代码&#xff0c;以便在任何支持 …...

【OpenCV C++20 学习笔记】基本图像容器——Mat

【OpenCV C20 学习笔记】基本图像容器——Mat 概述Mat内部结构引用计数机制颜色数据格式 显式创建Mat对象使用cv::Mat::Mat构造函数矩阵的数据项 使用数组进行初始化的构造函数cv::Mat::create函数MATLAB风格的初始化小型矩阵通过复制创建Mat对象 Mat对象的输出其他普通数据项的…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...