【操作系统】聊聊磁盘IO是如何工作的

2023-09-20 22:49:00

磁盘

在这里插入图片描述

机械磁盘
主要是由盘片和读写磁头组成。数据存储在盘片的的环状磁道上,读写数据前需要移动磁头,先找到对应的磁道,然后才可以访问数据。
如果数据都在同一磁道上,不需要在进行切换磁道,这就是连续IO,可以获得更好的性能。而随机IO性能就比较差。

固态磁盘
固态磁盘不需要寻找磁道,所以随机IO和连续IO性能都不错。

连续IO的性能其实比随机IO性能要好,主要连续IO可以进行预读的操作,这是其中一个性能点,另外随机IO其实还是比连续IO差。

机械磁盘的最小单位是扇区,大小是512字节
固态磁盘的最小单位是页,通常是4KB

而对于机械磁盘,因为扇区单位比较小,为了尽可能提升顺序IO,将8个扇区组成一个4KB的页。

通用块层

通用块层是处于文件系统和磁盘驱动中间的一个块设备抽象层。

  • 对上层的文件系统提供统一块访问标准接口。对下层不同的磁盘设备抽象为统一的块设备。并提供统一的框架管理这些设备的驱动程序。
  • 通用块层会给应用程序和文件系统发送的IO请求排队,通过重排序、请求合并等方式。提高磁盘读写效率。

IO调度算法

  • NONE 什么也不做,磁盘IO调度由物理机完成。
  • NOOP 是一个先入先出的队列,做一些基本的请求合并
  • CFQ 完全公平调度器 为每个进程维护一个IO调度队列,并按照时间片均匀分布每个进程IO请求
  • DeadLine调度算法,为读写请求创建不同的IO队列,提高机械磁盘的吞吐量。

上述其实优点一个是队列,另一个是按照进程粒度进行分配IO请求,另一个就是按照读写粒度进行处理。你看无论是编程类库,还是存储中间件都是相同的思想。

在这里插入图片描述

IO栈

LinuxIO栈分为 文件系统层、通用块层、设备层。

在这里插入图片描述

  • 文件系统层,包含虚拟文件系统和其他文件系统的具体实现,为上层应用程序提供标准的文件访问接口,下层通过通用块层来存储和管理磁盘数据
  • 通用块层:块设备IO队列和IO调度器,对文件系统的IO请求进行排队,在通过重新排序和请求合并。
  • 设备层:存储设备和相关驱动程序,最终负责物理设备的IO操作。

存储系统的IO是最慢的地方,所以通过使用各种缓存机制来优化访问文件的性能,减少对下层块设备的直接调用。其中包含页缓存、目录项缓存、索引节点缓存。

磁盘IO观测

# -d -x表示显示所有磁盘I/O的指标
$ iostat -d -x 1 

在这里插入图片描述
在这里插入图片描述

  • %util ,就是我们前面提到的磁盘I/O使用率;
  • r/s+ w/s ,就是 IOPS;
  • rkB/s+wkB/s ,就是吞吐量;
  • r_await+w_await ,就是响应时间。

进程IO观测

$ pidstat -d 1 

在这里插入图片描述
用户ID(UID)和进程ID(PID) 。

每秒读取的数据大小(kB_rd/s) ,单位是 KB。

每秒发出的写请求数据大小(kB_wr/s) ,单位是 KB。

每秒取消的写请求数据大小(kB_ccwr/s) ,单位是 KB。

块I/O延迟(iodelay),包括等待同步块I/O和换入块I/O结束的时间,单位是时钟周期。

小结

本篇主要介绍了磁盘IO的工作原理,主要介绍了文件系统层、通用块层、设备层。而在操作系统内部其实也使用了各种的缓存来提升系统的IO读写效率。最后简要介绍来下常用的IO排查命令 iotop、pidstat -d 1 、iostat -d -x 1

更多推荐

无人车开源软件架构

参考视频:Apollo自动驾驶入门课程开源软件架构开放式软件层分为三个子层:实时操作系统、运行时框架和应用程序模块层实时操作系统(RTOS)可确保在给定时间内完成特定任务,“实时”是指无人车的操作系统能够及时进行计算,分析并执行相应的操作。以上是在汽车传感器收集到外界数据后的短时间内完成。假设无人车的传感器检测到车辆前

