一种基于Linux平台的硬盘IO请求延时模拟判断方法及系统与流程

文档序号:15850671发布日期:2018-11-07 09:50阅读:438来源:国知局
一种基于Linux平台的硬盘IO请求延时模拟判断方法及系统与流程

本发明涉及服务器的技术领域,具体涉及一种基于linux平台的硬盘io请求延时模拟判断方法及系统。

背景技术

硬盘技术在服务器领域的应用中,针对高负载的i/o请求处理能力越来越强,能够稳定并且高效的处理高并发的数据i/o请求。但是在实际应用当中,除了这种高并发的需求外,还有一种就是i/o请求随机,且i/o请求的也比较小的情况,在面对这种应用时,硬盘将频繁的从节能状态,活跃状态和空闲状态中转换,每一次状态的转换硬盘内部都将消耗一定的响应时间,这种硬盘内部处理自身状态转换的效率高低,能够反应硬盘随机i/o的处理能力。

在硬盘性能和压力测试中,我们通常采用的做法就是对硬盘持续发送顺序的/随机的不同blocksize的数据块的r/w请求,以此来确认硬盘在顺序的/随机的不同的blocksize下的r/w的性能和稳定性。在部分客户实际应用中,客户的i/o请求的并发量很小,而且请求的数据也比较小,客户在实际应用中发现硬盘的svctm(averageservicetime(inmilliseconds))会存在随机的变大的情况。产生此问题的主要原因是因为硬盘自身节能控制机制(powermode)产生的,硬盘内部默认的节能控制机制(powermode)是enable的状态,即当硬盘在没有i/o请后时,空闲(idle)一段时间后,硬盘将自动进入节能控制机制(powermode),即硬盘关闭绝大部分功能,只保留部分必要的功能,以此来降低硬盘的功耗。当再次有i/o请求进入的时候,硬盘将会由空闲(idle)状态转为活跃(active)状态,然后开始处理数据。而在这一过程中,硬盘处理i/o请求的能可以通过两个指标来反应:1.svctm:平均每次设备i/o请求的服务时间,反应了磁盘的i/o处理能力和当前的负载情况,在实际测试中,高并发的情况下,当负载占满时,svctm在20-30左右浮动。因此随机性的请求中,svctm合理值也应该是在30以内;2.await:平均每次设备i/o操作的等待时间,即硬盘响应延时时间(寻道时间+磁头旋转延时)+svctm服务时间。

基于上述,本领域亟需一种根据上述指标判断硬盘延时响应能力的技术方案。



技术实现要素:

基于上述问题,本发明提出了一种基于linux平台的硬盘io请求延时模拟判断方法及系统,通过模拟硬盘出现io延时的情况,判断硬盘延时的响应能力,据此根据客户需求就能有效的提交识别风险,减少客户端问题发生。

本发明提供如下技术方案:

一方面,本发明提供了一种基于linux平台的硬盘io请求延时模拟判断方法,包括:

步骤101,开启硬盘节能模式;

步骤102,延时模拟:模拟随机i/o请求大小,硬盘扇区大小随机测试;硬盘顺序遍历测试,硬盘随机测试,将测试硬盘i/o请求的随机分配给不同的硬盘;i/o方式遍历;

步骤103,延时判断:发送随机i/o请求至硬盘,间隔时间大于预定间隔时间后再发送下一个i/o请求,硬盘进入深度空闲状态然后再进入激活状态,通过监测每次i/o请的平均等待时间与每次i/o请求的服务时间差值获得硬盘的延时时间浮动范围。

其中,所述i/o方式遍历为随机读。

其中,所述发送随机i/o请求至硬盘具体为:自动执行sleep命令进行等待,硬盘进入深度空闲状态,将随机i/o以及sleep命令写入循环执行实现硬盘延时模拟,若svctm接近await,则i/o几乎没有等待时间;若await远大于svctm,则i/o队列过长,响应时间变慢。

其中,所述预定间隔时间为2min。

