磁盘性能基本测试方法

2023-11-08

 

author:skate
time:2011/08/22

 

磁盘性能基本测试方法:


dd if=/dev/zero of=tmp bs=1M count=10  //用dd命令测试瞬间写的能力

iozone -a -i 1 -i 0 -c -g 5M -n 1M   //可以更详细的测试磁盘的详细性能


iozone使用比较简单

 

下载安装:

官方地址:http://www.iozone.org/

http://www.iozone.org/下载最新版
# wget http://www.iozone.org/src/current/iozone3_308.tar
tar xf iozone3_308.tar && cd iozone3_308/src/current/
make
在列出的平台中选择你的目标平台,比如linux
make linux (32位) 或 make linux-ia64 (64位),更详细参数请直接在当前目录运行make

 

使用:
[root@localhost tmp]# cd iozone3_308/src/current/
[root@localhost current]# ls
Changes.txt  fileop.c             gengnuplot.sh  gnuplotps.dem  iozone.c              libasync.c  libbif.o        report.pl
client_list  fileop_linux-ia64.o  gnu3d.dem      Gnuplot.txt    iozone_linux-ia64.o   libasync.o  makefile        spec.in
fileop       Generate_Graphs      gnuplot.dem    iozone         iozone_visualizer.pl  libbif.c    read_telemetry  write_telemetry
[root@localhost current]# pwd
/tmp/iozone3_308/src/current

[root@localhost current]# ./iozone -a -i 1 -i 0 -i 2 -i 8 -c -g 1500m -n 10M -Rab /tmp/tmpfs-iozone.xls -f /tmp/cc
        Iozone: Performance Test of File I/O
                Version $Revision: 3.308 $
                Compiled for 64 bit mode.
                Build: linux-ia64

        Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
                     Al Slater, Scott Rhine, Mike Wisner, Ken Goss
                     Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
                     Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
                     Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy,
                     Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root.

        Run began: Wed Aug 24 11:16:38 2011

        Auto Mode
        Include close in write timing
        Using maximum file size of 1536000 kilobytes.
        Using minimum file size of 10240 kilobytes.
        Excel chart generation enabled
        Auto Mode
        Command line used: ./iozone -a -i 1 -i 0 -i 2 -i 8 -c -g 1500m -n 10M -Rab /tmp/tmpfs-iozone.xls -f /tmp/cc
        Output is in Kbytes/sec
        Time Resolution = 0.000001 seconds.
        Processor cache size set to 1024 Kbytes.
        Processor cache line size set to 32 bytes.
        File stride size set to 17 * record size.
                                                            random  random    bkwd   record   stride                                  
              KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
           10240       4  220456 1111942  2012183  2041838 1696756 1059496                                                         
           10240       8  637057 1301473  2201214  2154831 1886504 1104280             
    
     ......
     ......

    
iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中{AIX, BSDI, HP-UX, IRIX, FreeBSD, Linux, OpenBSD, NetBSD, OSFV3, OSFV4, OSFV5, SCO OpenServer, Solaris, MAC OS X, Windows (95/98/Me/NT/2K/XP)}文件系统的读写性能。

可以测试 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread,
mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。


测试参数: -i //用来指定测试内容.

  0=write/rewrite
  1=read/re-read
  2=random-read/write
  3=Read-backwards
  4=Re-write-record
  5=stride-read
  6=fwrite/re-fwrite
  7=fread/Re-fread,
  8=random mix
  9=pwrite/Re-pwrite
  10=pread/Re-pread
  11=pwritev/Re-pwritev,
  12=preadv/Re-preadv

-R 产生execl格式的输出日志。
-b 将产生二进制的execl的日志文件名。
-s 测试的文件大小。
-r 文件块大小。
-a 在希望的文件系统上测试,不过只有-a的话会进行全面测试,要花费很长时间,最好用-i指定测试范围。
-g 设置自动模式下,指定最大测试文件大小。
-n 设置自动模式下,指定最小测试文件大小。
-f 指定测试文件,完成后会自动删除(这个文件必须指定你要测试的那个硬盘中)。
-F 指定临时文件组
-C 显示每个节点的吞吐量。
-t 并发数
-c 测试包括文件的关闭时间
-q 指定最大记录大小 例如 -q 512K
-y 指定最小记录大小 例如 -y 512K


常用测试命令:

./iozone -a -i 1 -i 0 -i 2 -i 8 -c -g 1500m -n 10M -Rb /tmp/tmpfs-iozone.xls -f /tmp/cc
测试磁盘的 write/rewrite,read/re-read,random-read/write,random mix,采用自动模式最大文件1500m,最小文件10m,生成文件xls文件
测试的文件是 /tmp/cc


