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

Combining Buffered I/O and Direct I/O in Distributed File Systems——论文泛读

FAST 2024 Paper 元数据论文整理

问题

直接I/O允许I/O请求绕过Linux页面缓存,作为默认缓冲I/O模式的替代方案。然而,高性能计算(HPC)应用程序仍然主要依赖于缓冲I/O,即使直接I/O在给定情况下可以执行得更好。这是因为用户倾向于使用他们最熟悉的I/O模式。但对于复杂的分布式文件系统和应用程序,通常不清楚使用哪种I/O模式。

缓冲I/O的性能不始终优于直接I/O:

  • 缓冲I/O会引发额外的复制操作,以便在内核缓存和应用程序之间移动数据

  • 与内核页面缓存和页面管理交互的开销相当大

  • 当内存变得稀缺时,页面回收必须释放旧页面,以便为当前I/O操作分配内存,由此产生的缓存抖动可能会显著降低性能

  • 缓冲I/O在并行文件系统中另一个成本是管理复杂的分布式范围锁,以支持强一致性的客户端缓存。如果只锁定并发访问文件的必要(小)部分,则需要在客户端和锁管理器之间进行多次远程过程调用(RPC),而使用较大的扩展锁,可能会导致客户端之间的错误锁争用和许多锁吊销消息[39]。

本文方法

在本文中,展示了在哪些条件下两种I/O模式都是有益的,并提出了一种新的透明方法,可以动态切换到文件系统中的每种I/O模式。它的决策基于:I/O大小、文件锁争用、内存压力。其他优化还有:自适应服务器端回写缓存、将未对齐I/O对齐、延迟分配、I/O请求批处理。

在Lustre客户端和服务器中示例性地实现了我们的设计,并用其他功能对其进行了扩展,例如延迟分配。在各种条件和实际工作负载下,本文方法实现了比原始Lustre高出3倍的吞吐量,并比包括不同程度的直接I/O支持的其他分布式文件系统高出13倍。

实验

实验环境:4个MDT、8个OST、32个客户端节点组成的Lustre集群。服务器使用DDN AI400X2设备后端(20×SAMSUNG 3.84 TiB NVMe,4×IB-HDR100 100 100 Gbps),运行Lustre 2.15.58。所有客户端都使用Intel Gold 5218处理器、96 GiB DDR4内存,运行CentOS 8.7 Linux。所有节点均使用InfiniBand IB-HDR100互连。

数据集:微基准测试、mdtest、HPC工作负载 mpiFileUtils/dcp [50]、VPIC-IO[12]、Nek5000应用程序[20]

实验对比:吞吐量、I/O带宽

实验参数:I/O大小、并发I/O、文件大小

总结

针对文件系统中直接I/O和缓存I/O的选择,作者分析二者在不同条件下各有优劣,于是提出根据系统状态自适应选择I/O方式。根据对I/O大小、文件锁争用、内存压力的分析,明确了各种环境下哪种I/O方式性能更高,对应切换到性能更高的I/O方式。将自适应I/O方法应用于Lustre中,同时提出优化:自适应服务器端回写缓存、将未对齐I/O对齐、延迟分配、I/O请求批处理。

相关文章:

  • 环境配置、如何安装OpenHarmony HAR
  • 一次电脑感染Synaptics Pointing Device Driver病毒的经历,分享下经验
  • Java 面试题
  • 前端 WebSocket 的一些使用
  • 【Spring底层原理高级进阶】Spring Kafka:实时数据流处理,让业务风起云涌!️
  • 实战解析:打造风控特征变量平台,赋能数据驱动决策
  • Python - getpass
  • 线上问题——学习记录幂等判断失效问题分析
  • Git快速入门
  • 回溯算法01-组合(Java)
  • 数据库分库分表中间件选择
  • 【扩散模型系列1】扩散模型背景|DDPMs|LDM
  • 【理解机器学习算法】之Nearest Shrunken Centroid(纯Python)
  • Redis面试题
  • C++模拟揭秘刘谦魔术,领略数学的魅力
  • Google 是如何开发 Web 框架的
  • 【EOS】Cleos基础
  • 4个实用的微服务测试策略
  • Angular数据绑定机制
  • css属性的继承、初识值、计算值、当前值、应用值
  • node-glob通配符
  • node和express搭建代理服务器(源码)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • php的插入排序,通过双层for循环
  • Rancher-k8s加速安装文档
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Travix是如何部署应用程序到Kubernetes上的
  • Vim Clutch | 面向脚踏板编程……
  • 基于HAProxy的高性能缓存服务器nuster
  • 记一次和乔布斯合作最难忘的经历
  • 技术:超级实用的电脑小技巧
  • 坑!为什么View.startAnimation不起作用?
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何利用MongoDB打造TOP榜小程序
  • 入门级的git使用指北
  • 找一份好的前端工作,起点很重要
  • 交换综合实验一
  • "无招胜有招"nbsp;史上最全的互…
  • # C++之functional库用法整理
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (4) PIVOT 和 UPIVOT 的使用
  • (70min)字节暑假实习二面(已挂)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (六)Hibernate的二级缓存
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (轉)JSON.stringify 语法实例讲解
  • . Flume面试题
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core 通过 Ef Core 操作 Mysql