另外,本发明还提供了一种基于linux平台的硬盘io请求延时模拟判断系统,所述系统包括:

控制模块,用于开启硬盘节能模式;

模拟模块,用于延时模拟:模拟随机i/o请求大小,硬盘扇区大小随机测试;硬盘顺序遍历测试,硬盘随机测试,将测试硬盘i/o请求的随机分配给不同的硬盘;i/o方式遍历;

判断模块,用于延时判断:发送随机i/o请求至硬盘,间隔时间大于预定间隔时间后再发送下一个i/o请求,硬盘进入深度空闲状态然后再进入激活状态,通过监测每次i/o请的平均等待时间与每次i/o请求的服务时间差值获得硬盘的延时时间浮动范围。

其中,所述i/o方式遍历为随机读。

其中,所述发送随机i/o请求至硬盘具体为:自动执行sleep命令进行等待,硬盘进入深度空闲状态,将随机i/o以及sleep命令写入循环执行实现硬盘延时模拟,若svctm接近await,则i/o几乎没有等待时间;若await远大于svctm,则i/o队列过长,响应时间变慢。

其中,所述预定间隔时间为2min。

本发明提供了一种基于linux平台的硬盘io请求延时模拟判断方法及系统,开启硬盘节能模式,模拟随机i/o请求大小,硬盘扇区大小随机测试,将测试硬盘i/o请求的随机分配给不同的硬盘;i/o随机读方式遍历,通过监测每次i/o请的平均等待时间与每次i/o请求的服务时间差值获得硬盘的延时时间浮动范围。本发明针对硬盘在powermodedisable和enable时,根据其特性进行fio的压力测试,判断硬盘的延时响应能力,有效的提交识别风险,减少客户端问题发生。

附图说明

图1是本发明的方法流程图;

图2是本发明的系统结构框图;

图3是本发明的随机i/o测试过程图;

图4是本发明的硬盘顺序遍历测试过程图;

图5a-5b是本发明的延时判断过程图。

具体实施方式

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

本发明一种基于linux平台的硬盘io请求延时模拟判断方法及系统,基于linux平台,通过硬盘工具对硬盘进行powermodedisable和enable进行系列i/o测试,并从数据中,找出硬盘的svctm响应时间,用以判断硬盘的延时响应能力。

基于上述,一方面,本发明的实施方式提供了一种基于linux平台的硬盘io请求延时模拟判断方法,附图1是本发明的方法流程图,包括:

步骤101,开启硬盘节能模式;

节能模式打开/关闭:硬盘工作方式,分为节能模式打开,节能模式关闭两种情况:

节能模式关闭:此种模式下,硬盘将时刻保持active状态,此时,优点是性能最高,无延时。缺点是功耗也更高。

节能模式打开:此种模式下,当有i/o请求时,硬盘才进入active状态。没有i/o请求时,以希捷硬盘为例,硬盘默认100ms进入idle_a状态(很小部分功能停止工作),如果2min后仍然没有i/o请求,则硬盘进入idle_b状态(部分功能停止工作)。当有i/o请求时,硬盘则需要从idle_b的休眠状态中唤醒,idle_a唤醒时间为100ms,idle_b唤醒时间为400ms,唤醒后硬盘进入active状态完成i/o请求。这个过程中的唤醒所需要的时间,即为硬盘自身内部响应时间,而为真正的i/o处理时间,也即为延时时间。从节能方面考虑,硬盘默认节能模式都是打开状态的。此时,优点是节能。缺点是存在轻微延时响应。

步骤102,延时模拟:模拟随机i/o请求大小,硬盘扇区大小随机测试;硬盘顺序遍历测试,硬盘随机测试,将测试硬盘i/o请求的随机分配给不同的硬盘;i/o方式遍历;

由于本实施例主是进行延时模拟,所以只考虑当硬盘处于节能模式打开的情况。根据硬盘节能模式下的特点,我们在一般情况下的的fio测试上进行参数调即可实现模拟硬盘频繁出现延时的现象。

一般情况下,我们的硬盘fio测试的主要实现特点为:

