如何使用iozone来统计和对比操作系统底层IO性能差异

iozone是什么

官网链接:http://iozone.org/ 。官网说明了IOzone是一个文件系统基准测试工具。该测试套可以测量各种不同的文件操作,测试出不同读写操作模式下的吞吐量。

可以测试哪些读写模式?

  • 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功能能通过减少实际操作系统调用并在操作系统调用时增加传输块的大小从而增强应用程序的性能。

执行测试

下载源码

地址:http://www.iozone.org/src/current/iozone3_487.tar

解压编译

tar -xvf iozone3_487.tar
cd iozone3_487/src/current
make linux

运行测试

#!/bin/bash

memtotal=`grep MemTotal /proc/meminfo |awk '{print $2}'`
maxsize=$[$memtotal+$memtotal]
for i in $(seq 1 5 )
do
./iozone -a -g $maxsize -Rb iozone$i.xls > iozone$i.output
sleep 120
done

上面的脚本会执行五次iozone的自动模式测试,测试的最大文件为系统内存的两倍大小。测试结果分别保存在文件iozone.xls 和 iozone.output中。

测试结果分析

上面提到过,运行的脚本会收集测试数据到两个文件:一个是表格文件,一个是文本文件。

表格文件示例

在Deepin 桌面操作系统上,可以直接使用wps-office打开,可以看到生成的表格数据很详细,见下图:


a.png

列是文件大小,横是record的大小,中间的值是速度。表格文件可以直接使用各种office软件打开,各位看管做图能力非常强的,直接拿着这个原始数据就可以用了,也省的来回转换数据格式了。

文本文件用法一

文本文件可以使用流行的画图工具gnuplot进行作图,使用方法很简单,iozone测试套中src目录已经自带了画图的脚本,唯一要求的是系统安装gunplot软件。

sudo apt-get install gnuplot 

在iozone的源码目,运行下面的脚本,文本文件作为参数输入:

./Generate_Graphs iozone1.output  

画图效果如下:


b.png

从这个速度的走势图暂时可以看出write的性能表现有两个波峰,分别是cache和buffer的数据。随着测试文件size变大,文件操作就变成了磁盘的操作,吞吐量就会下降的非常快。

上面的只是画出了write的数据走势图,在运行该脚本的窗口直接enter会继续画剩余的各项操作的走势图,录制出动画,让大家感受下。


c.gif

文本文件用法二

使用生成的文本文件和自带的画图脚本,除了可以画出眼花缭绕的走势图之外,好像还没有完全发挥它的最大功效。比如,我想对比两个版本之间数据的差异,去准确地检查相关的性能数据是提升还是下降了,那这个自带的脚本是做不到这一点的。

github.com上查到有现成的工具可以使用,见github:https://github.com/Rovanion/iozone-results-comparator。 使用方法直接参考readme文件即可。

它需要两组或更多组Iozone结果作为输入,脚本工具会使用各种统计方法对它们进行比较。主输出是一个包含表格和图表的HTML页面。还可以生成用于进一步处理的csv数据文件。

我们使用iozone处理性能测试。需求是比较不同版本上的iozone结果。但是事实证明这是一项复杂的任务。要正确地比较数据

  • 在每个Linux内核版本上执行几个(推荐的5)运行
  • 使用统计测试来查找给定参数水平下结果是否不同

该工具使用步骤:

使用该工具之前,我们已经收集了两个系统的iozone的性能数据,每一系统上分别跑了5轮iozone的数据,分别为iozone1.output iozone2.output iozone3.output iozone4.output iozone5.output 文件。

下载

git clone https://github.com/Rovanion/iozone-results-comparator.git 

安装依赖

sudo apt-get install python-scipy python-matplotlib python-pip 
pip install https://github.com/pallets/jinja/zipball/master

复制两个版本的性能数据到目录examples/。两个目录分别命名为basline和target
修改脚本run.sh如下:

BASELINE=$(find ./baseline -name "*.output" | sort)
SET1=$(find ./target -name "*.output" | sort)

运行脚本run.sh

deepin@deepin-PC:~/Documents/iozone-results-comparator/examples$ ./run.sh 
Processing...
Finished
To view results open in your web browser:
file:///home/deepin/Documents/iozone-results-comparator/examples/html_out/index.html

直接打开生成的index.html页面文件,可以很直观的查看到baseline和target的性能差异。工具iozone-results-comparator会对测试数据集进行各种不同的数学运算,如四分位数运算、平均数、几何平均数、区间估计运算等多维度运算,得出多种对比结果,再针对数学运算的出来的结果进行比较。

下面是使用该工具对Deepin15.5 和Deepin15.5 SP2的结果对比图。把Deepin15.5 的数据当做是基线版本,查看Deepin15.5 SP2上的性能数据是否优于基线版本。为了让人一睹该工具统计出的结果真容,我录了一个屏展示一下。

d.gif

从上面结果可以看出,target的IO性能数据要整体好于baseline的数据。target系统的内核版本是Linux deepin-PC 4.15.0-30deepin-generic 。而baseline的内核版本是Linux deepin-PC 4.9.0-deepin9-amd64 。

总结

Iozone是测试文件系统各项指标很好的工具,适合IO性能调优的时候使用,把iozone,Generate_Graphs和iozone-results-comparator结合起来使用,才应该是一个完整的操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,841评论 0 5
  • CPU Cache 今天的CPU比25年前更复杂。那时候,CPU内核的频率与内存总线的频率相当。内存访问只比寄存器...
    blueshadow阅读 2,986评论 0 5
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,727评论 0 30
  • 今天重要三件事:工作、宣贯、煮饭 一、肯定 晚上吃饭小华一脸愁不开心,慢悠悠地挑着菜。 我说:小华,怎么啦...
    如霜雪阅读 209评论 0 3
  • 昨天得知又一个好朋友陷入婚姻危机,结婚还不到一年吧。我说你平时受了委屈怎么不和我们说说的,她说她老公不喜欢她跟...
    路路君阅读 172评论 0 1