24丨基础篇:Linux磁盘I-O是怎么工作的(上)
- 目录项,记录了文件的名字,以及文件与其他目录项之间的目录关系。
- 索引节点,记录了文件的元数据。
- 逻辑块,是由连续磁盘扇区构成的最小读写单元,用来存储文件数据。
- 超级块,用来记录文件系统整体的状态,如索引节点和逻辑块的使用情况等。
磁盘
根据存储介质
机械磁盘
固态磁盘
- 对机械磁盘来说,我们刚刚提到过的,由于随机 I/O 需要更多的磁头寻道和盘片旋转,它的性能自然要比连续 I/O 慢。
- 而对固态磁盘来说,虽然它的随机性能比机械硬盘好很多,但同样存在“先擦除再写入”的限制。随机读写会导致大量的垃圾回收,所以相对应的,随机 I/O 的性能比起连续 I/O 来,也还是差了很多。
- 此外,连续 I/O 还可以通过预读的方式,来减少 I/O 请求的次数,这也是其性能优异的一个原因。很多性能优化的方案,也都会从这个角度出发,来优化 I/O 性能。
- 机械磁盘的最小读写单位是扇区,一般大小为 512 字节。
- 而固态磁盘的最小读写单位是页,通常大小是 4KB、8KB 等。
按照接口来分类
- RAID0 有最优的读写性能,但不提供数据冗余的功能。
- 而其他级别的 RAID,在提供数据冗余的基础上,对读写性能也有一定程度的优化。
通用块层
- 第一个功能跟虚拟文件系统的功能类似。向上,为文件系统和应用程序,提供访问块设备的标准接口;向下,把各种异构的磁盘设备抽象为统一的块设备,并提供统一框架来管理这些设备的驱动程序。
- 第二个功能,通用块层还会给文件系统和应用程序发来的 I/O 请求排队,并通过重新排序、请求合并等方式,提高磁盘读写的效率。
四种 I/O 调度算法
- 第一种 NONE ,更确切来说,并不能算 I/O 调度算法。因为它完全不使用任何 I/O 调度器,对文件系统和应用程序的 I/O 其实不做任何处理,常用在虚拟机中(此时磁盘 I/O 调度完全由物理机负责)。
- 第二种 NOOP ,是最简单的一种 I/O 调度算法。它实际上是一个先入先出的队列,只做一些最基本的请求合并,常用于 SSD 磁盘。
- 第三种 CFQ(Completely Fair Scheduler),也被称为完全公平调度器,是现在很多发行版的默认 I/O 调度器,它为每个进程维护了一个 I/O 调度队列,并按照时间片来均匀分布每个进程的 I/O 请求。类似于进程 CPU 调度,CFQ 还支持进程 I/O 的优先级调度,所以它适用于运行大量进程的系统,像是桌面环境、多媒体应用等。
- 最后一种 DeadLine 调度算法,分别为读、写请求创建了不同的 I/O 队列,可以提高机械磁盘的吞吐量,并确保达到最终期限(deadline)的请求被优先处理。DeadLine 调度算法,多用在 I/O 压力比较重的场景,比如数据库等。
I/O 栈
- 文件系统层,包括虚拟文件系统和其他各种文件系统的具体实现。它为上层的应用程序,提供标准的文件访问接口;对下会通过通用块层,来存储和管理磁盘数据。
- 通用块层,包括块设备 I/O 队列和 I/O 调度器。它会对文件系统的 I/O 请求进行排队,再通过重新排序和请求合并,然后才要发送给下一级的设备层。
- 设备层,包括存储设备和相应的驱动程序,负责最终物理设备的 I/O 操作。
小结
24丨基础篇:Linux磁盘I-O是怎么工作的(上)相关推荐
- Linux基础篇——Linux磁盘操作(磁盘基础知识、分类、分区、挂载、卸载、扩容)详解
目 录 1. 概 念 2. 为啥要分区 3. 磁盘的结构 4. 磁盘的分类 4.1 IDE硬盘 4.2 SCSI硬盘 4.3 SATA硬盘 4.4 固态硬盘 5. 磁盘分区命名规则 6. 磁盘分区类型 ...
- RHEL 5基础篇—linux的简介
RHEL 5基础篇-linux的简介 Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核.Linux可安装在各种计算机硬件设备中,比如手机 ...
- 编程模拟飞船加速变轨过程-物理基础篇(3)Kepler轨道及其描述(上)
编程模拟飞船加速变轨过程物理基础篇(3) Kepler轨道及其描述(上) 开普勒轨道及其描述是用若干要素表示出飞船在地球中心引力场中绕地球飞行具体形状的一种方法,我们希望在已知这些要素的前提下精确的描 ...
- linux分区par,linux基础篇(磁盘分区)
linux磁盘分区到文件系统创建 首先了解磁盘的基本构造 需要用到的分区命令: fdisk:对于一块硬盘来讲,最多只能管理15分区 语法:fdisk [OPTION][DEVICE] p: prin ...
- 25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)
上一节我们学习了 Linux 磁盘 I/O 的工作原理,并了解了由文件系统层.通用块层和设备层构成的 Linux 存储系统 I/O 栈. 其中,通用块层是 Linux 磁盘 I/O 的核心.向上,它为 ...
- linux mysql io压力大_MySQL 调优基础(四) Linux 磁盘IO_MySQL
1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...
- 【linux】循序渐进学运维-基础篇-Linux系统启动原理
大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-基础篇的第59篇文章 文章目录 前言 centos 6的启动过程 1. 加载BIOS硬件信息 a) 通电自检 b) MBR引导 2. grub ...
- 【linux】循序渐进学运维-基础篇-linux运维级别
本文是循序渐进学运维-基础篇系列的第43篇文章 文章目录 Linux的运行级别 运行级别的启动原理 1. 在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service) ...
- linux 获得磁盘 寻道时间,Linux入门篇 —— Linux 磁盘管理之磁盘理论篇 | 七日打卡...
Linux 磁盘管理之磁盘理论篇 磁盘简介作用: 用来存放数据(二进制方式来管理数据) 分类机械硬盘 固态硬盘 机械硬盘组成盘片: 上面布满磁性颗粒,保存写入数据 主轴: 带动盘片转动,转到磁头的下方 ...
最新文章
- phpcms_v9修改文章会提示 [hash]数据验证失败
- 云服务收入年增长28%
- python【接上篇】
- 备忘-常用工具/网页
- 拉格朗日乘子法 KKT条件
- Android BroadcastReceiver,广播与进程通讯,APK安装广播,获取已安装列表
- django和mysql如何建模_Django中的多个数据库和多个模型
- 【学习OpenCV4】图像像素数据类型的转换与归一
- C# 版本设计模式(Design Pattern)(转)
- linux shell脚本判断文件或文件夹是否存在循环操作
- react 遍历渲染
- 关于代码整理重构小记
- 实战项目 — 爬取 校花网图片
- 小程序入口构造工具二维码测试工具
- 计算矩阵行列式时奇排列与偶排列的判定
- 微博【黄金分析师吕超】--1.19黄金分析
- 生成MT/MTd模式的tet.lib
- 全面 一文理解微服务高可用的常用手段
- Linux服务器在线测速
- html隐藏浏览器输入网址,ie地址栏 IE浏览器地址栏无法输入网址
热门文章
- 两个条件一个为false就运行_Python入门基础实例讲解——两个数字比大小,并输出最大值...
- 直播发送信息 说服务器开小差,【直播课答疑】上课开小差、注意力不集中、成绩差,有办法对付!(31讲)...
- python中怎么计数_浅谈python中统计计数的几种方法和Counter详解
- 主存地址位数怎么算_两位数乘一位数也能口算?对!你没看错,不是特殊情况也行...
- ubuntu 安装docker报错
- mysql5.7安装配置
- 八、朴素贝叶斯中文分类实战
- Python的3种字符串格式化,做个超全对比!
- 双十一!教你用Python感知女朋友的情绪变化?
- 最搞笑的代码注释,你遇到过几个?