a)按设定时长度进行测试

b)按设定容量进行测试

c)blocksize固定为硬盘扇区(512b)的整数倍数进行测试,如:1k,4k,8k,16k..256k,512k

d)硬盘顺序遍历测试

e)i/o方式遍历,如:read,randread,write,randwrite

因此根据硬盘节能模式下的特点,我们可以将上面的步骤进行如下修改来实现硬盘延时的模拟:

a)按设定时长度进行测试

取消此项,因为实际应用场景考虑,客户的随机i/o请一定是时间不固定的。

b)按设定容量进行测试

取消此项,因为实际应用场景考虑,客户的随机i/o请一定是容量不固定的。

c)blocksize固定为硬盘扇区(512b)的整数倍数进行测试,如:1k,4k,8k,16k..256k,512k将固定的blocksize调整为随机的blocksize,因为客户的请求一定是随机的,因此我们也模拟这种随机的i/o请求大小的情况。实现方案为通过随机数来获取范围内的随机值,做为i/o请求的大小,让硬盘来进行处理,以1k-1024k范围随机数为例(如附图3所示):上例为1秒间隔内打印一个1-1024内的随机数,通过两次的执行可以看到,即随机的blocksize。

d)硬盘顺序遍历测试

为了使测试硬盘i/o请求的随机的分配给不同的硬盘,使得硬盘能够在不同的时间段内随机的去响应不同的i/o请求,所以我们也采用随机数的原理,使硬盘随机的出现在测试中,以sdb-sdk10个硬盘为例,上一步的基础上增加硬盘的随机(如附图4所示):上例为1秒输出一对硬盘和随机bs的例子,可以看出,我们可以实现“随机硬盘”+“随机bs(blocksize)”的组合了。

e)i/o方式遍历,如:read,randread,write,randwrite

根据硬盘的特点,为了提高硬盘的读的能力,硬盘本都是带有高速cache的,cache的工作原理为,当有数据写入时,数据会先进入硬盘的高速cache中,然后将再数据由缓存写入到硬盘的物理存储中,这个过程中,当硬盘高速cache接收完外部数据写入请求时,即会发送写入完成信息。因此,写动作不合适去获取硬盘延时的测试。read为顺序写,硬盘寻道和磁头旋转基本上都也都在磁碟上顺序的动作,因此也不利于产生较大的延时。而randread,将使寻道和磁头旋转产生一定的压力,覆盖了整个硬盘物理存储区域,此种情况下会产生更多换延时情况,因此,此处只保留randread,其它i/o方式取消。

综上,模拟硬盘延时的三个条件为:bs随机,硬盘随机,randread。

步骤103,延时判断:发送随机i/o请求至硬盘,间隔时间大于预定间隔时间后再发送下一个i/o请求,硬盘进入深度空闲状态然后再进入激活状态,通过监测每次i/o请的平均等待时间与每次i/o请求的服务时间差值获得硬盘的延时时间浮动范围。

根据硬盘节点能模式的特点:

从上面的特点看,idle_a为浅度睡眠,idle_b为深度睡眠。idle的唤醒时间更长,因此我们主要模拟idle_b,active两个状态的转化即可得到一个400ms左右的延时。从脚本设计上,我们应该先给硬盘一个随机的i/o请求,间隔时间大于2min后再给下一个i/o请求,使得硬盘能够有足够的时间进入idle_b状态,然后再进入active。为了达到这处目的,我们暂定两次i/o间隔时间为3min。实现如附图5a所示:从附图5a可以看出,有10个fioprocess在进行,每个进程的bs都是随机的。同时,我们可以通过iostat命令监控硬盘的i/o状态,如附图5b所示:从附图5b可以看出,出了i,j两个盘没有随机到i/o请求外,从b-k其它盘都有读写状态,说明其它盘已经进入了active状态。上面的动作完成后自动执行“sleep180“命令来实现180秒的待待命令,使得硬盘进入idle_b状态。然后将上面的“随机i/o”+“sleep180”写入循环中,即可实现了硬盘延时的模拟方法。如果svctm比较接近await,说明i/o几乎没有等待时间(i/o等待时间很短,可以忽略不计);如果await远大于svctm,说明i/o队列太长,应用得到的响应时间变慢。从数据分析上,我们可以通过iostat监测到的await和svctm的差值(每次i/o请的平均等待时间-每次i/o请求的服务时间)即可判断出硬盘的延时时间在什么范围内浮动了,对比硬盘spec,即可得出硬盘延时的合理性。

