zIO: Accelerating IO-Intensive Applications with Transparent Zero-Copy IO——论文泛读

OSDI 2022 Paper 论文阅读笔记整理

问题

零拷贝IO一直是一个长期的性能目标。复制会引入内存和CPU开销,限制IO密集型应用程序的性能。IO数据复制在IO堆栈内、通过其应用程序编程接口(API)和应用程序内执行。现有工作的重点是开发零拷贝IO API [1,11,12,15,17,28,32]来消除IO堆栈[27,28]和IO堆栈API内的拷贝,但IO的数据仍然被复制。

挑战

IO密集型应用程序为每个IO请求执行多达8个请求数据副本。其中许多副本发生在应用程序本身的子系统之间(应用程序副本)。在IO堆栈API上只执行一部分(例如,在系统和用户提供的缓冲区之间复制数据)。因为使用副本可以简化开发,便于子系统内部处理,简化异步IO,简化数据处理。

本文方法

本文提出了zIO,用于IO密集型应用程序的透明零拷贝IO机制。关键思路是:应用程序通常只修改其处理的数据的一部分。

  • zIO乐观地假设大多数数据保持不变,通过插入IO系统调用和C标准库调用(如memcpy和memmove)来消除副本。为了保持一致性,中间数据区域都保持未映射状态。如果应用程序试图修改任何中间数据区域,zIO会通过页面故障拦截访问,并对页面执行复制和重映射。为了处理未对齐的内存区域,zIO执行未对齐区域的复制,只保留未映射的页面对齐部分。因为未对齐的节很小,复制它们不会损害性能。

  • 为了避免数据跟踪开销损害应用程序性能,zIO根据每个IO动态决定何时跟踪和何时复制。如果IO缓冲区的大小小于16KB,则zIO会复制该缓冲区。zIO还跟踪页面错误的平均数量,并消除每个缓冲区的复制字节。如果访问的字节与从副本中消除的字节的比率超过6%,zIO会复制缓冲区。

  • 为了消除跨IO堆栈API的副本,使用内核旁路IO堆栈。内核旁路堆栈使用共享内存来实现它们的API,允许zIO在IO从IO设备到达时跟踪,并消除副本。

  • 利用非易失性存储器(NVM)实现了进一步的优化:乐观输入持久化。如果从IO堆栈接收的输入由应用程序通过存储堆栈持久化在NVM中,则乐观输入持久化可以实现副本到存储的端到端透明消除。为此扩展了zIO以识别NVM映射。如果原始数据已经存在于NVM中,则可以消除到NVM的数据拷贝。否则,拷贝是强制持久性所必需的。

通过Redis、Icecast、MongoDB等IO密集型应用程序来评估zIO。zIO将应用程序吞吐量提高了1.8倍,使用内核旁路IO堆栈和乐观的网络接收器持久性将应用程序吞吐率提高了2.5倍。与常见的零拷贝IO堆栈API(如内存映射文件)相比,由于减少了TLB未命中开销,zIO可以将性能提高17%。

实验

实验环境:在双插槽Intel Cascade Lake SP系统的单个插槽上评估,系统运行频率为2.2GHz,每个插槽有24个内核,并配有100 GbE ConnectX-5 NIC,每个插槽都有192 GB DDR4 DRAM、3 TB Intel Optane DC NVM,每个插槽有6个DRAM和NVM DIMM,机器运行Fedora 27,Linux内核版本为5.10.0。

数据集:微基准测试、Redis redis-benchmark [21]、Icecast、MongoDB YCSB

实验对比:吞吐量

实验参数:副本数量、IO大小、线程数、页错误数、消融实验

总结

针对IO密集型应用的零拷贝IO。本文提出zIO,关键思路是:应用程序通常只修改其处理的数据的一部分。(1)乐观地假设大多数数据保持不变。为了保持一致性,中间数据区域保持未映射状态,如果应用程序试图修改任何中间数据区域,zIO通过页面故障拦截访问,并对页面执行复制和重映射。为了处理未对齐的内存区域,zIO执行未对齐区域的复制,只保留未映射的页面对齐部分。(2)避免数据跟踪开销损害应用程序性能,zIO根据每个IO动态决定何时跟踪和何时复制。如果IO缓冲区的大小小于16KB,则zIO会复制该缓冲区。zIO跟踪页面错误的平均数量,并消除每个缓冲区的复制字节。如果访问的字节与从副本中消除的字节的比率超过6%,zIO会复制缓冲区。(3)使用内核旁路IO堆栈,消除跨IO堆栈API的副本。内核旁路堆栈使用共享内存实现,允许zIO在IO从IO设备到达时跟踪,并消除副本。(4)利用非易失性存储器(NVM)实现:乐观输入持久化。如果从IO堆栈接收的输入由应用程序通过存储堆栈持久化在NVM中,则实现副本到存储的端到端透明消除。为此扩展了zIO以识别NVM映射。如果原始数据已经存在于NVM中,则可以消除到NVM的数据拷贝。

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

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