测试小文件
./iozone -a -s 512m -y 1k -q 8k -b minfile_test.xls

 

说明:
通常情况下,测试的文件大小要求至少是系统cache的两倍以上,这样,测试的结果才是真是可信的。如果小于cache的两倍,
测试文件的读写都将是cache的速度,测试的结果不是很准确。

 


解释测试报告:
"Writer report"
        "4"  "8"  "16"  "32"  "64"  "128"  "256"  "512"  "1024"  "2048"  "4096"  "8192"  "16384"
"10240"   88829  624960  681851  678501  714591  672098  738756  717492  722598  649907  620942  575243
"20480"   0  0  0  0  662247  689330  696128  652810  648758  596403  614643  24304  539976
"40960"   0  0  0  0  458936  478091  608266  621396  604995  534391  551413  528189  582563
"81920"   0  0  0  0  486758  517378  514005  546851  544145  501970  488940  483749  458137
"163840"   0  0  0  0  186525  225523  199791  206751  144603  84872  189036  188518  178771
"327680"   0  0  0  0  147807  126524  104234  127710  118223  110236  135527  132250  147369


左侧一列是测试文件大小(Kbytes),最上边一行是记录大小,中间数据是测试的传输速度,拿第一行测试数据为例
测试文件为10240k,以记录大小为4k传输,传输速度是88829Kbytes/s

 

 

 

关于各种测试的定义


Write:
测试向一个新文件写入的性能。当一个新文件被写入时,不仅仅是那些文件中的数据需要被存储,还包括
那些用于定位数据存储在存储介质的具体位置的额外信息。这些额外信息被称作“元数据”。它包括目录信
息,所分配的空间和一些与该文件有关但又并非该文件所含数据的其他数据。拜这些额外信息所赐,Write
的性能通常会比Re-write的性能低。

Re-write:
测试向一个已存在的文件写入的性能。当一个已存在的文件被写入时,所需工作量较少,因为此时元数据已
经存在。Re-write的性能通常比Write的性能高。

Read: 测试读一个已存在的文件的性能。

Re-Read:
测试读一个最近读过的文件的性能。Re-Read性能会高些,因为操作系统通常会缓存最近读过的文件数据。
这个缓存可以被用于读以提高性能。

Random Read:
测试读一个文件中的随机偏移量的性能。许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,
磁盘数量,寻道延迟和其他。

Random Write:
测试写一个文件中的随机偏移量的性能。同样,许多因素可能影响这种情况下的系统性能,例如:操作系统缓存
的大小,磁盘数量,寻道延迟和其他。

Random Mix:
测试读写一个文件中的随机偏移量的性能。同样,许多因素可能影响这种情况下的系统性能,例如:操作系统缓
存的大小,磁盘数量,寻道延迟和其他。这个测试只有在吞吐量测试模式下才能进行。每个线程/进程运行读或写
测试。这种分布式读/写测试是基于round robin 模式的。最好使用多于一个线程/进程执行此测试。

Backwards Read:
测试使用倒序读一个文件的性能。这种读文件方法可能看起来很可笑,事实上,有些应用确实这么干。MSC Nastran

是一个使用倒序读文件的应用程序的一个例子。它所读的文件都十分大(大小从G级别到T级别)。
尽管许多操作系统使用一些特殊实现来优化顺序读文件的速度,很少有操作系统注意到并增强倒序读文件的性能。

Record Rewrite:
测试写与覆盖写一个文件中的特定块的性能。这个块可能会发生一些很有趣的事。如果这个块足够小(比CPU数据
缓存小),测出来的性能将会非常高。如果比CPU数据缓存大而比TLB小,测出来的是另一个阶段的性能。如果比此
二者都大,但比操作系统缓存小,得到的性能又是一个阶段。若大到超过操作系统缓存,又是另一番结果。

Strided Read:
测试跳跃读一个文件的性能。举例如下:在0偏移量处读4Kbytes,然后间隔200Kbytes,读4Kbytes,再间隔200Kbytes,
如此反复。此时的模式是读4Kbytes,间隔200Kbytes并重复这个模式。这又是一个典型的应用行为,文件中使用了数
据结构并且访问这个数据结构的特定区域的应用程序常常这样做。许多操作系统并没注意到这种行为或者针对这种类
型的访问做一些优化。同样,这种访问行为也可能导致一些有趣的性能异常。一个例子是在一个数据片化的文件系统
里,应用程序的跳跃导致某一个特定的磁盘成为性能瓶颈。

