赞
踩
机械磁盘
主要是由盘片和读写磁头组成。数据存储在盘片的的环状磁道上,读写数据前需要移动磁头,先找到对应的磁道,然后才可以访问数据。
如果数据都在同一磁道上,不需要在进行切换磁道,这就是连续IO,可以获得更好的性能。而随机IO性能就比较差。
固态磁盘
固态磁盘不需要寻找磁道,所以随机IO和连续IO性能都不错。
连续IO的性能其实比随机IO性能要好,主要连续IO可以进行预读的操作,这是其中一个性能点,另外随机IO其实还是比连续IO差。
机械磁盘的最小单位是扇区,大小是512字节
固态磁盘的最小单位是页,通常是4KB
而对于机械磁盘,因为扇区单位比较小,为了尽可能提升顺序IO,将8个扇区组成一个4KB的页。
通用块层是处于文件系统和磁盘驱动中间的一个块设备抽象层。
IO调度算法
上述其实优点一个是队列,另一个是按照进程粒度进行分配IO请求,另一个就是按照读写粒度进行处理。你看无论是编程类库,还是存储中间件都是相同的思想。
LinuxIO栈分为 文件系统层、通用块层、设备层。
存储系统的IO是最慢的地方,所以通过使用各种缓存机制来优化访问文件的性能,减少对下层块设备的直接调用。其中包含页缓存、目录项缓存、索引节点缓存。
# -d -x表示显示所有磁盘I/O的指标
$ iostat -d -x 1
$ 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。