Rio: Order-Preserving and CPU-Efficient Remote Storage Access——论文泛读

EuroSys 2023 Paper 论文阅读笔记整理

问题

现代NVMe SSD和RDMA网络提供了更高的带宽和并发性,但现有的网络存储系统(例如,基于结构的NVMe),由于存储订购保证效率低下,无法充分利用这些新设备。在这些系统中,存储顺序的严格同步执行会使CPU和I/O设备停滞,并降低存储系统的CPU和I/O性能效率。

存储顺序指示数据块到存储介质的特定持久性顺序,广泛用于存储一致性机制(例如,数据库事务[37,39]、软更新[31]和文件系统日志[4,20]),以确保在系统崩溃的情况下确定和正确的磁盘状态。传统的网络存储系统使用昂贵的方法来确保存储顺序,在之前的请求完成并且相关数据块持久划之前,无法处理之后的有序写入请求。这种同步方法会使NIC和SSD未得到充分利用,CPU处于空闲状态,如图按序执行显著降低吞吐量。

现有方法局限性

现有方法阻碍了CPU、I/O设备或两者的优化使用,提供了次优的CPU和I/O效率,并难以扩展到多个服务器。例如,Horae[28],引入了用于存储顺序的专用控制路径。然而,控制路径是同步的,并且在数据路径之前执行,浪费了相当多的CPU周期,并进一步降低了I/O吞吐量。

本文方法

本文提出了Rio,一种远程存储访问的新存储顺序。核心思路是软件堆栈的分层设计,以及并发和异步网络和存储设备,使存储堆栈在概念上类似于CPU管道。受CPU管道乱序执行和按顺序提交的启发,Rio引入了I/O管道。

  • 在I/O管道中,本文引入了按序提交和完成,合并连续的有序请求,并利用网络协议的按顺序交付,以减少临时的无序执行,从而消除不确定性,并为应用程序提供最终完整的存储顺序。

  • 提出异步崩溃恢复算法,可以快速将系统恢复到有序状态。

  • 这些技术的关键原理是称为排序属性的特殊结构,它是每个有序写入请求的标识,并跟踪相邻的有序写入请求。它嵌入在原始请求中,并在整个存储堆栈中携带。因此,尽管是异步的,但每个有序写入请求都能够收集分散的有序属性,并使用上述技术随时重建原始存储顺序。

本文在RDMA堆栈上的Linux NVMe中实现了Rio,并在Rio之上进一步构建了RioFS文件系统。评估表明,Rio在有序写入请求的吞吐量方面分别比RDMA和最先进的存储堆栈Horae高出两个数量级和4.9倍。与Ext4和HoraeFS相比,RioFS平均将RocksDB的吞吐量分别提高了1.9倍和1.5倍。

实验

实验环境:三个物理服务器,一个是启动器,另外两个是目标服务器。每个服务器有2个Intel Xeon Gold 5220 CPU,每个CPU有18个内核,运行频率2.20 GHz。三种类型SSD,目标服务器1有一个三星PM981闪存和一个英特尔905P Optane固态硬盘。目标服务器2有一个三星PM981闪存和一个英特尔P4800X Optane固态硬盘。为每个目标服务器使用2 MB PMR,将32B排序属性持久化到PMR大约需要0.6μs。服务器通过200 Gbps Mellanox ConnectX-6 RDMA NIC相互连接。

数据集:随机写,Filebench [40]的Varmail,RocksDB的db_bench

实验对比:CPU效率=吞吐量/CPU利用率,操作数,延迟,吞吐量,故障恢复时间。线程数,写的块大小

总结

针对网络存储系统由于顺序执行导致CPU和IO性能下降。本文提出Rio,一个保序网络存储堆栈。允许异步处理有序写入、合并连续有序请求、使用顺序保留技术来强制执行持久性顺序。原理是添加了特殊结构,嵌入在原始请求中,使乱序执行的请求随时可以重建原始顺序。

提出两个建议:I/O堆栈应该利用现代NIC和SSD的异步接口(即多个深层硬件队列和异步DMA引擎),以充分利用其高带宽;尽管块合并对于超低延迟SSD上的本地I/O堆栈来说是昂贵的,但值得在块合并中投入一些CPU周期,以显著减少网络上的控制操作(例如,RDMA SEND),并进一步提高CPU和I/O效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[DevOps云实践] 3大云厂商(AWS/GoogleCP/Azure)的服务对比一览

[DevOps云实践] 3大云厂商(AWS/GoogleCP/Azure)的服务对比一览 如今有很多人在使用云端或者把他们的基础架构迁移到云端。每个云服务提供商都有其优势和劣势,大部分情况下您的选择将基于您想要在云中构建什么。您公司的各个团队也很可能会倾向于为他们的特定项目使用不同的…

【论文解读】Robust Collaborative 3D Object Detection in Presence of Pose Errors

CoAlign 摘要引言方法实验结论 摘要 协同3D对象检测利用多个代理之间的信息交换,以在存在诸如遮挡之类的传感器损伤的情况下提高对象检测的准确性。然而,在实践中,由于定位不完善而导致的姿态估计误差会导致空间消息错位,并显著降…

使用html网页播放多个视频的几种方法

前言 因为项目测试需要,我需要可以快速知道自己推流的多路视频流质量,于是我想到可以使用html网页来播放视频,实现效果极其简单,方法有好几种,以下是几种记录: 注意:测试过,VLC需要使…

微服务:Feign篇

