前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发应该知道的Linux系统分析-IO篇

开发应该知道的Linux系统分析-IO篇

作者头像
只喝牛奶的杀手
发布2020-01-13 14:48:34
1.3K0
发布2020-01-13 14:48:34
举报

小文件读写的性能瓶颈是磁盘的寻址(随机读写性能更差),评估的标准是tps。大文件读写的性能瓶颈是带宽,评估的标准是持续的读写速度。Linux可以利用空闲内存作文件系统访问的cache,因此系统内存越大存储系统的性能也越好。

iostat

  • kB_read/s表示每秒读取的数据块数。
  • kB_wrtn/s表示每秒写入的数据块数。
  • kB_read表示读取的所有块数。
  • kB_wrtn表示写入的所有块数。

可以通过kB_read/s和kB_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果kB_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果kB_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。

对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。

sar评估磁盘性能

  • await表示平均每次设备I/O操作的等待时间(以毫秒为单位)
  • svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)
  • %util表示一秒中有百分之几的时间用于I/O操作

对于磁盘IO性能,一般有如下评判标准:

  • 正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
  • await值的大小一般取决于svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
  • %util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题

Disk IO为什么慢?

Disk IO是Linux系统中最慢的部分,距离CPU较远,且有物理损耗:磁盘盘体必须旋转,机头必须寻道.磁盘的旋转常常被称为"rotational delay"(RD),机头的移动称为"disk seek"(DS).一个IO请求所需的时间计算就是DS加上RD.

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

10000 RPM / 60 seconds (10000/60 = 166 RPS)

转换为 166分之1 的值(1/166 = 0.006 seconds/Rotation)

单位转换为毫秒(6 MS/Rotation)

旋转半圆的时间(6/2 = 3MS) 也就是 RD

加上平均3 MS 的寻道时间 (3MS + 3MS = 6MS)

加上2MS 的延迟(6MS + 2MS = 8MS)

1000 MS / 8 MS (1000/8 = 125 IOPS)

每次应用程序产生一个I/O,在10K RPM磁盘上都要花费平均 8MS.在这个固定时间里,磁盘将尽可能且有效率在进行读写磁盘.IOPS 可以计算出大致的I/O 请求数,10K RPM 磁盘有能力提供120-150 次IOPS.

IOPS (Input/Output Operations Per Second) 即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。 评估IOPS 的效能,可用每秒读写I/O 字节数除以每秒读写IOPS 数得出。

Random读写负载与数据大小无关,主要取决于磁盘能够达到的IOPS数. Web和Mail Server是典型的随机访问例子,每次请求的的数据量都很小;随机读写依赖同时可以处理多少IO请求,所以更高的额IOPS数是关键。

IO 如何提速?

  • Linux kernel要尽量减少磁盘IO,这里解决的实际上是优化磁盘<--->内存过程
  • Linux kernel 将磁盘IO按照页面为单位读取,大多数的页面大小是4K,换句话说,磁盘和内存交换数据的单位是4K。可以用下面的方式检查你系统的页面大小:

IO 如何提速

Kernel 使用file buffer cache 来尽可能降低major page fault(MPF)和增加minor page fault(MnPF)。系统产生IO请求,buffer cache会一直增长指导内存减少低到一定水平,kernel需要释放一些页面来做他用.

Linux使用一个虚拟内存层来映射硬件地址空间. 当一个进程启动,这个过程按需进行,内核先扫描CPU caches和物理内存.如果进程需要的数据在这2个地方都没找到,内核抛出一个major page fault(MPF).MPF要求磁盘系统检索页并缓存进RAM.一旦内存页被映射到buffer cache(buff)中,内核将尝试使用这些页(读写数据)并产出一个minor page fault(MnPF).与扔在磁盘上操作相比,MnPF通过反复使用内存页,大大的缩短了内核时间。

操作系统的工作原理来讲,buffer/cache的目的主要是为了减少MPFs,增加MnPFs。

sar评估缓冲区性能

以上各列的含义为:

  • tps: 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。
  • rtps: 每秒向磁盘设备的读请求次数
  • wtps: 每秒向磁盘设备的写请求次数
  • bread: 每秒从磁盘读的bytes数量
  • bwrtn: 每秒向磁盘写的bytes数量

一旦出现CPU出现等待IO,就说明磁盘过载。当多个进程试图同时访问同一个磁盘时,会发生磁盘争用。大多数磁盘对访问次数(每秒I/O操作)和每秒可传输的数据量(I/O数据速率或吞吐量)都有限制。当达到这些限制时,进程必须等待访问磁盘。


每周一句: 自信乐观,诚实正直,自我驱动,勇于担责!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档