块设备层保序操作分析

Q:块设备层保序功能的作用?
A:通用块层可以提交一个带保序标签(BIO_RW_BARRIER)的BIO到IO请求队列,块设备层可以保证在保序BIO之前提交的BIO都先于BIO执行且抵达存储介质;保序BIO执行完毕后,它需要写入的数据必定已经抵达存储介质;在保序IO之后提交的BIO都晚于保序BIO执行,确保BIO不饥饿.

Q:块设备层保序功能的应用?
A:保序功能最典型的应用场景是文件系统的日志,日志文件系统做文件操作时的日志操作可以简化为:1.开始事务->2.将修改的元数据写入到日志空间->3.向日志空间写入事务提交块->4.事务结束,这个过程中,IO调度器可能重排2,3步的BIO,导致第3步先于第2步执行完毕,掉电后一个不完整的事务被恢复,文件系统数据被破坏.

Q:块设备保序功能的实现?
A:BIO从提交到抵达存储介质需要经过的IO路径有:IO调度器缓存队列->IO分发队列->驱动缓存队列->磁盘缓存->磁盘介质,保序的真正实现需要借助磁盘提供支持,2.6.27的保序实现会根据磁盘提供的功能做不同的操作.其原理是在收到保序请求后,清空IO调度器中缓存的request,同时在保序请求前后插入刷硬盘缓存指令的request,确保保序请求执行完毕后它和它以前请求写入的数据都已抵达存储介质,具体步骤如下:
1.当块设备层收到保序BIO时,独立创建一个带REQ_HARDBARRIER标志的request,调用add_request()向request_queue添加request,插入的位置是ELEVATOR_INSERT_BACK.

2.elv_insert()收到ELEVATOR_INSERT_BACK位置的请求后,将IO调度器中缓冲的request都转移到分发队列,同时将保序request插入到分发队列的最后.

3.底层驱动提供的q->request_fn()函数被调用,elv_next_request()->blk_do_ordered()处理到保序request时,如果q->ordseq=0且硬盘支持冲刷缓存指令,调用start_ordered()开始保序流程.

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

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

相关文章

07.爬虫---使用session发送请求

07.使用session发送请求 1.目标网站2.代码实现 1.目标网站 我们以这个网站作为目标网站 http://www.360doc.com/ 注册用户 注册后从登录界面获取到这些信息 2.代码实现 import requestssession requests.Session() url http://www.360doc.com/ajax/login/login.ashx u…

深入剖析Java线程池的核心概念与源码解析:从Executors、Executor、execute逐一揭秘

文章目录 文章导图前言Executors、Executor、execute对比剖析Executors生成的线程池?线程池中的 execute 方法execute 方法的作用execute的工作原理拒绝策略 源码分析工作原理基本知识线程的状态线程池的状态线程池状态和线程状态总结线程池的状态信息和线程数量信息…

RedisSearch与Elasticsearch:技术对比与选择指南

码到三十五 : 个人主页 数据时代,全文搜索已经成为许多应用程序中不可或缺的一部分。RedisSearch和Elasticsearch是两个流行的搜索解决方案,它们各自具有独特的特点和优势。本文简单探讨一些RedisSearch和Elasticsearch之间的技术差异。 目录…

9款实用而不为人知的小众软件推荐!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 在电脑软件的浩瀚海洋中,除了那些广为人知的流行软件外,还有许多简单、干净、功能强大且注重实用功能的小众软件等待我们…

[NISACTF 2022]sign_crypto(LATEX)

题目: 我们看出这是LATEX编码,破解之后: 看出每个“\”之后的第一个字母连起来即使:nss....,在大写即可得到flag。

linux各个日志的含义 以及使用方法

在Linux系统上,系统日志文件通常存储在/var/log/目录下。可以通过查看这些日志文件来了解系统的操作记录、错误信息和其他相关信息。以下是一些常见的系统日志文件以及它们包含的信息: /var/log/messages:这是一个常见的系统日志文件&#xf…

Sui Nami Bags对NFT使用案例进行创新

在四月的Sui Basecamp活动中,与会者体验了一系列Sui技术,这些技术以Nami Bags的形式呈现,这些数字礼包里满是来自Sui生态的NFT和优惠券。通过Enoki(Mysten Labs的新客户参与平台)提供支持,即使没有加密钱包…

OpenCV学习 基础图像操作(十七):泛洪与分水岭算法

