一、关于磁盘

磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。

第一类,机械磁盘,也称为硬盘驱动器(Hard Disk Driver),通常缩写为 HDD。机械磁盘主要由盘片和读写磁头组成,数据就存储在盘片的环状磁道中。在读写数据前,需要移动读写磁头,定位到数据所在的磁道,然后才能访问数据。

显然,如果 I/O 请求刚好连续,那就不需要磁道寻址,自然可以获得最佳性能。这其实就是我们熟悉的,连续 I/O 的工作原理。与之相对应的,当然就是随机 I/O,它需要不停地移动磁头,来定位数据位置,所以读写速度就会比较慢。

第二类,固态磁盘(Solid State Disk),通常缩写为 SSD,由固态电子元器件组成。固态磁盘不需要磁道寻址,所以,不管是连续 I/O,还是随机 I/O 的性能,都比机械磁盘要好得多。

其实,无论机械磁盘,还是固态磁盘,相同磁盘的随机 I/O 都要比连续 I/O 慢很多,原因也很明显。

对机械磁盘来说,我们刚刚提到过的,由于随机 I/O 需要更多的磁头寻道和盘片旋转,它的性能自然要比连续 I/O 慢。

而对固态磁盘来说,虽然它的随机性能比机械硬盘好很多,但同样存在“先擦除再写入”的限制。随机读写会导致大量的垃圾回收,所以相对应的,随机 I/O 的性能比起连续 I/O 来,也还是差了很多。

此外,连续 I/O 还可以通过预读的方式,来减少 I/O 请求的次数,这也是其性能优异的一个原因。很多性能优化的方案,也都会从这个角度出发,来优化 I/O 性能

此外,机械磁盘和固态磁盘还分别有一个最小的读写单位:

机械磁盘的最小读写单位是扇区,一般大小为 512 字节。

而固态磁盘的最小读写单位是页,通常大小是 4KB、8KB 等。

如果每次都读写 512 字节这么小的单位的话,效率很低。所以,文件系统会把连续的扇区或页,组成逻辑块,然后以逻辑块作为最小单元来管理数据。常见的逻辑块的大小是 4KB,也就是说,连续 8 个扇区,或者单独的一个页,都可以组成一个逻辑块。

除了可以按照存储介质来分类,另一个常见的分类方法,是按照接口来分类,比如可以把硬盘分为 IDE(Integrated Drive Electronics)、SCSI(Small Computer System Interface) 、SAS(Serial Attached SCSI) 、SATA(Serial ATA) 、FC(Fibre Channel) 等。

不同的接口,往往分配不同的设备名称。比如, IDE 设备会分配一个 hd 前缀的设备名,SCSI 和 SATA 设备会分配一个 sd 前缀的设备名。如果是多块同类型的磁盘,就会按照 a、b、c 等的字母顺序来编号。

除了磁盘本身的分类外,当你把磁盘接入服务器后,按照不同的使用方式,又可以把它们划分为多种不同的架构。

最简单的,就是直接作为独立磁盘设备来使用。这些磁盘,往往还会根据需要,划分为不同的逻辑分区,每个分区再用数字编号。比如我们前面多次用到的 /dev/sda ,还可以分成两个分区 /dev/sda1 和 /dev/sda2。

另一个比较常用的架构,是把多块磁盘组合成一个逻辑磁盘,构成冗余独立磁盘阵列,也就是 RAID(Redundant Array of Independent Disks),从而可以提高数据访问的性能,并且增强数据存储的可靠性。

根据容量、性能和可靠性需求的不同,RAID 一般可以划分为多个级别,如 RAID0、RAID1、RAID5、RAID10 等。

RAID0 有最优的读写性能,但不提供数据冗余的功能。

而其他级别的 RAID,在提供数据冗余的基础上,对读写性能也有一定程度的优化。

最后一种架构,是把这些磁盘组合成一个网络存储集群,再通过 NFS、SMB、iSCSI 等网络存储协议,暴露给服务器使用。

其实在 Linux 中,磁盘实际上是作为一个块设备来管理的,也就是以块为单位读写数据,并且支持随机读写。

每个块设备都会被赋予两个设备号,分别是主、次设备号。主设备号用在驱动程序中,用来区分设备类型;而次设备号则是用来给多个同类设备编号。

二、工具安装

fio(Flexible I/O Tester)正是最常用的文件系统和磁盘 I/O 性能基准测试工具。

它提供了大量的可定制化选项,可以用来测试,裸盘或者文件系统在各种场景下的 I/O 性能,包括了不同块大小、不同 I/O 引擎以及是否使用缓存等场景。

# yum  -y install epel-release

# yum  -y install fio

三、测试场景

此次测试,被测试的磁盘挂载在 /opt  目录下

100随机读

# fio -filename=/opt/100_rand_read   -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=rand_100read_4k

# tail   -n  300   /var/log/messages

1. IOPS就是 I/O per second 的缩写,指的是发送给磁盘的读写请求数(注意这里是系统合并后发给磁盘的)

2. 每次请求的大小不是固定的,所以才会有 IOPS 和吞吐这些不同的指标

100随机写

# fio -filename=/opt/100_rand_write  -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=rand_100read_4k

# tail   -n  300   /var/log/messages

70随机读,30随机写