Fwrite:
测试调用库函数fwrite()来写文件的性能。这是一个执行缓存与阻塞写操作的库例程。缓存在用户空间之内。如果一
个应用程序想要写很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统调
用时增加传输块的大小来增强应用程序的性能。这个测试是写一个新文件,所以元数据的写入也是要的。

Frewrite:
测试调用库函数fwrite()来写文件的性能。这是一个执行缓存与阻塞写操作的库例程。缓存在用户空间之内。如果一个
应用程序想要写很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统调用时
增加传输块的大小来增强应用程序的性能。这个测试是写入一个已存在的文件,由于无元数据操作,测试的性能会高些。

Fread:
测试调用库函数fread()来读文件的性能。这是一个执行缓存与阻塞读操作的库例程。缓存在用户空间之内。如果一个
应用程序想要读很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统调用
时增加传输块的大小来增强应用程序的性能。

Freread:
这个测试与上面的fread类似,除了在这个测试中被读文件是最近才刚被读过。这将导致更高的性能,因为操作系统缓存
了文件数据。

几个特殊测试:
Mmap:许多操作系统支持mmap()的使用来映射一个文件到用户地址空间。映射之后,对内存的读写将同步到文件中去。这对
一些希望将文件当作内存块来使用的应用程序来说很方便。一个例子是内存中的一块将同时作为一个文件保存在于文件系
统中。
mmap文件的语义和普通文件略有不同。如果发生了对内存的存储,并不是立即发生相应的文件I/O操作。使用MS_SYNC 和
MS_ASYNC标志位的msyc()函数调用将控制内存和文件的一致性。调用msync()时将MS_SYNC置位将强制把内存里的内容写
到文件中去并等待直到此操作完成才返回。而MS_ASYNC置位则告诉操作系统使用异步机制将内存刷新到磁盘,这样应用
程序可以直接返回而不用等待此操作的完成。这个测试就是测量使用mmap()机制完成I/O的性能。

Async I/O:

许多操作系统支持的另外一种I/O机制是POSIX 标准的异步I/O。本程序使用POSIX标准异步I/O接口来完成此
测试功能。例如: aio_write(), aio_read(), aio_error()。这个测试测量POSIX异步I/O机制的性能。

 

 

 

-------end------

 

 

 


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

