CrossPrefetch: Accelerating I/O Prefetching for Modern Storage——论文泛读
ASPLOS 2024 Paper 论文阅读笔记整理
问题
目前计算设备和存储设备之间的性能差距仍然很大。因此,主内存缓存和缓冲区被广泛用于操作系统、用户级文件系统[32]和I/O运行时,在隐藏性能差距和减少I/O瓶颈方面发挥关键作用[23,26,30,37]。现有的操作系统缓存和预取设计都是应用程序透明的[21,24,31,33],旨在优化计算和I/O之间的重叠。缓存的有效性在很大程度上取决于底层I/O预取机制的有效性,通过预测即将到来的I/O访问,并及时加载相应的I/O操作。在Linux等操作系统中,预取是通过虚拟文件系统(VFS)层实现的通用预读组件[19]来实现的。
但现有预取设计主要关注提高预测准确性,忽略了跨层协调和预取的有效性,无法从I/O预取中获得更高的性能,也无法充分利用SSD等现代快速存储设备中的可用带宽。
挑战
-
当前操作系统预取器的有效性低,受限于严格的接口和保守的策略,使得很难有效地利用缓存状态(即缓存中的页面)。readahead、fadvice和madvise等系统调用无法提供预取总字节数等信息,导致预取不足或预取过度。

-
当前的预取操作面临着严重的并发瓶颈。因为预取和常规I/O操作(如读取)使用相同的数据结构(如Xarray[17]),导致锁争用。当多个线程共享一个文件时,它们会争用文件级锁(如inode读写锁),并由于缺乏缓存感知而冗余地发出预取操作。
-
现有的操作系统不能有效地协调操作系统和应用程序之间的缓存状态。难以充分利用可用内存容量和I/O带宽资源,导致应用程序性能不佳。
本文方法
本文提出了CrossPrefetch,一种跨层I/O预取机制,可在操作系统和用户级运行时运行。通过在操作系统和运行时之间划分责任来解决限制,最大限度地减少开销,并实现高缓存命中、低锁争用和高I/O性能。

