具体实施方式
本发明是一种针对Linux文件系统的性能评估方法,该方法从三个维度来对Linux文件系统的性能进行评估,具体包括:微观读写带宽测试,通过模拟多个IO操作的应用场景对Linux文件系统微观读写带宽进行测试;事务操作吞吐量测试,通过基于随机概率的事务交叉循环操作方式对Linux文件系统的文件操作吞吐量进行测试;宏观典型应用模拟测试,通过基于多线程的可扩展负载模型构建方式对典型应用场景进行模拟从而评估Linux文件系统的真实工作性能。
一、微观读写带宽测试
对于微观读写测试场景的设计主要分为6个步骤。具体描述如下:
步骤1:选取微观测试点。
需要对IO操作的发生规律进行统计,包括读写位置选取、读写文件的存在与否等,并在此基础之上建立相应的存取模型。本发明选取顺序读写、随机读写、倒序读、跳跃读、写与覆盖写、内存映射读写六种存取模型对文件系统的微观读写操作性能进行测试。并针对不同的存取模型了设计了12个微观测试点来从不同的角度对Linux文件系统的读写性能进行测试。如表1所示:
表1
如表1所示,顺序读写存取模型又分为四个测试操作场景,分别为Read、Re-read、Write和Re-write;其中,Read是测试顺序读一个已存在的文件的性能,Re-read是测试对最近读过的一个文件进行再次读取的性能,Write是测试向一个新文件进行数据写入的性能,Re-write是测试向一个已存在的文件进行数据写入的性能。
如表1所示,随机读写存取模型又分为3个测试操作场景,分别为Random-read、Random-write、Random-mix;其中,Random-read是指测试从一个已有文件的随机偏移量处进行数据读取的性能,Random-write是指测试向一个已有文件的随机偏移量处进行数据写入的性能,Random-mix是指测试对文件进行数据读取和数据写入随机混合操作时的性能。
如表1所示,内存映射读写存取模型又分为2个测试操作场景,分别为Mmap-read和Mmap-write;其中,Mmap-read是测试通过内存映射机制对文件进行数据读取的性能,Mmap-write是测试通过内存映射机制对文件进行数据写入的性能。
步骤2:配置测试负载
在测试开始之前,用户需要指定测试的文件大小上下限和数据块大小上下限,其中数据块大小的上限需低于或者等于文件大小的下限。测试的过程则按照所设置的文件和数据块大小的上下限进行双重循环测试,用以反映不同文件大小和不同数据块大小下的读写性能差异。
步骤3:测试初始化
按照本轮测试的测试文件大小完成初始化操作,可包括创建文件、生成文件内容、生成随机节点、生成待写入内容等。不同的测试操作对应的测试初始化操作不同。如顺序读写模型中的Read是测试对已有文件进行顺序读取的性能,需要进行初始测试文件的创建以及测试文件内容的生成。
步骤4:执行单轮测试流程
启动测试监控,按照单轮测试的文件大小和数据块大小执行相应的测试操作。如Read测试是按照本轮测试所设置数据块大小将测试文件的内容顺序读入缓冲区,直至数据读取完毕。
步骤5:统计单轮测试带宽
停止测试监控,统计本轮测试下的单位时间内的读写数据量,并记录相应文件大小和数据块大小。
步骤6:双重循环控制
单轮读写测试执行流程结束后,将检查本轮测试的数据块大小是否达到上限,如果没有达到上限,则将数据块大小增倍,测试文件大小保持不变,转到步骤4启动下一轮测试;如果本轮测试数据块大小已经达到上限,则检查本轮测试文件大小是否达到上限,如果没有达到上限则测试文件大小增倍,并将数据块大小重置为下限,转到步骤4启动下一轮测试;如果本轮测试的数据块大小和测试文件大小都达到了上限,则退出测试循环并删除所有测试文件。
二、事务操作吞吐量测试
事务操作吞吐量测试需要模拟事务批量操作和事务交叉操作来对文件事务操作的真实工作性能进行评估,并提供灵活的测试配置参数与丰富的测试指标帮助用户从多个角度对文件系统事务操作性能进行直观分析。针对事务操作吞吐量的测试场景设计如图1所示,事务操作吞吐量的测试场景包括步骤2中描述的文件批量创建测试操作、步骤3中描述的循环事务交叉测试操作、步骤4中描述的批量文件删除3个阶段。
事务操作吞吐量测试包括5个步骤,具体描述如下:
步骤1:设计测试配置参数
为了提供灵活的测试负载配置机制,需要对文件系统的实际事务操作特点进行分析,从而设计丰富的符合实际负载特点的测试配置参数。如表2所示:
表2
配置参数名称 |
简要描述 |
文件尺寸上下限 |
可设置文件尺寸的最小值和最大值 |
并发文件数量 |
可设置测试文件集的数量 |
子目录数量 |
可设置该参数来配置事务操作的目录环境 |
读操作数据块大小 |
可设置单次读取文件的数据块大小 |
写操作数据块大小 |
可设置单次写入文件的数据块大小 |
Read/Append比例 |
可设置该参数指定读/追加操作的混合比例 |
Create/Delete比例 |
可设置该参数指定创建/删除操作的混合比例 |
事务执行次数 |
可设置测试中需要执行的事务次数 |
步骤2:执行文件批量创建测试操作
该阶段执行的操作包括:启动测试,然后记录测试开始时间start_time,并按照用户所设置的并发文件数量以及文件平均大小顺序批量创建文件,最后记录事务随机交叉循环测试操作开始时间t_start_time。
步骤3:执行事务随机交叉循环测试操作
该阶段以用户设置的事务操作比例为依据随机交叉执行不同的事务操作。在单次事务操作循环中,如图1所示,具体步骤包括:
步骤31:判断是否执行Read/Append操作,若否则转向步骤32,若是则按照Read/Append操作比例产生一个随机数用来判断本次循环是否执行Read操作,如果是,则执行一次Read操作,如果否,则执行一次Append操作;
步骤32:判断是否执行Create/Delete操作,若否则转向步骤33,若是则按照Create/Delete操作比例产生一个随机数用来判断本次循环是否执行Create操作,如果是,则执行一次Create操作,如果否,则执行一次Delete操作;
步骤33:将事务执行次数加1,若事务执行次数达到用户设定的值,则事务随机交叉循环操作阶段结束,进入文件批量删除阶段;否则转向步骤31:。
步骤4:执行批量文件删除测试操作
该阶段执行的操作包括:首先记录事务随机交叉循环测试操作结束时间t_end_time,然后批量删除所有剩余测试文件并记录测试结束时间end_time。
步骤5:统计各项测试指标
为了更加清晰地划分事务批量操作和事务随机交叉循环操作的工作性能,该测试过程的监控点分为四个:测试执行开始时间(start_time)、测试执行结束时间(end_time)、事务随机交叉循环执行开始时间(t_start_time)、事务随机交叉循环执行结束时间(t_end_time);
在运行测试操作的过程中除了记录4个测试监控点之外,还需实时记录和更新相关的文件操作信息,这些信息包括:创建的文件数量、删除的文件数量、文件的读取次数、文件的写入次数。在测试执行过程结束后根据这些信息完成测试指标的统计。事务操作吞吐量测试的测试指标如表3所示:
表3
其中事务总吞吐量是指单位时间内执行的事务次数,计算方式为transactions/t_elapsed(transactions为用户执行的事务执行次数,t_elapsed=t_end_time-t_start_time);t_start_time为所述事务随机交叉循环执行开始时间,t_end_time为所述事务随机交叉循环执行结束时间。文件创建/删除总吞吐量是指单位时间内创建/删除的文件数量,计算方式为files_created/elapsed(files_created为测试过程中所创建的文件数量,elapsed为end_time-start_time)。,start_time为所述测试执行开始时间,end_time为测试执行结束时间;
文件批量创建吞吐量是指单位时间内批量创建的文件数量,计算方式为files_init/interval1(其中files_init为用户指定的并发文件数量,interval1=t_start_time-start_time);文件批量删除吞吐量是指单位时间内批量删除的文件数量,计算方式为deleted/interval2(其中deleted为文件批量删除阶段所删除的文件数量,interval2=end_time-t_end_time)。
交叉操作吞吐量包括事务交叉时读操作吞吐量、事务交叉时追加文件吞吐量、事务交叉时创建文件吞吐量、事务交叉时删除文件吞吐量,事务交叉时读操作吞吐量是指事务交叉时单位时间内的文件读取次数,计算方式为files_read/t_elapsed(其中files_read是指测试过程中读文件的次数);事务交叉时追加文件吞吐量是指事务交叉时单位时间内文件追加次数,计算方式为files_appended/t_elapsed(其中files_appended是指测试过程中写文件的次数);事务交叉时创建文件吞吐量是指事务交叉时单位时间内文件创建个数,计算方式为(files_created-files_init)/t_elapsed(其中files_created是指测试过程中的文件创建总数);事务交叉时删除文件吞吐量是指事务交叉时单位时间内文件删除个数,计算方式为(files_deleted-deleted)/t_elapsed(其中files_deleted是指测试过程中的文件删除总数)。
三、宏观典型应用模拟测试
采用基于多线程的负载模型驱动测试方法对多个典型应用场景进行模拟,从而构造出符合真实应用场景负载特点的测试场景,以帮助用户从宏观应用的角度了解文件系统的真实工作性能。该部分主要分为6个步骤,如下以网页代理应用为例进行描述:
步骤1:分析真实应用的负载特点
网页代理是常见的一种代理程序,网页代理的目的是给客户端提供远程网站上的网页和文件高速缓存,使客户端可以更加快速安全地浏览远程网站。网页代理网站需要时常进行更新,且访问链接速度较快。网页代理的原理可以简单地该书为:用户访问◇网页代理服务器◇目标网站◇返回用户。
分析网页代理的应用场景,可以得出网页代理的负载通常具有如下特点:文件数量较多;所有文件都存放与代理缓存目录下;并发访问数量多;少量文件更新的同时伴随大量的读文件操作。
步骤2:定义仿真线程树
定义仿真线程树指的是指定义模拟测试场景中的线程类型、线程比例和不同线程所执行的操作类型。
根据网页代理应用场景的负载特点,定义了一种线程类型,即网页代理模拟线程,并通过多个并发的网页代理模拟线程用来模拟代理服务器真实应用环境;代理缓存线程执行的操作类型包括文件删除、文件创建、文件内容追加、文件内容读取,且由于网页代理应用中最主要的是读取操作,因此在网页代理仿真线程树中将读取操作次数定义为其他操作次数的5倍。
步骤3:定义测试配置参数
定义可扩展配置测试参数是指根据负载模型仿真线程树、并结合典型应用场景的负载特点定义供用户自定义测试负载的配置参数。
针对网页代理仿真线程树中定义的线程操作种类,并结合网页代理应用的负载特点,将网页代理的测试配置参数定义为:文件初始数量、并发线程个数、平均文件大小、单次追加文件内容的数据量平均大小。
步骤4:定义默认测试负载
默认测试负载定义是指根据应用负载特点,初始化测试配置参数以尽可能真实地对不同典型应用的实际工作负载进行模拟。
根据网页代理应用的负载特点:文件数量较多,所有文件都存放与代理缓存目录下,并发访问数量多,少量文件更新的同时伴随大量的读文件操作;可以定义网页代理的默认测试负载为:文件初始数量8000,并发线程个数100,文件平均大小16KB,单次追加文件内容的数据量平均大小16KB,具体如图2所示。
步骤5:启动测试执行操作
该过程主要是进行测试的实时监控与记录,并进行不同线程的同步控制。网页代理应用的测试操作执行流程如图3所示,具体操作包括:
步骤51:启动主线程测试,并按照指定的初始文件数量、单个目录下的平均文件数量以及平均文件大小分配测试初始文件集。其中文件集的目录分配与文件大小分配均服从gamma分布,gamma分布是一种统计学的连续概率函数,使用该分布函数可有效保证测试数据的随机性和真实性。
步骤52:启动测试监控,并按照测试负载中指定的并发线程个数并开启多个测试线程,用于模仿多个用户对文件服务器进行并发访问的情况;
步骤53:多个网页代理线程并发执行仿真线程树中定义的文件操作,依次为删除文件、创建文件、向文件追加内容、然后连续执行5次随机读操作。
步骤54:在步骤53进行的同时,主线程对所有网页代理线程进行测试监控,直到所有的线程执行完毕。
步骤6:统计测试指标
根据测试过程中实时记录的文件操作信息(如文件的操作次数、读写数据量等)统计模拟测试场景中的文件操作总吞吐量、文件读写总带宽和CPU占用率。
文件操作总吞吐量是指单位时间内所完成的文件操作次数,单位为ops/s。这里的文件操作包括文件创建、删除、读取和写入等多种操作。该项测试指标的值是通过测试过程中完成的文件操作总次数除以测试执行总时间而获得。
文件读写总带宽是指单位时间内的文件数据传输总量,单位为MB/s。该项测试指标是通过测试过程中所有读写操作完成的数据传输量除以测试执行总时间而获得。
这里的CPU占用率是指单个文件操作所占用的CPU时间,单位为us/op。该项指标通过测试执行过程的总CPU占用时间除以从文件操作次数而获得。
以上所述,仅为本发明的较佳实施例而已,当不能以此限定本发明实施范围;故,凡依本发明权利要求书及说明书内容所作的简单的等效变化与修饰,皆应仍属本发明专利涵盖的范围内。