八、性能测试之磁盘分析

一、磁盘简介

在这里插入图片描述

  • 磁盘,是系统中容量最大的存储设备,相对cpu核内存来说速度比较慢

  • 1、存储数据之前,要先进行格式化
    • linux:ext4
    • windows:FAT32、NTFS
    • 磁盘就像一个笔记本,格式化,就像对每一页纸画书写格子,没有格子,写的字可能就不整齐
  • 2、读写数据时,数据与磁盘间有个磁盘缓存(内存的一部分)
    • 就像写字前,先打个草稿,然后再正式写一份
  • 3、磁盘:持久化的存储设备
    • 机械磁盘:HDD,由盘片、磁头组成,数据存在盘片的唤醒磁道上,读写时,磁头移动,定位到数据的磁道,进行数据读写
    • 固态磁盘:SSD,由固态电子元器件组成,不需要磁头寻址,所以,不管理连续IO,还是随机IO,都比机械盘快
  • 4、磁盘读写操作流

在这里插入图片描述 我们做性能测试的主要关注第二层(操作系统层)

  • linux中,一切皆文件
    • 磁盘文件系统:ext4、xfs、nfs
    • 内存文件系统:基于内存的文件系统、/proc /sys
    • 网络文件系统,用来访问其他计算机数据的文件系统,nfs、smb
  • 5、磁盘组成
    • 扇区sector:磁盘组成的最小单元(512b),磁盘磁道中的一个弧段
    • 块block:操作系统与磁盘数据交换的最小单位,块=2的n次方 * 扇区 (可以读取更多的数据,命中率更高,减少再次读磁盘的次数,提升性能)
      • linux:类似Ext4文件系统,就是磁盘分块
      • windows:类似NTFS文件系统,也是块,只是被叫做“簇”
    • 页page:操作系统与内存数据交换的最小单位(多个块组成一个页,一页的大小一般是4k)
    • 缓冲区:buffer内存与磁盘速度不匹配,在数据与磁盘进行IO时,数据先进入缓冲区
    • 页缓存:linux内存中对磁盘部分数据的副本,加快程序读取磁盘的速度和进程间数据共享
  • 6、磁盘分区
    • 磁盘分为基本分区(primary partion)和扩展分区(extension partion)
      • 基本分区:不能再分区
      • 扩展分区:必须进行二次分区才能使用,再次分区就是逻辑分区
    • linux中IDE设备分区为hd开头
      • hd=hard disk 表示硬盘是IDE(或ATA)并行接口
      • hd表示是固态硬盘,sda:第一个(hda1:第一个分区,hda2:第二个分区…),hdb:第二个,hdc:第三个…
    • linux中SCSI设备分区符为sd
      • sd=serial ATA Disk 表示硬盘是scsi,SATA串行接口,u盘也是scsi,所以u盘也是sda
      • sd是机械硬盘,sda:第一个(sda1:第一个分区,sda2:第二个分区…),sdb:第二个,sdc:第三个…
      • vmware中把磁盘做成scsi设备,所以硬盘名称是sda
    • fdisk -l 查看系统分区详细信息
      在这里插入图片描述
    • 里面的命令不建议乱用,可能会造成分区,然后磁盘被格式化问题
      在这里插入图片描述
  • 7、磁盘阵列RAID(独立磁盘构成具有冗余能力的阵列)
    • 可以提升磁盘的性能。一般用在数据库或者需要大量存储的企业(比如音频视频这种)。一般中小微企业一般做不到(硬件没有这么多,技术也实现不了),基本操作就是把单个硬盘加大,或者是多加几个盘。
    • 由多块独立的磁盘组合成一个容量巨大的磁盘组,利用磁盘提供数据所产生的加成效果提升整个磁盘系统的效能。利用这个技术,把数据切割成多段,分别存在不同磁盘上(面试时候一般问0和5
    • RAID0:数据分片存在2块磁盘,读写速度提升2倍,主要用于SWAP/TMP,但是数据不冗余,数据恢复难(比如插入30个字段,会把30个字段进行分片,分成2片存到2块磁盘,速度会快一些。但是数据存入出错了就很难恢复)-> 2份数据分为2半
    • RAID1:相同数据冗余存入2块磁盘,写速度不变,读速度提升2倍,数据冗余1分,主要用于数据备份,但磁盘利用率低 -> 2份数据存入2块磁盘
    • RAID5:数据分片和校验码混合存储3份,读写速度提升2倍,主要在要求高速时用,可以用于数据还原。数据没有冗余,但是有校验,数据恢复时比较容易。(成本比较高)
    • RAID10:2块磁盘1组先做RAID1,多组RAID1,在做RAID0。读写速度N倍 n为组数
  • 8、虚拟文件系统
    • 虚拟文件系统(Virtual File System,简称VFS)是linux内核的子系统之一,它为用户程序提供文件和文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节。借助VFS可以直接使用open()、read()、write()这样的系统调用操作文件,而无需考虑具体的文件系统和实际的存储介质。
    • 通过VFS系统,linux提供了通用的系统调用,可以跨越不同文件系统和介质之间的执行,极大简化了用户访问不同文件系统的过程。(跨平台)另一方面,新的文件系统,新类型的存储介质。可以无需编译的情况下,动态加载到linux中
  • 9、文件IO
    • 文件操作:先open、再read()\write()、最后close关闭文件
    • 读写的不同,IO不同:
      • 是否利用标准库缓存:缓存io和非缓存io
      • 是否利用页缓存:直接io和非直接io
        • 直接io:跳过操作系统的页缓存,直接与文件系统交互来访问文件
        • 非直接io:文件读写时,先给页缓存,再由内核调用,写入磁盘
      • 是否阻塞自身运行:阻塞io和非阻塞io
        • 阻塞io:如果没有获得响应,就阻塞当前进程
        • 非阻塞io:不阻塞当前线程
      • 是否等待响应结果:同步io和异步io
        • 同步io:要一直等待整个io完成,才能获得io响应
        • 异步io:不等待io完成,可以执行另外的
  • 10、查看数据存储常用命令

在这里插入图片描述

  • 1、iostat -dx 2 10 每隔2s收集一次数据,共收集10次
    • rrqm/s:每秒进行merge的读操作数目,即delta(rmerge)/s
    • wrqm/s:每秒进行merge的写操作数目,即delta(wmerge)/s
    • r/s:每秒完成的读IO设备次数 即delta(rio)/s
    • w/s:每秒完成的写Io设备次数
    • resc/s:每秒写扇区数
    • rkB/s:每秒读k字节数
    • wkB/s:每秒写k字节数
    • avgrq-sz:平均每次设备IO操作的数据大小(扇区)delta(rsect+wsect)/delta(rio+wio)
    • avgqu-sz:平均IO队列长度,delta(aveq)/s/1000
    • await:平均每次设备IO操作的等待时间(毫秒)delta(ruse+wuse)/delta(rio+wio)
    • svctm:平均每次设备IO操作的服务时间(毫秒)delta(use)/delta(rio+wio)
    • r_await:读请求等待时间
    • w_await:写请求等待时间
    • %util:一秒钟有百分之多少的时间用于IO操作,或一秒钟有多少IO队列是非空
  • 2、df -h 查看磁盘大小
    • dh -h /dev/shm
      在这里插入图片描述
  • 3、du -sh 查看当前目录所在位置的文件大小

在这里插入图片描述
- du -h 展示当前目录所在位置每个文件的大小
在这里插入图片描述

  • 4、vmstat 1 监控磁盘io(bi,bo)

在这里插入图片描述

  • 11、磁盘性能指标
    • 使用率:指磁盘处理IO的时间百分比
    • 饱和度:磁盘处理IO的繁忙程度
    • IOPS:input/output per second 每秒的IO请求
    • 吞吐量:每秒的IO请求大小
    • 响应时间:指IO请求从发出到收到响应的时间间隔

二、磁盘实战

  • 1、清理缓存:echo 3 > /proc/sys/vm/drop_caches
    • 做下面3个测试之前都需要清空缓存

    • 执行上面那句以后,如图所示,可以看到缓存被清了,free变大了在这里插入图片描述

    • echo 1 > /proc/sys/vm/drop_caches 释放页缓存

    • echo 2 > /proc/sys/vm/drop_caches 释放目录项

    • echo 3 > /proc/sys/vm/drop_caches 释放页缓存,目录项、节点

    • 执行完后,buff会为0,cache会减少,free增大

  • 2、测试磁盘写能力:dd if=/dev/zero of=$PWD/outfile bs=20MB count=100
    • if 输入文件(input file),of输出文件(output file)
    • /dev/zero 一个伪设备,只产生字符流,不会有IO
    • of=$PWD/outfile 输出到当前目录下的outfile文件中
    • bs=20MB count=100 块文件20MB,执行100次
  • 2.1、time dd if=/dev/zero of=$PWD/outfile bs=20MB count=100
    • 带有时间统计
      在这里插入图片描述
      • 监控
        • 使用vmstat 1 :buff 有明显的数据,cache有数据变化,但是不明显, bi有明显的数据
        • 使用iostat -dx 1 rKB/s有明显的数据,await有,但是不是很大
  • 3、测试磁盘读能力:dd if=/dev/sda of=/dev/null bs=20MB count=100

在这里插入图片描述

  • if 输入文件(input file),of输出文件(output file)
    • /dev/sda 磁盘第一个物理分区,读取这个磁盘文件,会有IO
    • /dev/null 一个伪设置,回收站,是个无底洞,可以无限放数据
    • bs=20MB count=100 块文件20MB,执行100次
  • 3.1、time dd if=/dev/sda of=/dev/null bs=20MB count=100 带有时间统计
    • 监控
      • 3、vmstat 1 buff 有明显的数据,cache有数据变化,但是不明显, bi有明显的数据
      • 4、iostat -dx 1 rKB/s有明显的数据,await有,但是不是很大
  • 4、测试内存能力:dd if=/dev/zero of=/dev/null bs=10MB count=1000

在这里插入图片描述

  • 结论:
  • 磁盘的读写速度,几百MB/s 内存 几GB/s 内存速度比磁盘快很多

  • 操作时,cache增大, bo有明显数据,

  • 数据时,buff增大, bi有明显数据

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值