相关文章

[Python学习篇] Python创建项目

新建项目 打开开发工具 PyCharm 选择 New Project 目录结构如下 运行 hello world 选中项目,右键 New -> Python File 进行创建文件 运行项目

从redux的基本概念渐进式理解redux/toolkit的用法

概念 Redux toolkit是帮助提高redux开发效率的一个库 React-redux 是将React和Redux toolkit绑定在一起的一个库 action 是一个对象,里面有一个type属性 action creator是一个函数,这个函数可以返回上面的action对象。 reducer 是一个函数,接受两个参数(initilastate, acti…

基于springboot+vue实现的酒店客房管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

反射Reflection

1. 反射的出现背景 Java 程序中,所有的对象都有两种类型:编译时类型和运行时类型,而很多时候对象的编译时类型和运行时类型不一致。 例如:某些变量或形参的声明类型是 Object 类型,但是程序却需要调用该对象运行时类型…

Java编程使用CGLIB动态代理介绍与实战演示

文章目录 前言技术积累核心概念主要功能适用场景与JDK动态代理的对比 实战演示定义待代理的目标类实现MethodInterceptor接口使用代理对象 测试结果写在最后 前言 在Java编程中,CGLIB (Code Generation Library) 是一个强大的高性能代码生成库,它通过生…

WebGIS 地铁交通线网 | 图扑数字孪生

数字孪生技术在地铁线网的管理和运维中的应用是一个前沿且迅速发展的领域。随着物联网、大数据、云计算以及人工智能技术的发展,地铁线网数字孪生在智能交通和智慧城市建设中的作用日益凸显。 图扑软件基于 HTML5 的 2D、3D 图形渲染引擎,结合 GIS 地图…

[RK3588-Android12] 调试MIPI-双通道-压缩屏(Video Mode/MIPI Dphy 8Lane/DSC 144HZ)

问题描述 被测屏幕:小米Pad6 分辨率:1800X2880 模式:Video Mode/MIPI Dphy 8Lane/DSC 144HZ PPS: 11 00 00 89 30 80 0B 40 03 84 00 14 01 C2 01 C2 02 00 01 F4 00 20 01 AB 00 06 00 0D 05 7A 06 1A 18 00 10 F0 03 0C 20 00 06 0B 0B 33…

【c++】STl-list使用list模拟实现

主页:醋溜马桶圈-CSDN博客 专栏:c_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 …

【智能算法】蜜獾算法(HBA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年,FA Hashim等人受到自然界中蜜獾狩猎行为启发,提出了蜜獾算法((Honey Badger Algorithm,HBA)。 2.算法原理 2.1算法思想 蜜獾以其…

pytest--python的一种测试框架--接口测试

接口测试 工具: POSTMAN; 接口选择: 豆瓣电影,进制数据 POSTMAN下载: 1.POSTMAN官网:https://www.postman.com/products/; 2.点product选Download Postman 下载完之后双击打开就可以用的。…

软件设计师27--规范化理论

软件设计师27--规范化理论 考点1:规范化理论基本概念函数依赖规范化理论--Amstrong公理体系候选键主属性与非主属性例题: 考点2:范式判断规范化理论规范化理论 - 范式例题: 考点3:范式分解保持函数依赖分解无损分解模式…

简单了解波 Mono-repo Multi-repo(Poly-repo)

Mono-repo 和 Multi-repo 是软件开发中代码管理的两个不同策略。Mono-repo & Multi-repo 孰优孰劣是个老生常谈得话题了,这里就不 PK 了,“略微”看下两者区别。 当我们使用 Git 作为版本控制系统管理项目的代码时,那么 monorepo 与 mul…