磁盘性能基本测试方法 的相关文章

  • 用 t 个随机数生成位向量

    我想生成一个数组 向量v大小的p with t那些和p t零 的位置t ones must是随机的 这是我迄今为止编写的解决方案 但我不确定它是否是最有效的解决方案 另外我从来没用过random device or mt19937 找到他们
  • 范围之间的随机日期时间 - 不统一输出

    我实现了下面的 RandomDate 但我总是不断获取接近 From 日期的值 我可能在这里错过了一些东西 public static DateTime GetRandomDate DateTime from DateTime to var
  • 优化缓慢的 ORDER BY RAND() 查询

    我有一个正在使用的查询ORDER BY RAND 但这需要太长时间 而且随着数据的增长 情况会变得更糟 该查询连接两个表 返回 5 个随机产品以及每个产品的随机图像 表 1 产品 product id pk auto inc name de
  • srand 在 C++ 中太慢,它返回相同的数字

    我只是想拥有简单的 RndInt limit 函数 该函数将返回以限制作为限制的随机数 cout lt lt Enter higher limit of random range cin gt gt limit while limit 0
  • C++11:如何使用 设置种子

    我正在练习随机库 这是 C 11 的新功能 我编写了以下最小程序 include
  • 使用随机数生成引擎

    我正在尝试使用兰德 字节 https www openssl org docs crypto rand htmlOpenSSL 的 API 但我想尝试使用各种随机数生成引擎 在 OpenSSL 中是否有推荐的生成随机字节并添加熵的方法 我在
  • 从android中的drawable文件夹中随机生成图像

    安卓版本 4 2我正在开发一个安卓应用程序 我需要从可绘制文件夹中随机生成图像 在我的绘图中 我有 45 张具有不同名称的图像 我的xml代码是
  • data.table 样本,概率存储在列中

    我有一个数据表 其中存储在列中的离散分布的概率 例如 dt lt data table p1 c 0 5 0 25 0 1 p2 c 0 25 0 5 0 1 p3 c 0 25 0 25 0 8 我想创建一个新的随机变量列 使用同一行中的
  • 随机数独生成

    我正在编写一个函数 该函数应该为模拟项目生成随机数独谜题 该函数将要生成的单元格数量作为参数 然后生成单元格索引和要放入这些单元格中的数字 我在生成单元格索引时遇到问题 我不是编程专家 我找不到一个好的例程来生成索引并检查是否两次或更多次是
  • random.seed():它有什么作用?

    我有点困惑什么random seed 在 Python 中是这样的 例如 为什么下面的试验会 一致地 做他们所做的事情 gt gt gt import random gt gt gt random seed 9001 gt gt gt ra
  • Applescript:修剪空格和回车线

    我编写了一个 AppleScript 它从用逗号分隔的文本文件中返回一个随机字符串 set some file to Macintosh HD Users Zade Library Application Support Notationa
  • `/dev/urandom` 适合模拟目的吗?

    似乎在类 Unix 系统中使用纯 C fread from dev urandom是提取高质量随机字节的最简单方法 我需要运行一个每秒需要大约 10k 32 位随机数的模拟 并且可能会运行几天 是 dev urandom可以用于此目的吗 当
  • 使用 VBA 从分布生成随机数到内存

    我想从 VBA Excel 2007 中选定的分布生成随机数 我目前正在使用带有以下代码的分析工具库 Application Run ATPVBAEN XLAM Random A B C D E F Where A how many var
  • 如何在 PHP 中随机组合两个数组

    如何将两个数组组合成一个数组 我请求的方式是第三个组合数组应包含一个数组中的一个值和另一个数组中的下一个值 依此类推 或者 它可以是随机的 前任 arr1 1 2 3 4 5 arr2 10 20 30 40 50 和组合数组 arr3 1
  • python随机字典键,并访问它[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 import random Cards Spade 2 3 4 5 6 7 8 9 10 Jack Queen King
  • Python - randrange() 的空范围 (0,0, 0) 和 ValueError("randrange() 的空范围 (%d,%d, %d)" % (istart, istop, width))

    当我运行这个程序时 python 3 3 1 import random import time from random import randrange print print I am thinking of a person time
  • hashlib 和 urandom 哪个更随机?

    我正在和一个朋友一起开发一个项目 我们需要生成随机哈希 在我们有时间讨论之前 我们都提出了不同的方法 并且因为他们使用不同的模块 我想问你们大家什么会更好 如果有这样的事情的话 hashlib sha1 str random random
  • 如何使用 NumPy/SciPy 进行简单的高斯混合采样和 PDF 绘图?

    我添加三个正态分布以获得一个新的分布 如下所示 如何在python中根据这个分布进行采样 import matplotlib pyplot as plt import scipy stats as ss import numpy as np
  • 如何创建随机矩阵?

    我想创建一个随机矩阵 如 100 50 25 22 75 195 我的代码是 n 1 r 2 e 3 sup for i in range n sup1 for c in range r sup0 list random randint 2
  • Random.Next() 的 Actionscript 3 实现

    我想知道 AS 3 中是否有很好的 Random Next 实现 基本上想要生成一系列给定种子的随机数 有时 最小和最大限制 类似于 C System Random 类 Random random new Random return ran

随机推荐

  • Python异步请求:处理并发任务的结果

    Python异步请求 处理并发任务的结果 处理并发任务的结果 在异步编程中 处理并发任务的结果可能会有所不同 以下是几种常见的处理方式 使用asyncio as completed asyncio as completed 函数返回一个迭代
  • 场景题之最快返回结果

    场景题之最快返回结果 问题描述 输入中文 最快从百度翻译 谷歌翻译 有道翻译获取结果返回 代码实现 思路 采用CompletableFuture实现 多个CompletableFuture可以串行执行 也可以并行执行 其中anyOf 方法只
  • 插入排序(Insertion-Sort)-- 初级排序算法

    1 插入排序 Insertion Sort 插入排序 Insertion Sort 的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 算法描述 一般来说 插入
  • doGet和doPost、Cookie和Session的原理及区别、Spring框架

    一 doGet和doPost 1 doGet GET调用用于获取服务器信息 并将其做为响应返回给客户端 当经由Web浏览器或通过HTML JSP直接访问Servlet的URL时 一般用GET调用 public class doGet ser
  • 为分类数据添加计数表(R语言实现)

    为分类数据添加计数表 R语言实现 在数据分析和统计学中 我们经常需要对分类变量进行计数 并以表格的形式展示分类的频数 R语言是一种功能强大的数据分析工具 提供了各种函数和包来处理和可视化数据 在本文中 我将向您展示如何使用R语言为划分后的分
  • Android Studio相关知识

    一 如何更新android studio 打开Help gt Check For Updates 或 打开Settings gt 搜索Updates 找到按钮Check Now 二 如何更新android studio的adb 方案一 直接
  • 【SMD & NSMD】

    正确的PCB焊盘设计对于有效地将元件焊接到电路板至关重要 对于裸焊盘组装 有两种常见的焊接方法 阻焊层定义 SMD 与非阻焊层定义 NSMD 每种方法都有自己的特点和优势 SMD Solder Mask Defined Pad 是由阻焊层来
  • Web3与智能合约交互实战

    写在前面 在最初学习以太坊的时候 很多人都是自己创建以太坊节点后 使用geth与之交互 这种使用命令行交互的方法虽然让很多程序员感到兴奋 黑客帝国的既视感 但不可能指望普通用户通过命令行使用Dapp 因此 我们需要一种友好的方式 比如一个w
  • 计算机物联网软件工程,关于计算机物联网的应用分析

    龙源期刊网 http doc 100lw com 关于计算机物联网的应用分析 作者 曹俊娜 来源 电子技术与软件工程 2016年第03期 摘要随着智能设备的不断推出和移动互联网的发展 计算机物联网技术越来越被人们所熟知 物联网技术区别于传统
  • 给网站、博客文章添加阅读次数统计,我用两行代码 搞定计数

    本文转载于不蒜子 一 安装脚本 必选 要使用统计次数必须在页面中引入busuanzi js 目前最新版如下 任何类型的个人站点使用 如果你是用的hexo 打开themes 你的主题 layout partial footer ejs添加上述
  • ! [rejected] main -> main (fetch first) error: failed to push some refs to

    rejected main gt main fetch first error failed to push some refs to 报错信息 To github com raxx xxar git rejected main gt ma
  • 快速WordPress个人博客并内网穿透发布到互联网

    快速WordPress个人博客并内网穿透发布到互联网 文章目录 快速WordPress个人博客并内网穿透发布到互联网 我们能够通过cpolar完整的搭建起一个属于自己的网站 并且通过cpolar建立的数据隧道 从而让我们存放在本地电脑上的网
  • @EnableCircuitBreaker found, but there are no implementations. Did you forget to include a starter?

    java lang IllegalStateException Annotation EnableCircuitBreaker found but there are no implementations Did you forget to
  • ChatGPT vs. Bing vs. Bard

    随着 2022 年 ChatGTP 的推出 人工智能聊天机器人的世界突然走上了一条新道路 如今 密切关注 AI 的人都知道 不同公司推出了几款产品 从谷歌拥有自己的 Bard AI 到微软发布新的 Bing AI Chat 再到 OpenA
  • 6.6开发社区搜索功能

    业务层 新建ElasticsearchService类 package com nowcoder community service import com nowcoder community dao elasticsearch Discu
  • 【电源】DC-DC电路中的伏秒平衡原理

    上一篇我们科普了开关电源 在提到的开关电源中我们常用也就DC DC电路 所以从今天开始将进入到我们的DC DC电路专题 在DC DC电路应用中 我们很多工程师比较难理解BUCK BOOST的升降压区别 或者原理看完就忘又区分不开 那是因为没
  • window子系统使用及问题汇总

    window子系统使用及问题汇总 安装 配置子系统的资源大小 切换默认源 安装docker 解决wsl无法使用systemctl的问题 子系统访问windows系统中的文件 window访问子系统的文件 总结 最近在使用windows上的d
  • nginx vue2+webpack 和 vue3+vite 配置二级目录访问

    我们开发中会遇到这样的需求 让我们用服务器nginx部署一个用域名的二级目录来访问项目 https xxx 二级目录 来放访问项目 目录 思路 1 nginx配置 vue2 和 vue3配置的nginx相同 2 vue2 webpack的配
  • 如何在IDEA设置Java类和方法的注释模板?

    如何在IDEA设置Java类和方法的注释模板 1 类的注释模板设置 首先我们打开IDEA软件 进行如下操作 File gt Settings gt Editor gt File and Code Templates 设置好后 当我们再次创建
  • 磁盘性能基本测试方法

    author skate time 2011 08 22 磁盘性能基本测试方法 dd if dev zero of tmp bs 1M count 10 用dd命令测试瞬间写的能力 iozone a i 1 i 0 c g 5M n 1M