9. 磁盘
- 磁盘I/O可能会造成严重的应用程序延时,因此是系统性能分析的一个重要目标;在高负载下,磁盘成为了瓶颈,CPU将持续空闲以等待磁盘I/O结束;
9.1 术语
- 虚拟磁盘:存储设备的模拟,在系统看来的一块物理磁盘可能由多块磁盘组成;
- 传输总线:用来通信的物理总线,包括数据传输I/O以及磁盘命令;
- 数据传输I/O:至少由方向、地址、大小组成;
- 磁盘命令:除了读写之外的其他非数据传输的命令;
- 扇区:磁盘上的一个存储块,通常为512B大小;
- IOPS:Input/Output operation per second,即磁盘每秒的读写次数,磁盘的随机读取IOPS主要由主控和接口决定;
9.2 架构
- 在进行容量规划时,磁盘架构能够决定不同组件和配置组合的极限;出现性能问题时,也可以通过检查架构从而确保问题的来源究竟是架构的选择还是当前的负载和调优;
-
磁盘类型:
- 磁性旋转盘HDD:
- 寻道和旋转:磁头寻道时间、盘片旋转时间;
- 理论最大吞吐量:每磁道最大扇区数 * 扇区大小 * 磁盘旋转速度(rpm) / 60s;
- 短行程:只把磁盘外侧的磁道用来服务负载;
- 扇区分区:较长的磁道扇区个数较多;
- 扇区大小:4KB的扇区大小、512B的扇区大小;
- 磁盘缓存:小块RAM内存,用来缓存读取的结果和缓冲要写入的数据;
- 电梯寻道:根据磁盘位置将I/O重新排序,以最小化磁头的移动;
- ECC:磁盘在每个扇区的结尾存储了一个纠错码,以验证驱动器读取的数据;
- 固态磁盘SSD:(大部分使用闪存NAND、少许使用非易失性DRAM)
-
接口:(驱动器支持与系统通信的协议)
- SCSI、SAS、SATA
-
存储类型:磁盘设备、RAID、存储阵列、网络连接存储;
9.3 方法
方法 | 类型 |
---|---|
工具法 | 观察分析 |
USE方法 | 观察分析 |
性能监控 | 观察分析,容量规划 |
负载特征归纳 | 观察分析,容量规划 |
延时分析 | 观察分析 |
事件跟踪 | 观察分析 |
静态性能调优 | 观察分析,容量规划 |
缓存调优 | 观察分析,调优 |
资源控制 | 调优 |
微基准测试 | 实验分析 |
伸缩 | 容量规划,调优 |
- 策略:USE方法、性能监控、负载特征归纳、延时分析、微基准测试、静态分析和事件跟踪;
9.4 分析
Linux | 描述 |
---|---|
iostat | 各种单个磁盘统计信息 |
sar | 磁盘历史统计信息 |
pidstat iotop | 按进程列出磁盘I/O使用情况 |
blktrace | 磁盘I/O事件跟踪 |
DTrace | 自定义静态和动态跟踪 |
MegaCli | LSI控制器统计信息 |
smartctl | 磁盘控制器统计信息 |
9.5 调优
-
操作系统可调参数:(ionice、资源控制、内核可调参数)
- ionice:可设置一个进程的I/O调度级别和优先级,
ionice -c 3 -p 1623
,将1623号进程放入空闲I/O调度级别中,这对于长时间运行的备份任务较为合适,这样就不会与生产负载产生冲突;调度级别为整数,其中0为不指定级别,内核会挑选一个默认值,优先级则根据进程nice值选定、其中1为实时级别,对磁盘的最高级别访问、其中2为尽力级别,默认的调度级别,包括优先级0~7、其中3为空闲级别,在一段磁盘空闲的期限过后才允许进行I/O; - 资源控制:Linux中的控制组(cgroups)块I/O(blkio)子系统为进程和进程组提供了存储设备资源的控制机制;
- 内核可调参数:
/sys/block/sda/queue/scheduler
,选择I/O调度器策略,是空操作、最后期限、预期还是cfq等;
- ionice:可设置一个进程的I/O调度级别和优先级,
-
磁盘设备可调参数:
- Linux 上的 hdparm 工具可设置多种磁盘设备的可调参数;
-
磁盘控制器可调参数:
- 可用的磁盘控制器可调参数取决于磁盘控制器型号和厂商;
MegaCli -AdpAllInfo -aALL
可显示每个设置对应的描述信息;
- 可用的磁盘控制器可调参数取决于磁盘控制器型号和厂商;