-
在用户空间和操作系统之间分解和分配任务,以提高预取精度,最大限度地减少不必要的I/O操作,并解决缓存状态可见性难题。操作系统组件(Cross-OS)在操作系统的文件缓存树旁,维护每个inode位图,以评估预取的有效性。通过新的readahead_info系统调用,将信息传递给用户级运行时(Cross-Lib),用于执行预读操作、导出文件的操作系统级缓存位图状态、导出操作系统级遥测。通过这些信息,Cross-Lib优化并减少了预取系统调用,改进专用文件和共享文件的应用程序线程级预取,并实现了预取自定义,绕过复杂的操作系统缓存层修改。
-
为了增强可扩展性并缓解并发瓶颈,将常规I/O和预取操作的I/O路径隔离。便于通过readahead_info系统调用快速查找缓存状态。为了适应线程共享和对文件区域的非冲突访问,通过范围树采用细粒度索引,使线程能够查询其缓存状态并同时启动通知预取请求。通过轻量级访问模式预测,Cross-Lib根据每个索引节点的缓存状态调整预取请求,从而减少了对过多预取系统调用的需求。
-
为了最大限度地利用可用内存资源,基于可用空闲内存实施了积极的预取/逐出策略。通过每文件缓存感知,根据可用的空闲内存在主动预取和逐出之间切换,提高了整体性能。
-
Cross-OS允许更大的预取请求,根据可用内存动态调整预取限制,来优化I/O路径,提高系统性能。
实验评估包括微基准、宏基准和真实工作负载,表明CrossPrefetch使I/O吞吐量的性能提高高达1.22x-3.7x。
总结
针对缓存预取,现有方法受限于接口有效性低、存在并发瓶颈、难以协调操作系统和应用程序间缓存状态。本文提出CrossPrefetch,跨层I/O预取机制,在操作系统和用户运行时之间设计跨层堆栈,操作系统向用户运行时提供缓存可见性,用户运行时提供并发和细粒度的预取。包括三个技术:(1)在用户空间和操作系统间分解任务:Cross-OS在文件缓存树旁维护每个inode位图,以评估预取的有效性;Cross-Lib接收信息,执行预读、导出文件的缓存位图状态、导出操作系统级遥测,通过信息优化并减少了预取系统调用。(2)将常规I/O和预取I/O隔离。为了适应线程共享和对文件区域的非冲突访问,通过范围树,使线程能够查询缓存状态,通过轻量级访问模式预测,Cross-Lib根据每个索引节点的缓存状态调整预取请求。(3)通过每文件缓存感知,根据可用的空闲内存在主动预取和逐出之间切换。Cross-OS允许更大的预取请求,根据可用内存动态调整预取限制。
相关文章:
CrossPrefetch: Accelerating I/O Prefetching for Modern Storage——论文泛读
ASPLOS 2024 Paper 论文阅读笔记整理 问题 目前计算设备和存储设备之间的性能差距仍然很大。因此,主内存缓存和缓冲区被广泛用于操作系统、用户级文件系统[32]和I/O运行时,在隐藏性能差距和减少I/O瓶颈方面发挥关键作用[23,26,3…...
详解 Spark Streaming 的 DStream 对象
一、DStream 的创建 1. 通过 RDD 队列 DStream 在内部实现上是一系列连续的 RDD 来表示。每个 RDD 包含有采集周期内的数据 /** 基本语法:StreamingContext.queueStream(queueOfRDDs: Queue, oneAtATime false) */ object DStreamFromRddQueue {def main(args: Ar…...
QT常用控件
目录 1.控件概述 2. QWidget 核⼼属性 设置组件是否可用 获取组件当前位置和尺⼨ QWidget的图标 组件的透明度设置 QWidget光标的设置 字体的设置 组件提示 设置组件获取到焦点的策略 stylesheet样式表 3.常用组件 QPushButton RadioButton Check Box QLabel …...
如何解决chatgpt出现503 bad gateway的问题
昨日,ChatGPT官网挂了,也就是使用web网页端访问的用户,会出现 bad gateway 情况。我们去ChatGPT官方的监控查看,已经展示相关错误。 影响的范围有: 影响了 ChatGPT 所有计划的所有用户。影响包括所有与 ChatGPT 相关…...
Halcon 双相机标定与拼图(二)
一、概述 这种标定有两种模式,有一个标定板和多个标定板两种 一个标定板 两个相机的重叠区域比较大,那么我们可以把标定板放到那个重叠区域来统一坐标系,如下 这种是只需要一个标定板,这种是推荐的方式 。这种是比较简单的&…...
【加密与解密】【04】Java安全架构
JAVA安全模块划分 JCA,Java Cryptography Architecture,Java加密体系结构JCE,Java Cryptography Extension,Java加密扩展包JSSE,Java Secure Sockets Extension,Java安全套接字扩展包JAAS,Java…...
论文阅读:Neural Scene Flow Prior
目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址:...
如何通过 6 种简单方法将照片从华为转移到 PC?
华为作为全球领先的智能手机供应商之一,最近推出了其自主研发的操作系统——HarmonyOS 2.0,旨在为智能手机、平板电脑和智能手表等设备提供更流畅的用户体验。随着Mate 40/P40等系列手机计划升级到HarmonyOS 2.0,用户可能需要将手机中的文件备…...
QtCharts使用
1.基础配置 1.QGraphicsView提升为QChartView#include <QtCharts> QT_CHARTS_USE_NAMESPACE #include "ui_widget.h"2. QT charts 2.柱状图 2.1QBarSeries //1.创建Qchart对象QChart *chart new QChart();chart->setTitle("直方图演示");//设…...
深入分析 Flink SQL 工作机制
摘要:本文整理自 Flink Forward 2020 全球在线会议中文精华版,由 Apache Flink PMC 伍翀(云邪)分享,社区志愿者陈婧敏(清樾)整理。旨在帮助大家更好地理解 Flink SQL 引擎的工作原理。文章主要分…...
Spring Bean参数校验Validator
Spring Bean参数校验Validator 以下2种方式可以用于所有的 Spring bean 不仅仅是 Controller 控制器。 一、原始类型参数 在控制器(或者其他Bean)上使用Validated注解。 控制器类 RestController RequestMapping("account") Validated pub…...
AOP案例
黑马程序员JavaWeb开发教程 文章目录 一、案例1.1 案例1.2 步骤1.2.1 准备1.2.2 编码 一、案例 1.1 案例 将之前案例中增、删、改相关节后的操作日志记录到数据库表中。 操作日志:日志信息包含:操作人、操作时间、执行方法的全类名、执行方法名、方法…...
Facebook海外户Facebook广告被暂停的原因
有很多伙伴在Facebook广告时,有时会遇到账号被暂停,并通知你违反了哪些规则,那么Facebook广告被暂停的原因有哪些呢?今天小编详细梳理了一些原因,可以往下看哦~ 您的Facebook广告被暂停可能有以下几个原因:…...
网站企业需要适用于什么服务器?
对于网站企业会选择什么样的服务器呢? 为了保证网站能够稳定的运行需要选择高可用性和可靠性的网站服务器,选择具备高可用性架构的云服务器供应商,能够提供多可用区部署、自动故障转移和备份恢复等功能,保障网站在各种故障情况下的…...
winscp无法上传,删除,修改文件并提示权限不够的分析
使用winscp删除文件,报了个错如下 根据这个错就去百度,网上大部分都是通过下面这种方法解决: 在winscp端进行设置 输入主机名(即IP地址)、用户名和密码,然后点击高级 在箭头所指位置输入sudo + sftp应用程序的路径 先查询 sudo find / -name sftp-server -print点击Sh…...
Hadoop3:MapReduce之InputFormat数据输入过程整体概览(0)
一、MapReduce中数据流向 二、MapTask并行度 1、原理概览 数据块:Block是HDFS物理上把数据分成一块一块。数据块是HDFS存储数据单位。 数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapRed…...
【Leetcode Python】70.爬楼梯
麻烦大家要自己去leetcode看题目 第一个思路 用递归会超时 return self.climbStairs(n - 1) self.climbStairs(n - 2)第二个思路 滚动数组思想 class Solution(object):def climbStairs(self, n):""":type n: int:rtype: int"""if(n<2)…...
深度学习 - 张量的广播机制和复杂运算
张量的广播机制(Broadcasting)是一种处理不同形状张量进行数学运算的方式。通过广播机制,PyTorch可以自动扩展较小的张量,使其与较大的张量形状兼容,从而进行元素级的运算。广播机制遵循以下规则: 如果张量…...
【CSS】will-change 属性详解
目录 基本语法属性值常见用途will-change 如何用于优化动画效果示例: will-change 是一个 CSS 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化渲染性能,提前做一些准备工作,从而提高性能。 基本语法…...
linux安装mysql后,配置mysql,并连接navicat软件
Xshell连接登陆服务器 输入全局命令 mysql -u root -p 回车后,输入密码,不显示输入的密码 注意mysql服务状态,是否运行等 修改配置文件my.cnf,这里没找到就找my.ini,指定有一个是对的 find / -name my.cnf 接下…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