本发明提供了一种基于linux平台的硬盘io请求延时模拟判断方法,开启硬盘节能模式,模拟随机i/o请求大小,硬盘扇区大小随机测试,将测试硬盘i/o请求的随机分配给不同的硬盘;i/o随机读方式遍历,通过监测每次i/o请的平均等待时间与每次i/o请求的服务时间差值获得硬盘的延时时间浮动范围。本发明针对硬盘在powermodedisable和enable时,根据其特性进行fio的压力测试,判断硬盘的延时响应能力,有效的提交识别风险,减少客户端问题发生。

另一方面,本发明的实施方式提供了一种基于linux平台的硬盘io请求延时模拟判断系统,附图2是本发明的系统结构框图,所述系统包括:

控制模块201,用于开启硬盘节能模式;

节能模式打开/关闭:硬盘工作方式,分为节能模式打开,节能模式关闭两种情况:

节能模式关闭:此种模式下,硬盘将时刻保持active状态,此时,优点是性能最高,无延时。缺点是功耗也更高。

节能模式打开:此种模式下,当有i/o请求时,硬盘才进入active状态。没有i/o请求时,以希捷硬盘为例,硬盘默认100ms进入idle_a状态(很小部分功能停止工作),如果2min后仍然没有i/o请求,则硬盘进入idle_b状态(部分功能停止工作)。当有i/o请求时,硬盘则需要从idle_b的休眠状态中唤醒,idle_a唤醒时间为100ms,idle_b唤醒时间为400ms,唤醒后硬盘进入active状态完成i/o请求。这个过程中的唤醒所需要的时间,即为硬盘自身内部响应时间,而为真正的i/o处理时间,也即为延时时间。从节能方面考虑,硬盘默认节能模式都是打开状态的。此时,优点是节能。缺点是存在轻微延时响应。

延时模块202,用于延时模拟:模拟随机i/o请求大小,硬盘扇区大小随机测试;硬盘顺序遍历测试,硬盘随机测试,将测试硬盘i/o请求的随机分配给不同的硬盘;i/o方式遍历;

由于本实施例主是进行延时模拟,所以只考虑当硬盘处于节能模式打开的情况。根据硬盘节能模式下的特点,我们在一般情况下的的fio测试上进行参数调即可实现模拟硬盘频繁出现延时的现象。

一般情况下,我们的硬盘fio测试的主要实现特点为:

a)按设定时长度进行测试

b)按设定容量进行测试

c)blocksize固定为硬盘扇区(512b)的整数倍数进行测试,如:1k,4k,8k,16k..256k,512k

d)硬盘顺序遍历测试

e)i/o方式遍历,如:read,randread,write,randwrite

因此根据硬盘节能模式下的特点,我们可以将上面的步骤进行如下修改来实现硬盘延时的模拟:

a)按设定时长度进行测试

取消此项,因为实际应用场景考虑,客户的随机i/o请一定是时间不固定的。

b)按设定容量进行测试

取消此项,因为实际应用场景考虑,客户的随机i/o请一定是容量不固定的。

c)blocksize固定为硬盘扇区(512b)的整数倍数进行测试,如:1k,4k,8k,16k..256k,512k将固定的blocksize调整为随机的blocksize,因为客户的请求一定是随机的,因此我们也模拟这种随机的i/o请求大小的情况。实现方案为通过随机数来获取范围内的随机值,做为i/o请求的大小,让硬盘来进行处理,以1k-1024k范围随机数为例(如附图3所示):上例为1秒间隔内打印一个1-1024内的随机数,通过两次的执行可以看到,即随机的blocksize。