1.什么是Feign Feign是一种声明式、模板化的HTTP客户端,可用于调用HTTP API实现微服务之间的远程服务调用。它的特点是使用少量的配置定义服务客户端接口,可以实现简单和可重用的RPC调用。 先来看我们以前利用RestTemplate发起远程调用的代码&#xff…

卡密交易系统 卡密社区SUP系统源码 分销系统平台 分销商城系统开发

卡密社区SUP系统总控源码主站分销系统功能源码 跟以前的卡盟那种控制端差不多总控可以给别人开通,分销,主站,类似自己做系统商一样,自助发卡,卡密交易系统。 搭建环境Nginx1.22 mysql 5.7 php8.1 rids 7.2 安装方法…

【C++】十大排序算法之 插入排序 希尔排序

本次介绍内容参考自:十大经典排序算法(C实现) - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序…

鸿蒙开发就业前景以及发展方向分析~

鸿蒙操作系统作为华为公司自主研发的操作系统,已经成为当下炙手可热的话题。作为一个全新的操作系统,鸿蒙开发为IT行业带来了巨大的就业机会。本文将围绕鸿蒙开发的就业前景以及发展方向展开讨论。 一、鸿蒙开发就业前景 随着鸿蒙操作系统的发布&#…

二叉树——从中序与后序遍历序列构造二叉树、654. 最大二叉树、617. 合并二叉树

从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 在这里插入代码片 输入:inorder [9,3,15…

leetcode 热题 100_和为 K 的子数组

题解一: 前缀和数组哈希表:可以计算所有子数组之和暴力求解,但复杂度太高。对于子数组求和的过程,我们可以采用前缀和数组进行优化,前缀和数组中pre[index]代表nums[0]~nusm[index]之和,当我们要计算子数组…

NLP评价指标

一、分类任务常见评估: 准确度(Accuracy) 评估预测正确的比例,精确率(Precision) 评估预测正例的查准率,召回率(Recall) 评估真实正例的查全率。如果是多分类,则每个类别各自求P、R最终求平均值。 TP(True Positives…

SwiftUI 在 App 中弹出全局消息横幅(上)

功能需求 在 SwiftUI 开发的 App 界面中,有时我们需要在全局层面向用户展示一些消息: 如上图所示:我们弹出的全局消息横幅位于所有视图之上,这意味这它不会被任何东西所遮挡;而且用户可以点击该横幅关闭它。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求…

mac电脑使用pyinstaller打包python脚本

pyinstaller -F template.py 出现报错"AssertionError: Executable contains code signature!" 移除签名 codesign --remove-signature /Users/f7692281/PycharmProjects/TPtestlist/transmit_v6.0.py 打包命令 pyinstaller --windowed transmit_v6.0.py pyinst…

如何使用两个 ESP32-DevKit 开发板的 SDIO 接口测试 AT 固件?

文档参考 ESP32 SDIO AT GuideSDIO 硬件接线说明 硬件准备 两个 ESP32-DevKit 开发板10 KHz 电阻长度低于 10cm 的杜邦线 管脚ESP32 SDIO HostESP32 SDIO SlaveCLK1414CMD1515DAT022DAT144DAT21212DAT31313GNDGNDGND 1-bit SD 模式(默认)&#xff1…

HTTP代理扫描的技术解析(HTTP代理扫描的技术原理和使用方法)

HTTP代理扫描的技术解析 近年来,随着互联网的快速发展,HTTP代理扫描技术也日益成熟。HTTP代理扫描是指通过扫描网络中的HTTP代理服务器,获得有效代理的IP地址和端口,进而实现网络请求的转发。通过HTTP代理扫描,用户可…

深入了解直播美颜SDK,美颜SDK是什么?

在实现直播美颜功能的背后,美颜SDK扮演了重要的角色。今天,笔者将为大家讲解美颜SDK的定义、功能以及在直播行业中的应用。 一、美颜SDK的定义 美颜SDK是一种软件开发工具包,旨在为应用开发者提供一套实现美颜功能的接口和算法。它通常包含…

探究java反射取值与方法取值性能对比

探究java反射取值与方法取值性能对比 由于我开发框架时,经常需要对象取值。常用的取值方式有: 反射取值方法调用取值 环境 同一台电脑: jdk 21.0.2 idea 2023.3.3 1. 测试代码(常用) 1.1 反射取值 public stat…

从零开始手写RPC框架(4)

这一节主要讲述网络传输模块的代码,并且几乎每一行代码都加上了我个人理解的注释,同时也讲述了其中一些以前没见过的函数,和大致的底层运行逻辑。 目录 网络传输实体类网络传输实现基于Socket实现网络传输基于Netty实现网络传输客户端服务端 …

华为---MSTP(一)---MSTP生成树协议

目录 1. MSTP技术产生背景 2. STP/RSTP的缺陷 ​编辑 2.1 无法均衡流量负载 2.2 数据使用次优路径 3. MSTP生成树协议 3.1 MSTP相关概念 3.2 MSTP树生成的形成过程 4. MSTP报文 1. MSTP技术产生背景 RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但…

【k8s管理--可视化界面】

1、可视化界面的软件 kubernetes的可视化软件有以下这些kubernetes dashboard:https://github.com/kubernetes/dashboardkubesphere官网: https://kubesphere.io/zh/rancher 官网: https://www.rancher.cn/kuboard 官网: https:/…

C++11常用知识分享(一)【列表初始化 || 简化声明 || 范围for || 左右值 || 可变参数模板】

目录 一. 列表初始化 1)用法 2) initializer_list 小节: 二,简化声明 1) ,auto 2) ,decltype类 3),nullptr 三,范围for 四,C11后,STL容器变化 五&#xff0c…
最新文章