小文件读写的性能瓶颈是磁盘的寻址(随机读写性能更差),评估的标准是tps。大文件读写的性能瓶颈是带宽,评估的标准是持续的读写速度。Linux可以利用空闲内存作文件系统访问的cache,因此系统内存越大存储系统的性能也越好。
iostat
可以通过kB_read/s和kB_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果kB_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果kB_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。
sar评估磁盘性能
对于磁盘IO性能,一般有如下评判标准:
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 如何提速?
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评估缓冲区性能
以上各列的含义为:
一旦出现CPU出现等待IO,就说明磁盘过载。当多个进程试图同时访问同一个磁盘时,会发生磁盘争用。大多数磁盘对访问次数(每秒I/O操作)和每秒可传输的数据量(I/O数据速率或吞吐量)都有限制。当达到这些限制时,进程必须等待访问磁盘。
每周一句: 自信乐观,诚实正直,自我驱动,勇于担责!