IO 性能指标及其基准测试

磁盘io性能指标

主要有2个:IOPS 和 吞吐量。

IOPS

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

IOPS可细分为如下几个指标:

  • Toatal IOPS,混合读写和顺序随机I/O负载情况下的磁盘IOPS,这个与实际I/O情况最为相符,大多数应用关注此指标。
  • Random Read IOPS,100%随机读负载情况下的IOPS。
  • Random Write IOPS,100%随机写负载情况下的IOPS。
  • Sequential Read IOPS,100%顺序读负载情况下的IOPS。
  • Sequential Write IOPS,100%顺序写负载情况下的IOPS。
吞吐量

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

IOPS 与吞吐量的关系:每秒 I/O 吞吐量= IOPS* 平均 I/O SIZE。
从公式可以看出: I/O SIZE 越大,IOPS 越高,那么每秒 I/O 的吞吐量就越高。因此,我们会认为 IOPS 和吞吐量的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且这两个参数也存在着一定的关系。


I/O 的分类

  • 大/小快IO
    这个数值指的是控制器指令中给出的连续读出扇区数目的多少

  • 连续/随机IO
    连续 I/O 指的是本次 I/O 给出的初始扇区地址和上一次 I/O 的结束扇区地址是完全连续或者相隔不多的。反之,如果相差很大,则算作一次随机 I/O

    连续 I/O 比随机 I/O 效率高的原因是:在做连续 I/O 的时候,磁头几乎不用换道,或者换道的时间很短;而对于随机 I/O,如果这个 I/O 很多的话,会导致磁头不停地换道,造成效率的极大降低。

  • 顺序/并发IO
    并发 I/O 就是指向一块磁盘发出一条 I/O 指令后,不必等待它回应,接着向另外一块磁盘发 I/O 指令


机械磁盘IO操作

对于机械磁盘来说一个完整的IO操作是这样进行的:

当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(Actuator Arm)带读写磁头(Head)离开着陆区(Landing Zone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(Seek Time)

image.png

但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(Rotational Delay)

接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(Data Transfer),对应的时间称为传送时间(Transfer Time)

完成这三个步骤之后一次IO操作也就完成了。

所以,我们看硬盘厂商的宣传单的时候我们经常能看到3个参数,分别是:

  • 平均寻址时间
  • 盘片旋转速度
  • 最大传送速度

这三个参数就可以提供给我们计算上述三个步骤的时间:

第一个寻址时间,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间。

第二个旋转延时,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时。

第三个传送时间,磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次 IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IO Chunk Size / Max Transfer Rate。

现在我们就可以得出这样的计算单次IO时间的公式:

IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate

于是我们可以这样计算出IOPS:

IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)

7200转/分的STAT硬盘平均物理寻道时间是9ms,7200 rpm的磁盘平均旋转延迟大约为601000/7200/2 = 4.17ms,所以:7200 rpm的磁盘的 IOPS = 1000 / (9 + 4.17) = 76 IOPS(忽略数据传输时间)

固态硬盘的IO操作

TODO

固态硬盘 TBW 和 DWPD 概念

TBW (Total Bytes Written),即总写入字节数。是说在质保期,也就是SSD寿命周期内,总共可以写入的数据总量。比如 某 500GB SSD 标称的 TBW 是 300TB,保修期为 5 年,这意味着厂家承诺在 10 年内可以将 300TB 的数据写入 SSD 中而不会出现问题。

DWPD,(Diskful Writes Per Day),每日整盘写入次数,指在预期寿命内可每日完整写入SSD固态硬盘所有容量的次数。主要用于企业级 SSD。DWPD是用来标示SSD产品寿命的,比如某个SSD产品说自己能做到3 DWPD*5年,意思就是每天整盘写入3次,可以使用寿命为5年。

以下是快速计算 DWPD 的公式:
DWPD=TBW / 保修天数 / 固态硬盘容量

以某 500GB SSD 标称的 TBW 是 300TB,保修期为 5 年为例,使用上述公式。可以算出该固态硬盘的 DWPD 约为 0.33。这意味着每天必须写入 500 * 0.33 = 165GB 数据才能让 SSD 开始磨损。


磁盘I/O性能监控

查看磁盘扇区大小信息
# fdisk -l
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3fa1d255

Device     Boot Start       End   Sectors Size Id Type
/dev/vda1  *     2048 104857566 104855519  50G 83 Linux
查看磁盘使用情况
# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            885M     0  885M   0% /dev
tmpfs           184M  5.9M  178M   4% /run
/dev/vda1        50G  3.3G   44G   7% /
tmpfs           917M   24K  917M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           917M     0  917M   0% /sys/fs/cgroup 
tmpfs           184M     0  184M   0% /run/user/0
pidstat

pidstat可以实时查看每个进程的I/O情况。它包括:

  • UID 和 PID
  • kB_rd/s 每秒读取的数据大小,单位是KB
  • kB_wr/s 每秒发出的写请求数据大小,单位是KB
  • kB_ccwr/s Command 每秒取消的写请求数据大小,单位是KB
  • iodelay 块I/O延迟,包括等待同步块I/O和换入块I/O结束的时间,单位是时钟周期
# pidstat -d 1  # -d 后接间隔
Linux 4.15.0-118-generic (VM-0-12-ubuntu)   12/28/2020  _x86_64_    (1 CPU)

10:35:16 AM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
10:35:17 AM     0       337      0.00     20.00      0.00       1  jbd2/vda1-8
10:35:17 AM     0      1556      0.00     20.00      0.00       0  YDEdr

10:35:17 AM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
10:35:18 AM     0       428    128.00     84.00      0.00       1  systemd-journal
10:35:18 AM     0      1277      0.00      4.00      4.00       0  barad_agent
10:35:18 AM     0     21728      0.00      4.00      0.00       0  sshd
iotop

除了可以用 pidstat 实时查看,还可以使用iotop命令,按照 I/O 大小对进程排序,然后找到 I/O 较大的那些进程。

# iotop
Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s                             
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s 
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
    6 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [mm_percpu_wq]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
磁盘I/O观测 iostat 命令

iostat监控的请求数量,并不是我们进程中执行read的数量,而是具体对磁盘扇区操作请求的数量

# iostat -x 1 
image.png
image.png

磁盘/文件系统 I/O 基准性能测试工具 -- FIO

FIO是测试IOPS的非常好的工具,参考一篇详细介绍的文章:https://www.yuanguohuo.com/2019/05/23/fio-notes/


参考资料

  1. https://www.cnblogs.com/wx170119/p/11427837.html
  2. https://blog.51cto.com/shaonian/2319175
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容