requests模块高级用法练习

文章目录模拟浏览器指纹发送get请求发送post请求文件上传服务器超时模拟浏览器指纹打开http://10.9.75.164/php/functions/setcookie.php网页,找到请求头的UA字段,这段信息是浏览器的指纹(包括当前系统、浏览器名称和版本):在Python脚本中新建一个headers字段,将该U

【ES6】

ES61ES6简介1.1什么是ES61.2为什么使用ES62ES6的新增语法2.1let2.2const2.3let、const、var的区别2.4解构赋值2.4.1数组解构2.4.2对象解构2.5箭头函数2.6剩余参数3ES6的内置对象扩展3.1Array的扩展方法3.1.1扩展运算符(展开语法)3.1.2构造函数方

华为云云耀云服务器L实例评测|基于华为云云耀云服务器L实例搭建EMQX大规模分布式 MQTT 消息服务器场景体验

文章目录前言一、😄华为云云耀服务器二、😄产品实例创建相关1、🧨开通华为云云耀服务器2、🧨创建华为云云耀服务器实例3、🧨终端登录4、🧨华为云云耀云服务器密码重置三、😄安装开源产品EMQX四、😄开放安全组五、😄访问EMQXDashboard六、😄消息传输建立测试1、🧨客户端连接消息服务器2、🧨客户端

Python数据容器——列表、元组、字符串、集合、字典

作者:Insist--个人主页:insist--个人主页本文专栏:Python专栏专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。目录一、了解数据容器1.为什么需要数据容器?2.数据容器是什么?二、数据容器—列表(list)1.列表的定义2.列表的特点3.例题三、数据容器—元组(tup

【计算机网络】网络层和数据链路层

文章目录IP协议网段划分分类划分法CIDR方案路由NAT网络地址转换技术IP报文的另外三个参数mac帧ARP协议交换机ICMP代理服务器IP协议TCP有将数据可靠、高效发给对方的策略,而IP具有发送的能力,即将数据从A主机送到B主机的能力。用户要的是100%的概率送到!IP地址=目标网络+目标主机IP协议报头4位首部长

Python灰帽编程——网页信息爬取

文章目录网页信息爬取1.相关模块1.1requests模块1.1.1模块中的请求方法1.1.2请求方法中的参数1.1.3响应对象中属性1.2RE模块1.2.1匹配单个字符1.2.2匹配一组字符1.2.3其他元字符1.2.4核心函数2.网页信息爬取2.1获取网页HTML源代码2.2提取图片地址2.3下载图片2.4完整脚本

【卖出备兑看涨期权策略(Covered_call)】

卖出备兑看涨期权策略(Covered_call)卖出备兑看涨期权策略是一种最基本的收入策略,该策略主要操作就是在持有标的资产的同时卖出对应的看涨期权合约,以此来作为从持有的标的资产中获取租金的一种方法。如果标的资产的价格上涨到行权价之上,那么卖出的看涨期权将被行权,那么投资者可以卖出手中持有的标的资产,投资者获得最初的

数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘、图算法,搜索算法等

【机器学习入门与实践】入门必看系列,含数据挖掘项目实战:模型融合、特征优化、特征降维、探索性分析等,实战带你掌握机器学习数据挖掘专栏详细介绍:【机器学习入门与实践】合集入门必看系列,含数据挖掘项目实战:数据融合、特征优化、特征降维、探索性分析等,实战带你掌握机器学习数据挖掘。本专栏主要方便入门同学快速掌握相关知识。声明

React 全栈体系(十一)

第五章React路由五、向路由组件传递参数数据1.效果2.代码-传递params参数2.1Message/*src/pages/Home/Message/index.jsx*/importReact,{Component}from"react";import{Link,Route}from'react-router-d

向量数据库,能让AI再次起飞吗?

9月7-8日,深圳国际会展中心18号馆来了,来了,腾讯面向产业互联网领域规格最高、规模最大、覆盖最广的年度科技盛会-——-腾讯全球数字生态大会。9月7日,我们将聚焦产业未来发展新趋势,针对云计算、大数据、人工智能、安全、SaaS等核心数字化工具做关键进展发布,并联合生态伙伴推出最新行业场景解决方案。同时,携手全球权威商

热文推荐