磁盘IO的检测以及巡查

磁盘io的速率很有可能成为整个系统的性能瓶颈,因此在部署系统之前可以做好io速率的检测,在服务出问题的时候要求运维工程师能够排查是否由io堆积引起

检查磁盘io速率

对磁盘进行读写的速率

[root@node1 ~]# dd if=/dev/zero of=/home/test bs=1M count=2000 oflag=direct;rm -f /home/test
2000+0 records in
2000+0 records out
2097152000 bytes (2.1 GB) copied, 11.2756 s, 186 MB/s

对磁盘进行随机读写的速率

[root@node1 ~]# fio -filename=/home/test_ranrw -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=90 -ioengine=psync -bs=16k -size=5G -numjobs=20 -runtime=100 -group_reporting -name=mytest; rm -f /home/test_randrw 
mytest: (g=0): rw=randrw, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=psync, iodepth=1
...
fio-3.7
Starting 20 threads
Jobs: 20 (f=20): [m(20)][100.0%][r=3827KiB/s,w=480KiB/s][r=239,w=30 IOPS][eta 00m:00s]
mytest: (groupid=0, jobs=20): err= 0: pid=7561: Thu Jun 15 15:25:25 2023
   read: IOPS=253, BW=4061KiB/s (4158kB/s)(397MiB/100198msec)
    clat (usec): min=487, max=645946, avg=76468.48, stdev=91446.67
     lat (usec): min=487, max=645946, avg=76468.86, stdev=91446.69
    clat percentiles (msec):
     |  1.00th=[    4],  5.00th=[    6], 10.00th=[    9], 20.00th=[   14],
     | 30.00th=[   22], 40.00th=[   31], 50.00th=[   43], 60.00th=[   59],
     | 70.00th=[   84], 80.00th=[  120], 90.00th=[  186], 95.00th=[  271],
     | 99.00th=[  447], 99.50th=[  510], 99.90th=[  575], 99.95th=[  592],
     | 99.99th=[  609]
   bw (  KiB/s): min=   31, max=  640, per=5.00%, avg=203.13, stdev=109.94, samples=3987
   iops        : min=    1, max=   40, avg=12.06, stdev= 6.91, samples=3987
  write: IOPS=29, BW=474KiB/s (485kB/s)(46.4MiB/100198msec)
    clat (usec): min=336, max=462996, avg=19670.43, stdev=62724.47
     lat (usec): min=337, max=462996, avg=19671.14, stdev=62724.45
    clat percentiles (usec):
     |  1.00th=[   461],  5.00th=[   603], 10.00th=[   725], 20.00th=[   857],
     | 30.00th=[   930], 40.00th=[  1012], 50.00th=[  1139], 60.00th=[  1336],
     | 70.00th=[  1582], 80.00th=[  1991], 90.00th=[ 57934], 95.00th=[139461],
     | 99.00th=[362808], 99.50th=[413139], 99.90th=[450888], 99.95th=[455082],
     | 99.99th=[463471]
   bw (  KiB/s): min=   31, max=  224, per=10.85%, avg=51.33, stdev=30.09, samples=1824
   iops        : min=    1, max=   14, avg= 2.58, stdev= 1.94, samples=1824
  lat (usec)   : 500=0.17%, 750=1.04%, 1000=2.87%
  lat (msec)   : 2=4.48%, 4=1.66%, 10=10.53%, 20=14.12%, 50=23.38%
  lat (msec)   : 100=18.88%, 250=17.40%, 500=4.98%, 750=0.50%
  cpu          : usr=0.00%, sys=0.20%, ctx=28445, majf=0, minf=9
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=25429,2968,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=4061KiB/s (4158kB/s), 4061KiB/s-4061KiB/s (4158kB/s-4158kB/s), io=397MiB (417MB), run=100198-100198msec
  WRITE: bw=474KiB/s (485kB/s), 474KiB/s-474KiB/s (485kB/s-485kB/s), io=46.4MiB (48.6MB), run=100198-100198msec

Disk stats (read/write):
    dm-0: ios=25429/2975, merge=0/0, ticks=1940403/57544, in_queue=2008585, util=100.00%, aggrios=25429/2975, aggrmerge=0/0, aggrticks=1944027/58321, aggrin_queue=2002347, aggrutil=100.00%
  sda: ios=25429/2975, merge=0/0, ticks=1944027/58321, in_queue=2002347, util=100.00%