原理 泛洪填充算法和分水岭算法是图像处理中的两种重要算法,主要用于区域分割,但它们的原理和应用场景有所不同,但是他们的基础思想都是基于区域迭代实现的区域之间的划分。 泛洪算法 泛洪填充算法(Flood Fill)是一…

修改element-ui el-radio颜色

修改element-ui el-radio颜色 需求效果图代码实现 小结 需求 撤销扣分是绿色&#xff0c;驳回是红色 效果图 代码实现 dom <el-table-columnlabel"操作"width"200px"><template v-slot"scope"><el-radio-group v-model"s…

Vue插槽与作用域插槽

title: Vue插槽与作用域插槽 date: 2024/6/1 下午9:07:52 updated: 2024/6/1 下午9:07:52 categories: 前端开发 tags:VueSlotScopeSlot组件通信Vue2/3插槽作用域API动态插槽插槽优化 第1章&#xff1a;插槽的概念与原理 插槽的定义 在Vue.js中&#xff0c;插槽&#xff08;…

如何用FPGA实现SINC滤波

目录 简介: 技术说明: 代码如下: 简介: sinc(音同“sink”)滤波器是由sinc函数构造的滤波器。sinc函数的定义可以参考抽样信号Sa的定义,这里只需知道矩形脉冲和sinc函数是一个变换对。当矩形脉冲的频谱没有混叠时,它就是sin(x)/x,一个sinc函数,对于连续信号,矩形脉…

【记录43】el-table @selection-change 数据回显、条件约束、历史回显清除

场景 在其他地方设置好人员&#xff0c;到对应的页面直接在表格中复选设置好的人员。解决方案用到selection-change方法 <el-button click"EchoClick()">回显设置好的人</el-button> <el-table ref"choeck" :data"TableData" s…

c++(七)

c&#xff08;七&#xff09; 内联函数内联函数的特点为什么要有内联函数内联函数是如何工作的呢 类型转换异常处理智能指针单例模式懒汉模式饿汉模式 VS中数据库的相关配置 内联函数 修饰类的成员函数&#xff0c;关键字&#xff1a;inline inline 返回值类型 函数名(参数列…

vue-el-steps 使用2[代码示例]

效果图 代码 element代码 <template> <div class"app-container"> <el-form :model"queryForm" size"small" :inline"true"> <el-form-item label"内容状态"> <el-button-group> <el-bu…

Docker 容器中运行Certbot获取和管理 SSL 证书

如果你在 Docker 容器中运行 Nginx 并希望使用 Certbot 获取和管理 SSL 证书&#xff0c;可以使用 Certbot 的官方 Docker 镜像来完成这项工作。以下是使用 Docker 和 Certbot 获取 SSL 证书并配置 Nginx 的详细步骤&#xff1a; 1. 拉取 Certbot Docker 镜像 首先&#xff0…

window下C语言程序报错

Thread 1 received signal SIGSEGV, Segmentation fault. ___chkstk_ms () at ../../../../../src/gcc-8.1.0/libgcc/config/i386/cygwin.S:126 126 ../../../../../src/gcc-8.1.0/libgcc/config/i386/cygwin.S: No such file or directory. 参考&#xff1a;不同平台下对…

代码随想录训练营Day 46|力扣完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ

1.完全背包 视频讲解&#xff1a;带你学透完全背包问题&#xff01; 和 01背包有什么差别&#xff1f;遍历顺序上有什么讲究&#xff1f;_哔哩哔哩_bilibili https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80%E5%AE%8C%E…

as keyof GlobalStore

解释 as keyof GlobalStore 在 TypeScript 中&#xff0c;as keyof GlobalStore 是一种类型断言语法。它告诉 TypeScript&#xff0c;返回的值是一个特定类型的值&#xff0c;这里是 GlobalStore 类型的键。这在编译时有助于确保类型安全。 关键点&#xff1a; 类型断言&…

【三国战纪game】

编写一个完整的《三国战纪》游戏是一个庞大的项目&#xff0c;需要一个专业的游戏开发团队和大量的时间。但是&#xff0c;我可以给你一个简化的概念&#xff0c;帮助你开始这个过程。 游戏概念&#xff1a;三国战纪 《三国战纪》是一个以中国三国时期为背景的策略游戏&#…

构建智慧银行保险系统的先进技术架构

随着科技的不断发展&#xff0c;智慧银行保险系统正日益受到关注。在这个数字化时代&#xff0c;构建一个先进的技术架构对于智慧银行保险系统至关重要。本文将探讨如何构建智慧银行保险系统的先进技术架构&#xff0c;以提升服务效率、降低风险并满足客户需求。 ### 1. 智慧银…