解密Linux中的通用块层:加速存储系统,提升系统性能
通用块层
通用块层是Linux中的一个重要组件,用于管理不同块设备的统一接口,减少不同块设备的差异带来的影响。它位于文件系统和磁盘驱动之间,类似于Java中的适配器模式,让我们无需关注底层实现,只需提供固定接口即可。
通用块层的设计目的是为了提高磁盘读写的效率和可靠性。它通过对I/O请求进行排队和调度,以最大化磁盘的吞吐量和响应时间。通用块层可以管理多个块设备,并将它们抽象为一个统一的接口,使得文件系统和应用程序可以无差别地访问这些设备。
在Linux内核中,有五种主要的I/O调度算法可供选择,它们分别是没有调度算法、先入先出调度算法、完全公平调度算法、优先级调度算法和最终期限调度算法。这些算法适用于不同的场景和需求。
- 第一种,没有调度算法,就是没有任何特殊的处理,直接将文件系统和应用程序的I/O请求发送给块设备。这种算法常用在虚拟机中,因为磁盘I/O调度交由物理机系统负责。
- 第二种,先入先出调度算法,就是按照I/O请求的到达顺序进行调度,先进入I/O调度队列的请求会先被处理。
- 第三种,完全公平调度算法,是大部分系统默认使用的调度算法。它为每个进程维护一个I/O调度队列,并根据时间片来均匀分配每个进程的I/O请求。
- 第四种,优先级调度算法,根据请求的优先级进行调度,优先级高的请求先被处理。这种算法适用于运行大量进程的系统,比如桌面环境或多媒体应用。
- 第五种,最终期限调度算法,为读写请求创建了不同的I/O队列,以提高机械磁盘的吞吐量,并确保达到最终期限的请求优先处理。这种算法适用于I/O压力较大的场景,比如数据库等。
另外多说一句优先级调度算法,它适合桌面环境或多媒体应用的原因主要有以下几点:
- 响应性:桌面环境或多媒体应用通常需要实时的响应,对于用户的操作或多媒体数据的播放,延迟较小的I/O响应是非常重要的。通过使用优先级调度算法,可以确保高优先级的I/O请求被优先处理,从而提高系统的响应性能。
- 性能优化:桌面环境或多媒体应用通常需要处理大量的数据,如图像、音频或视频等。通过使用优先级调度算法,可以将这些需要优先处理的数据请求置于较高的优先级,确保它们能够及时得到处理,从而提高整体的性能和流畅度。
- 平衡资源:桌面环境或多媒体应用通常需要同时运行多个任务或进程,这些任务可能会涉及到不同的资源需求。通过使用优先级调度算法,可以在资源有限的情况下,合理地分配和管理这些任务的I/O请求,避免某些任务长时间等待,从而实现资源的平衡利用。
存储系统I/O软件分层
在前面的讨论中,我们提到了存储系统的各个组成部分,包括设备、设备控制器、驱动程序和通用块层。现在结合文件系统原理,我们来详细了解一下 Linux 存储系统的 I/O 软件分层。
Linux 存储系统的 I/O 软件分层可以分为三个层次,分别是文件系统层、通用块层和设备层。它们之间的关系如下图所示:
这三个层次的作用是相互协作,实现对存储系统的高效管理和操作。
文件系统层是用户与存储系统交互的接口,通过虚拟文件系统和具体的文件系统实现,为应用程序提供了标准的文件访问接口。它负责将用户的文件操作请求转化为对底层存储设备的读写操作,并管理文件的元数据和目录结构。
通用块层在文件系统层之下,负责对文件系统的I/O请求进行排队和调度,以提高磁盘的读写效率。它包括块设备的I/O队列和I/O调度器,通过合理的调度算法,选择最优的顺序和时间进行I/O操作。
设备层是位于存储系统的最底层,包括硬件设备、设备控制器和驱动程序。它负责实际执行物理设备的I/O操作,将数据读取到内存或将数据写入到磁盘。
为了提高I/O的效率,Linux提供了多种缓存机制。页缓存、索引节点缓存和目录项缓存等缓存机制用于减少对块设备的直接访问,提高对文件数据的读取和写入效率。此外,还有缓冲区用于缓存块设备的数据,以减少对磁盘的频繁访问。
为了满足特定设备的功能和属性的检查和配置需求,Linux提供了ioctl接口,它是一种通用的输入输出控制接口,用于对特定设备进行属性和功能的控制和修改。
总的来说,前面讨论了这么多知识点,你会发现从介绍操作系统开始到现在,所有操作都有一个中间层做‘适配’,其实目的很简单,中间层既相当于我们的拦截器一样,对上层的操作请求进行优化,又可以像适配器一样屏蔽掉底层设备的各个差异方便操作而已。
总结
通用块层是Linux中的重要组件,位于文件系统和磁盘驱动之间,提供统一接口,优化磁盘读写效率和可靠性。它管理多个块设备,抽象为统一接口,使得文件系统和应用程序可以无差别访问。通用块层通过排队和调度I/O请求,最大化磁盘吞吐量和响应时间。Linux内核提供多种I/O调度算法适用于不同需求。当你学完这些知识点是否你自己可以大致想出敲完字母‘A’后,是如何显示到屏幕上的吗?
我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。
💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。
🌟 欢迎关注努力的小雨!🌟
相关文章:

解密Linux中的通用块层:加速存储系统,提升系统性能
通用块层 通用块层是Linux中的一个重要组件,用于管理不同块设备的统一接口,减少不同块设备的差异带来的影响。它位于文件系统和磁盘驱动之间,类似于Java中的适配器模式,让我们无需关注底层实现,只需提供固定接口即可。…...