fio这个命令大家可能比较生疏,以下是这个命令的参数解释


filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb
direct=1                 测试过程绕过机器自带的buffer,使测试结果更真实
iodepth=1                如果 I/O 引擎是异步的,我们希望保持多大的队列深度?
rw=randwread             测试随机读的I/O
rw=randwrite             测试随机写的I/O
rw=randrw                测试随机混合写和读的I/O
rw=read                  测试顺序读的I/O
rw=write                 测试顺序写的I/O
rw=rw                    测试顺序混合写和读的I/O
bs=4k                    单次io的块文件大小为4k
bsrange=512-2048         同上,提定数据块的大小范围
size=5g                  本次的测试文件大小为5g,以每次4k的io进行测试
numjobs=30               本次的测试线程为30
runtime=1000             测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止
time_based: 如果在runtime指定的时间还没到时文件就被读写完成,将继续重复直到runtime时间结束。
ioengine=psync           io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30            在混合读写的模式下,写占30%
group_reporting          关于显示结果的,汇总每个进程的信息
此外
lockmem=1g               只使用1g内存进行测试
zero_buffers             用0初始化系统buffer
nrfiles=8                每个进程生成文件的数量

--ioengine=rbd表示用rbd引擎
--pool为存储卷所在的存储池,一般为“.硬盘池名.rbd” (H3C), 
--rbdname为存储卷名,其他参数与fio跑普通卷无差异

磁盘io查看

以上是对io进行的测试,日常运维中还需要对磁盘的io运行情况进行查看
top命令
检查Cpu(s)这一列的wa值,wa值表示CPU用于磁盘IO操作的时间占比,正常情况下wa值不超过10%,如果长时间超过10%,说明系统磁盘IO操作很多,出现了IO队列堆积的情况
在这里插入图片描述
iotop

这个命令会列出当前所有IO操作的服务进程,并从大到小排序,对IO操作占比最大且最频繁的服务做进一步检查
在这里插入图片描述
对于iotop的输出解释如下

Total DISK READ:	从磁盘中读取的总速率
Total DISK WRITE:	往磁盘里写入的总速率
Actual DISK READ:	从磁盘中读取的实际速率
Actual DISK WRITE:往磁盘里写入的实际速率
TID:				线程ID,按p可转换成进程ID
PRIO:				优先级
USER:				线程所有者
DISK READ:			从磁盘中读取的速率
DISK WRITE:		往磁盘里写入的速率
SWAPIN:			swap交换百分比
IO>:				IO等待所占用的百分比
COMMAND:			具体的进程命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux磁盘IOLinux内核的一部分,用于处理与磁盘的输入输出相关的操作。磁盘IO操作包括读取和写入数据到磁盘。在Linux中,磁盘IO操作主要涉及到两个重要的组件:页高速缓存(PageCache)和目录项缓存(dentry)。 页高速缓存是Linux内核引入的一种机制,用于优化磁盘IO的性能。它将磁盘抽象成一个个固定大小的连续页面,通常为4K。通过使用页高速缓存,Linux内核可以将磁盘上的数据加载到内存中,并在需要时直接从内存中读取和写入数据,而无需频繁地进行磁盘操作。这种机制大大提高了磁盘IO的效率和性能。 目录项缓存是用于加速文件路径查找的一种缓存机制。在Linux中,每个文件都存在于某个目录中,当我们根据路径查找文件时,内核需要遍历目录来找到相应的目录项。为了提高性能,Linux使用了目录项缓存,将目录项存储在缓存中,以减少对磁盘的读取次数。当需要查找文件时,Linux首先在目录项缓存中查找对应的目录项,如果找到则直接返回,否则才需要从磁盘中读取目录数据并查找目标文件。这种机制可以有效地加速文件路径查找的过程。 综上所述,Linux磁盘IO涉及到页高速缓存和目录项缓存两个重要的机制,它们都是为了优化磁盘IO操作的性能和效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux内核io体系之磁盘io](https://blog.csdn.net/qq_23929673/article/details/103845249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值