d)硬盘顺序遍历测试

为了使测试硬盘i/o请求的随机的分配给不同的硬盘,使得硬盘能够在不同的时间段内随机的去响应不同的i/o请求,所以我们也采用随机数的原理,使硬盘随机的出现在测试中,以sdb-sdk10个硬盘为例,上一步的基础上增加硬盘的随机(如附图4所示):上例为1秒输出一对硬盘和随机bs的例子,可以看出,我们可以实现“随机硬盘”+“随机bs(blocksize)”的组合了。

e)i/o方式遍历,如:read,randread,write,randwrite

根据硬盘的特点,为了提高硬盘的读的能力,硬盘本都是带有高速cache的,cache的工作原理为,当有数据写入时,数据会先进入硬盘的高速cache中,然后将再数据由缓存写入到硬盘的物理存储中,这个过程中,当硬盘高速cache接收完外部数据写入请求时,即会发送写入完成信息。因此,写动作不合适去获取硬盘延时的测试。read为顺序写,硬盘寻道和磁头旋转基本上都也都在磁碟上顺序的动作,因此也不利于产生较大的延时。而randread,将使寻道和磁头旋转产生一定的压力,覆盖了整个硬盘物理存储区域,此种情况下会产生更多换延时情况,因此,此处只保留randread,其它i/o方式取消。

综上,模拟硬盘延时的三个条件为:bs随机,硬盘随机,randread。

判断模块203,用于延时判断:发送随机i/o请求至硬盘,间隔时间大于预定间隔时间后再发送下一个i/o请求,硬盘进入深度空闲状态然后再进入激活状态,通过监测每次i/o请的平均等待时间与每次i/o请求的服务时间差值获得硬盘的延时时间浮动范围。

根据硬盘节点能模式的特点:

从上面的特点看,idle_a为浅度睡眠,idle_b为深度睡眠。idle的唤醒时间更长,因此我们主要模拟idle_b,active两个状态的转化即可得到一个400ms左右的延时。从脚本设计上,我们应该先给硬盘一个随机的i/o请求,间隔时间大于2min后再给下一个i/o请求,使得硬盘能够有足够的时间进入idle_b状态,然后再进入active。为了达到这处目的,我们暂定两次i/o间隔时间为3min。实现如附图5a所示:从附图5a可以看出,有10个fioprocess在进行,每个进程的bs都是随机的。同时,我们可以通过iostat命令监控硬盘的i/o状态,如附图5b所示:从附图5b可以看出,出了i,j两个盘没有随机到i/o请求外,从b-k其它盘都有读写状态,说明其它盘已经进入了active状态。上面的动作完成后自动执行“sleep180“命令来实现180秒的待待命令,使得硬盘进入idle_b状态。然后将上面的“随机i/o”+“sleep180”写入循环中,即可实现了硬盘延时的模拟方法。如果svctm比较接近await,说明i/o几乎没有等待时间(i/o等待时间很短,可以忽略不计);如果await远大于svctm,说明i/o队列太长,应用得到的响应时间变慢。从数据分析上,我们可以通过iostat监测到的await和svctm的差值(每次i/o请的平均等待时间-每次i/o请求的服务时间)即可判断出硬盘的延时时间在什么范围内浮动了,对比硬盘spec,即可得出硬盘延时的合理性。

本发明提供了一种基于linux平台的硬盘io请求延时模拟判断系统,开启硬盘节能模式,模拟随机i/o请求大小,硬盘扇区大小随机测试,将测试硬盘i/o请求的随机分配给不同的硬盘;i/o随机读方式遍历,通过监测每次i/o请的平均等待时间与每次i/o请求的服务时间差值获得硬盘的延时时间浮动范围。本发明针对硬盘在powermodedisable和enable时,根据其特性进行fio的压力测试,判断硬盘的延时响应能力,有效的提交识别风险,减少客户端问题发生。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1