浅析国有商业银行人力资源数字化平台建设
近年来,在复杂的国际经济金融环境下,中国金融市场整体运行保持稳定。然而,随着国内金融机构改革的不断深化,国有商业银行全面完成股改上市,金融市场规模逐步扩大,体系日益完善,同时行业的竞争也…...

微信h5跳转消息页关注公众号,关注按钮闪一下消失
一、需求背景 在微信里访问h5页面,在页面里跳转到微信公众号消息页关注公众号。如下图: 二、实现跳转消息页关注公众号 跳转链接是通过 https://mp.weixin.qq.com/mp/profile_ext?actionhome&__bizxxxxx&scene110#wechat_redirect 来实现。…...
掌握PyTorch的加权随机采样:WeightedRandomSampler全解析
标题:掌握PyTorch的加权随机采样:WeightedRandomSampler全解析 在机器学习领域,数据不平衡是常见问题,特别是在分类任务中。PyTorch提供了一个强大的工具torch.utils.data.WeightedRandomSampler,专门用于处理这种情况…...
网络丢包深度解析:影响、原因及优化策略
摘要 网络丢包是数据在传输过程中未能成功到达目的地的现象,它对网络通信的性能有着显著的影响。本文将深入探讨网络丢包的定义、原因、对性能的影响,以及如何通过技术手段进行检测和优化。 1. 网络丢包的定义 网络丢包发生在数据包在源和目的地之间的…...

Hadoop入门基础(一):深入探索Hadoop内部处理流程与核心三剑客
在大数据的世界里,处理海量数据的需求越来越多,而Hadoop作为开源的分布式计算框架,成为了这一领域的核心技术之一。 一、Hadoop简介 Hadoop是Apache Software Foundation开发的一个开源分布式计算框架,旨在使用简单的编程模型来…...
【扒代码】dave.py
COTR 模型是一个用于少样本或零样本对象检测和计数的神经网络。它结合了特征提取、Transformer 编码器和解码器、密度图预测和边界框预测等多个组件。该模型特别适用于在只有少量标注数据或完全没有标注数据的情况下进行对象检测和计数任务。通过使用 Transformer 架构…...

一个人真正的成熟,体现在这六个字上
你好,我是腾阳。 在这个快节奏、高压力的社会中,我们每个人都在追求成长与进步,渴望成为一个更优秀的自己。 然而,成长的道路从不是一帆风顺,我们时常会面临自我怀疑、挫折感、外界的质疑和内心的挣扎。 但正是这些…...

【已成功EI检索】第五届新材料与清洁能源国际学术会议(ICAMCE 2024)
重要信息 会议官网:2024.icceam.com 接受/拒稿通知:投稿后1周内 收录检索:EI, Scopus 会议召开视频 见刊封面 EI检索页面 Scopus 检索页面 相关会议 第六届新材料与清洁能源国际学术会议(ICAMCE 2025) 大会官网&…...
介绍Python `AsyncIterable` 的使用方法和使用场景
介绍Python AsyncIterable 的使用方法和使用场景 一、什么是 AsyncIterable?二、如何使用 AsyncIterable三、使用场景四、总结 在Python异步编程中,AsyncIterable 是一个非常重要的概念,它代表了一个异步可迭代对象。异步可迭代对象允许我们在…...
抖音直播间通过星图风车跳转到微信小程序
注册并认证巨量星图账号:首先,你需要通过主体公司的资质注册巨量星图账号,并通过审核,以取得申请小风车链接跳转微信组件的资格。 使用链接生成工具:借助链接生成工具,如“省点外链”,生成一条…...

idea 修改背景图片教程
🌏个人博客主页:意疏-CSDN博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明修改背景图片 开篇说明 给小白看得懂的修改图片教程&…...

PWN练习---Stack_2
目录 srop源码分析exp putsorsys源码分析exp ret2csu_1源码分析exp traveler源码分析exp srop 题源:[NewStarCTF 2023 公开赛道]srop 考点:SROP 栈迁移 源码 首先从bss段利用 syscall 调用 write 读出数据信息,然后调用 syscall-read向栈中…...
springCloudAlibaba整合log4j2
文章目录 简介log4j2概述log4j2在springCloudAlibaba中的使用排除依赖引入log4j2依赖添加log4j配置文件修改项目配置文件中添加配置 对spring-cloud-alibaba相关组件比较感兴趣的小伙伴,可以看下spring-cloud-alibaba 练习项目 简介 日志主要是记录系统发生的动作&…...
你是如何克服编程学习中的挫折感的
一:心态调整 分解任务:将大的编程任务分解成小的可管理的部分,逐步完成每个部分,逐渐提升自信心。 接受挑战:挑战自己解决一些难题,这样可以提高技能并增强成就感。 寻找资源:利用网络资源、教…...
C++观察者模式:订阅博主~
目录 观察者模式步骤例子:订阅博主UML图1:定义观察者接口2:定义被观察者接口3:创建具体观察者类4:创建具体被观察者类5:使用执行结果 观察者模式 观察者模式允许我们定义一种订阅机制,可在对象…...

1-安装Elasticsearch
支持一览表 | Elastic 未完待续...

EmguCV学习笔记 VB.Net 4.2 二值化
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSD…...
Spark大数据分析案例
目录 案例概述环境搭建1. Spark单机环境2. Spark集群环境 数据集数据预处理 Spark作业编写提交Spark作业 数据可视化可能遇到的问题及解决方法结论 案例概述 本案例将介绍如何在单机和集群环境下使用Apache Spark进行大数据分析,最终使用Python实现数据的可视化。我…...

【数据结构】关于Java对象比较,以及优先级队列的大小堆创建你了解多少???
前言: 🌟🌟Hello家人们,这期讲解对象的比较,以及优先级队列堆,希望你能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/MSex7 🌈感兴趣的小伙伴看一看小编主页&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...