# fio -filename=/opt/70_rand_read_30_rand_write  -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=randrw_70read_4k

# tail   -n  300   /var/log/messages

30随机读 70随机写

# fio -filename=/opt/30_rand_read_70_rand_write   -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=30 -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=randrw_30read_4k

# tail   -n  300   /var/log/messages

四、参考

CentOS.x上磁盘性能测试工具fio的安装和使用

https://www.jianshu.com/p/f26543a38f09

fio压测工具和io队列深度理解和误区

http://blog.yufeng.info/archives/2104

fio – IO压力测试工具

https://younger.blog.csdn.net/article/details/71129541

fio安装使用方法

https://www.kclouder.cn/fio

fio模拟MySQL服务器IO压力脚本

http://blog.yufeng.info/archives/1497

fio使用详解

https://blog.csdn.net/m0_37972390/article/details/80019762

Fio Output Explained

https://tobert.github.io/post/2014-04-17-fio-output-explained.html

A script that runs fio test and genearates a simple result for each jobs

https://gist.github.com/sennajox/3667757

Linux 硬盘测试脚本

https://amefs.net/archives/1974.html

https://github.com/amefs/fio-bench

https://github.com/bootgo/tools/blob/master/fio.py

【fio】关于磁盘性能测试相关推荐

  1. 性能测试工具_磁盘性能测试工具fio

    1.磁盘性能测试工具FIO FIO是常见的磁盘性能测试工具,使用 FIO 时,建议配合使用 libaio 的 I/O 引擎进行测试. 一般使用以下指标衡量硬盘的性能: IOPS:每秒读/写次数,单位为 ...

  2. FIO 磁盘性能测试

    FIO 磁盘性能测试 fio 是一个开源压力测试工具,主要用来测试硬盘 io 性能.这个工具的可定制性非常强,可以根据测试者的想法进行各种混合 io 测试,它支持 13 种不同类型 io 引擎(lib ...

  3. 使用fio测试磁盘I/O性能

    使用fio测试磁盘I/O性能 PTE 前言 fio是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, ...

  4. linux使用FIO测试磁盘的iops

    linux使用FIO测试磁盘的iops 博客分类: IO FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, po ...

  5. 达梦数据库集群节点磁盘性能测试

    达梦数据库集群节点磁盘性能测试 1.本次测试磁盘 IP 共享数据盘 非共享挂载盘 192.168.157.100 /dev/pbdx15 /dmarch 192.168.157.101 /dev/pb ...

  6. 磁盘性能测试工具-FIO的安装及使用

    文章目录 FIO介绍 FIO安装 在线安装 离线安装 磁盘测试 命令行方式 测试结果说明 命令参数说明 配置文件方式 dd命令介绍 使用方法 FIO介绍 FIO是一款测试IOPS的工具,用于对磁盘进行 ...

  7. fio 测试磁盘性能

    在磁盘测试中最关心的几个指标分别为: iops(每秒执行的IO次数).bw(带宽,每秒的吞吐量).lat(每次IO操作的延迟). 当每次IO操作的block较小时,如512bytes/4k/8k等,测 ...

  8. linux fio释放内存,linux使用FIO测试磁盘的iops

    出处:http://blog.itpub.net/26855487/viewspace-754346/ FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎, ...

  9. linux 使用FIO测试磁盘iops

    为什么80%的码农都做不了架构师?>>>    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎, 包括:sync,mmap, libai ...

最新文章

  1. linux平台软件动态分析工具valgrind系列工具及其可视化
  2. C#数组排序(按列)
  3. [EXP]windows全版本SMB溢出工具加强版
  4. F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数
  5. 批量修改root密码#shell脚本
  6. 大牛书单 | 搜索大牛都读什么书?
  7. [转]WeiFenLuo.winFormsUI.Docking.dll的使用(简单入门版)
  8. 美国 otc 数字货币_美国数字公共图书馆的免费藏书量是第一年的三倍
  9. 一、Linear Regression
  10. HP LasterJet 3050驱动安装技巧,面向win7,8,8.1,10
  11. OpenCV(图像处理)—访问像素的三种方法
  12. ElasticSearch开发问题汇总(不断更新中)
  13. candence的图纸大小设置_Candence基础知识1(CADENCE从原理图到PCB步骤 )
  14. iOS WKWebView 那些坑
  15. CSS 实现箭头、三角形、旋转的正方体
  16. PhpStorm 配置 Xdebug调试工具
  17. 小技巧-ios手机fixed不支持问题
  18. (75)Part18【作业】-课程管理(二)-03-发布课程
  19. 怎么实现用户登录功能,提交表单呢?
  20. Linux中函数库文件依赖关系查找网站 www.rpmfind.net

热门文章

  1. java proguard_使用proguard混淆java9代码
  2. matplotlib中的label标签
  3. 【计算机程序设计思想与方法】1 什么是计算?
  4. 如何用好股权激励这把双刃剑?
  5. 按键精灵执行sql语句,获取返回值
  6. Meta推出VR头显,是谁的“福”与“祸”?
  7. Linux下配置ip地址四种方法
  8. 随笔:Qt变色图像三态按钮
  9. HTTP post 请求携带xml格式报文请求接口
  10. 前端常用Utils工具函数库合集