目录

Linux 磁盘

1 概述

1.1 IDE(机械硬盘)

-w697

1.2 STAT(机械硬盘)

有缺口

-w489

SATA盘采用的是铝材料基板,铝材料的优点在于存储密度高,但是,基板的整体平整度不高,这就带来很严重的可靠性问题,在微观世界中,不平整的基板就像丘陵地带一样,当磁头高速运转的时候,如果有个风吹草动,磁头就会和这些山丘碰撞,导致DISC盘面划伤,数据丢失, 因为密度高,所以存储量也大

1.3 SAS(机械硬盘)

无缺口

-w469 SAS盘采用的是玻璃材料基板,玻璃基板的优点在于平整度高,但是存储密度不如铝材料高,这就导致SAS盘的数据存储容量小于SATA盘的容量

1.4 SSD

SSD是摒弃传统磁介质,为全集成电路化,完全的半导体化,不存在数据查找时间、延迟时间和磁盘寻道时间,数据存取速度快,读取数据的能力在100M/s以上,最高的目前可达300M/s。 无机械部件及FLASH闪存芯片,SSD没有任何噪音,功耗低 质量轻,比常规1.8英寸硬盘重量轻20-30克,使得便携设备搭载多块SSD成为可能

2 磁盘iops

IOPS和数据吞吐量适用于不同的场合: 读取10000个1KB文件,用时10秒 Throught(吞吐量)=1MB/s ,IOPS=1000 追求IOPS 读取1个10MB文件,用时0.2秒 Throught(吞吐量)=50MB/s, IOPS=5 追求吞吐量

IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用

带宽(band width)又叫频宽,是指在固定的的时间可传输的资料数量,亦即在传输管道中可以传递数据的能力。在数字设备中,频宽通常以bps表示,即每秒可传输之位数。在模拟设备中,频宽通常以每秒传送周期或赫兹 (Hz)来表示。

数据吞吐量(Throughput):指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。

寻道时间Tseek: 是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。

旋转延迟Trotation:是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。

数据传输时间Ttransfer:是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。

磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成

RD 磁盘的旋转常常被称为”rotational delay” DS 机头的移动称为”disk seek” 一个I/O 请求所需的时间计算就是DS加上RD

如何计算一个10K RPM设备的RD 值呢:

1, 10000 RPM / 60 seconds (10000/60 = 166 RPS) 2, 转换为 166分之1 的值(1/166 = 0。006 seconds/Rotation)  –每转需要的时间 3, 单位转换为毫秒(6 MS/Rotation) 4, 旋转半圆的时间(6/2 = 3MS) 也就是 RD 5, 加上平均3 MS 的寻道时间 (3MS + 3MS = 6MS) 6, 加上2MS 的延迟(6MS + 2MS = 8MS) 7, 1000 MS / 8 MS (1000/8 = 125 IOPS)   --每秒钟能产生的IO数

磁盘的RD 基于设备自身RPM 单位值(译注:RPM 是Revolutions Perminute的缩写,是转/每分钟,代表了硬盘的转速)。一个RD 就是一个盘片旋转的半圆。

因此,理论上可以计算出磁盘的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论最大值分别为,  IOPS = 1000 / (3 + 60000/7200/2)  = 140  IOPS = 1000 / (3 + 60000/10000/2) = 167  IOPS = 1000 / (3 + 60000/15000/2) = 200

举个栗子 iostat -x 1

avg-cpu: %user   %nice   %sys    %idle
0.00      0.00    57.1 4  42.86

Device:  rrqm/s wrqm/s   r/s  w/s    rsec/s  wsec/s    rkB/s  wkB/s    avgrq-sz avgqu-sz await   svctm  %util
/dev/sda  0.00  12891.43 0.00 105.71 0.00 1  06080.00  0.00   53040.00 1003.46  1099.43  3442.43 26.49  280.00
/dev/sda1 0.00  0.00     0.00 0.00   0.00    0.00      0.00   0.00     0.00     0.00     0.00    0.00   0.00
/dev/sda2 0.00  12857.14 0.00 5.71   0.00    105782.86 0.00   52891.43 18512.00 559.14   780.00  490.00 280.00
/dev/sda3 0.00  34.29    0.00 100.00 0.00    297.14    0.00   148.57   2.97     540.29   594.57  24.00  240.00


rkB/s  除以 r/s
wkB/s  除以 w/s

rsec/s【 r/s】:每秒读取的扇区数
wsec/s【w/s】:每秒写入的扇区数
rKB/s:可用每秒读I/O 字节数
wKB/s:可用每秒写I/O 字节数

53040/105 = 505KB per I/O
71152/102 = 697KB per I/O

2.1 AWS 磁盘io

2.1.1 ST1

ST1 最大500iops,吞吐量500 MiB/s,burst 1T,gp2 转st1 读延时增加10ms

-w1014

-w884

-w871

-w890 -w886

-w889

2.2 aws 磁盘iops性能测试


AWS EBS 两种硬盘读写测试,每次读写大小1K、4K、16K,读写总大小50G,
不考虑buffer情况,硬盘大小200G,测试工具为fio


测试命令如下:
fio -name iops -rw=read -bs=4k -runtime=60 -iodepth 32 -size=50G -filename /dev/mapper/data_vg-data_lv -ioengine libaio -direct=1
fio -name iops -rw=write -bs=4k -runtime=60 -iodepth 32 -size=50G -filename /dev/mapper/data_vg-data_lv -ioengine libaio -direct=1
fio -name iops -rw=randread -bs=4k -runtime=60 -iodepth 32 -size=50G -filename /dev/mapper/data_vg-data_lv -ioengine libaio -direct=1
fio -name iops -rw=randwrite -bs=4k -runtime=60 -iodepth 32 -size=50G -filename /dev/mapper/data_vg-data_lv -ioengine libaio -direct=1

测试结果如下:

分别为1K 4K 16K
顺序测试 GP2磁盘 ST1
读iops 3107/3110/3110 15203/23261/5807
写iops 3110/3110/3110 9033/12965/5817
随机测试 GP2磁盘 ST1
读iops 3109/3110/3110 134/134/134
写iops 3110/3110/3110 134/134/134