显示标签为“磁盘”的博文。显示所有博文
显示标签为“磁盘”的博文。显示所有博文

2018年5月13日星期日

Linux IO调度器


1.Linux IO体系

IO调度器系统(I/O Scheduler)是Linux I/O体系中的一个组件,其所处的体系位置如下图所示:

Linux整体I/O体系可以分为七层,它们分别是

  1. VFS虚拟文件系统:抽象出文件系统接口,其下可以对接ext4,xfs等多种具体的文件系统而上层使用者只需要使用VFS提供的统一接口即可。
  2. 文件系统缓存Page Cache/磁盘缓冲Buffer Cache:通过空闲内存将对文件读写的数据放入内存,以获取更快的IO响应。
  3. 映射层:内核通过映射层来确定数据在物理块设备上的位置。
  4. 通用块层:由于绝大多数情况的I/O操作是跟块设备打交道,所以Linux在此提供了一个类似vfs层的块设备操作抽象层。下层对接各种不同属性的块设备,对上提供统一的Block IO请求标准。
  5. I/O调度层:大多数的块设备都是磁盘设备,所以有必要根据这类设备的特点以及应用特点来设置一些不同的调度器。
  6. 块设备驱动:块设备驱动对外提供高级的设备操作接口。
  7. 物理硬盘:这层就是具体的物理设备。

以一次读操作为例:

  1. 系统调用read()触发VFS函数,参数为文件描述符与偏移量
  2. VFS确定请求的数据是否已经在内存缓冲区中;若数据不在内存中,确定如何执行读 操作。 
  3. 假设内核必须从块设备上读取数据,这样内核就必须确定数据在物理设备上的位置。 这由映射层(Mapping Layer)来完成。 
  4. 内核通过通用块设备层(Generic Block Layer)在块设备上执行读操作,启动I/O操作, 传输请求的数据。 
  5. 在通用块设备层之下是I/O调度层(I/O Scheduler Layer),根据内核的调度策略, 对等待的I/O等待队列排序。 
  6. 最后,块设备驱动(Block Device Driver)通过向磁盘控制器发送相应的命令,执行 真正的数据传输。

本文介绍图中蓝色部分Linux I/O调度层支持的策略以及比较。

2018年3月20日星期二

dd命令用法详解

一.dd命令用法

dd的作用是拷贝文件,从指定的来源,指定的方式进行文件创建、拷贝,过程中可以进行各种转换。
dd可以很方便的验证各种IO表现,还可以用来进行整个盘/文件的复制。
dd的拷贝方式是数据块block级别的, 忽略文件系统类型和操作系统。

2018年3月17日星期六

iostat用法详解


iostatCPU以及IO设备/分区信息统计(注意,不是文件系统)的工具,非常常用,可以查看cpu使用情况以及IO设备当前繁忙情况。本文介绍常用方法,以及指标解读。

.用法

iostat [options] [interval [ count ]
interval表示汇报内容的间隔,count表示汇报次数。如果指定了interval不指定count,则无限次输出
  • -c 显示CPU报告
  • -d 显示Disk报告
  • -k 使用KB代替(512B)块数目
  • -m 使用MB代替(512B)块数目
  • -p 包括分区的统计信息。不带则只显示device
  • -t 时间戳输出
  • -x 显示扩展信息
  • -z 忽略无活动的设备
  • -h 格式化,使得更易读
  • -N 显示已注册的设备mapper名,例如使用了lvm2的时候的输出

以下示例基于RedHat 7.2
#iostat -V
sysstat version 10.1.5
(C) Sebastien Godard (sysstat <at> orange.fr)