一种IO延迟时间统计方法、系统、装置及存储介质与流程

未命名 10-21 阅读:78 评论:0

一种io延迟时间统计方法、系统、装置及存储介质
技术领域
1.本发明涉及计算机技术领域,更具体的说是涉及一种io延迟时间统计方法、系统、装置及存储介质。


背景技术:

2.在日常运维工作过程中,经常会遇到应用侧服务响应延时、应用服务暂停执行(hang)的问题,比如某一时刻数据库请求变慢、吞吐量下降,严重的情况下可能会出现短时的应用hang住。从系统层面iostat命令输出、sar日志的记录中,可能能看到iowait变高、d状态进程数量变多,磁盘利用率升高等现象。但io问题非常复杂,io问题的根因多种多样,可能是io流程分配不均、内核bug、硬件bug等,涉及复杂的io栈,可能还涉及应用使用模型,极少能通过排查某一块代码或某一个组件就能找到问题发生的原因。
3.相关技术中,通常采用操作系统自带的性能分析工具来查找响应延时的原因,比如iostat,sar,systemtap,blktrace等,此类工具仅能获取的信息非常有限,无法深入分析问题原因。
4.比如可通过iostat工具中统计的await值获取io请求生成到在设备上完成io请求的耗时。但是当发生io延迟时,并不能通过iostat区分io延迟是在io调度还是硬件上。blktrace工具能记录从一个io请求进入块层(block layer)到io完成所经历的各个步骤所耗费的时间,但是当遇到io延迟问题的时候,从blktrace工具的数据分析中,仍然无法区分性能问题是发生在磁盘上、磁盘控制器上还是驱动层面。
5.可见,操作系统自带的性能分析工具无法对io请求从生成到完成的每个阶段中重要的执行过程的io延迟时间,从而无法准确的定位io延迟发生的具体位置。


技术实现要素:

6.针对以上问题,本发明的目的在于提供一种io延迟时间统计方法、系统、装置及存储介质,实现了对每个重要阶段io耗时的统计,能够完成对io链路更细粒度的追踪,并且可以根据io耗时定位io延迟发生的具体位置。
7.本发明为实现上述目的,通过以下技术方案实现:
8.第一方面,本发明公开了一种io延迟时间统计方法,包括:
9.响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段;
10.根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时;
11.根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶
段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。
12.进一步,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,包括:
13.使用数据包过滤器的动态探测工具在io请求下发过程中插入第一时间探测点,用于获取io请求下发到文件系统层处的完成时间tt1;
14.使用数据包过滤器的动态探测工具在为io请求分配内存数据页过程中插入第二时间探测点,用于获取io请求对应的内存数据页置脏完成的时间tt2。
15.进一步,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,还包括:
16.使用数据包过滤器的动态探测工具在脏页回写流程中插入第三时间探测点,用于获取将脏页封装为块输入输出结构体的完成时间tt3;
17.使用数据包过滤器的动态探测工具在脏页回写流程中插入第四时间探测点,用于获取将块输入输出请求生成时间tt4。
18.进一步,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,还包括:
19.当块输入输出请求添加到插入队列后,实时监控块输入输出请求的数量;
20.块输入输出请求的数量到达阈值后,将插入队列的块输入输出请求放入硬件派发队列,当硬件派发队列的块输入输出请求派发到驱动层时,使用数据包过滤器的动态探测工具插入第五时间探测点,用于获取块输入输出请求派发到驱动层的时间tt5。
21.进一步,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,还包括:
22.当块输入输出请求派发到驱动层后,封装成控制器和磁盘设备可以识别的块输入输出请求数据,并被驱动层提交给硬件层;此时使用数据包过滤器的动态探测工具插入第六时间探测点,用于获取块输入输出请求数据被提交给硬件层的时间tt6;
23.当块输入输出请求数据提交到硬件层后,通过磁盘控制器发送到存储设备,并由存储设备进行数据的落盘处理;使用数据包过滤器的动态探测工具在落盘处理过程中插入第七时间探测点,用于获取数据落盘完成时间tt7;
24.当块输入输出请求数据写入存储设备后,进入输入输出完成流程,返回硬件中断,并进行回调函数的返回和清理;使用数据包过滤器的动态探测工具在输入输出完成流程中插入第八时间探测点,用于获取输入输出完成流程的结束时间tt8。
25.进一步,所述根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,包括:
26.通过公式pagecachetime=tt2-tt1计算出内存数据页置脏阶段耗时pagecachetime;
27.通过公式biorequestmaketime=tt4-tt3计算出块输入输出请求生成阶段耗时biorequestmaketime;
28.通过公式ioschedulertime=tt5-tt4计算出输入输出调度阶段耗时
ioschedulertime;
29.通过公式drivertime=tt6-tt5计算出驱动处理阶段耗时drivertime;
30.通过公式hardwaretime=tt7-tt6计算出硬件处理阶段耗时hardwaretime;
31.通过公式iocompletetime=tt8-tt7计算出输入输出完成阶段耗时iocompletetime。
32.进一步,所述根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间,包括:
33.通过公式
34.pagecachetime+biorequestmaketime+ioschedulertime+drivertime+hardware time+iocompletetime=t计算出io请求的执行过程延迟时间t。
35.第二方面,本发明还公开了一种io延迟时间统计系统,包括:
36.时间监控模块,配置用于响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段;阶段耗时计算模块,配置用于根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时;
37.统计模块,配置用于根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。
38.第三方面,本发明还公开了一种io延迟时间统计装置,包括:
39.存储器,用于存储io延迟时间统计程序;
40.处理器,用于执行所述io延迟时间统计程序时实现如上文任一项所述io延迟时间统计方法的步骤。
41.第四方面,本发明还公开了一种可读存储介质,所述可读存储介质上存储有io延迟时间统计程序,所述io延迟时间统计程序被处理器执行时实现如上文任一项所述io延迟时间统计方法的步骤。
42.对比现有技术,本发明有益效果在于:本发明公开了一种io延迟时间统计方法、系统、装置及存储介质,利用数据包过滤器的动态探测工具的内核调试方法,在io请求从生成到完成的每个阶段中重要的执行过程的前后插入探测点,计算每个重要阶段的io耗时,完成对io链路更细粒度的追踪。本发明在文件系统层、块层的块输入输出请求生成阶段、io scheduler调度阶段、驱动层、硬件层、io complete阶段实现了io耗时的分析,从而能够准确定位io延迟发生的具体位置。本发明有效的解决了iostat无法区分io延迟是在io调度还是硬件上,以及blktrace工具无法区分性能问题是发生在磁盘上、磁盘控制器上还是驱动层面的问题。
43.由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
附图说明
44.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
45.图1是本发明具体实施方式中一种io延迟时间统计方法的方法流程图。
46.图2是本发明具体实施方式中另一种io延迟时间统计方法的方法流程图。
47.图3是本发明具体实施方式中一种io延迟时间统计系统的系统结构图。
48.图4是本发明具体实施方式中一种io延迟时间统计装置的结构示意图。
49.图中,1、时间监控模块;2、阶段耗时计算模块;3、统计模块;101、处理器;102、存储器;103、输入接口;104、输出接口;105、通讯单元;106、键盘;107、显示器;108、鼠标。
具体实施方式
50.本发明的核心是提供一种io延迟时间统计方法,相关技术中,通常采用操作系统自带的性能分析工具来查找响应延时的原因,比如iostat,sar,systemtap,blktrace等,此类工具仅能获取的信息非常有限,无法深入分析问题原因。
51.而本发明提供的io延迟时间统计方法,首先,响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段;然后,根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时。最后,根据每个阶段的耗时,计算出io请求的执行过程延迟时间。由此可见,本发明通实现了对每个重要阶段io耗时的统计,能够完成对io链路更细粒度的追踪,并且可以根据io耗时定位io延迟发生的具体位置。
52.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
53.下面对本发明中出现的关键术语进行解释。
54.ebpf,全称为“扩展的伯克利数据包过滤器(extended berkeley packet filter)”,它是一种数据包过滤技术,是从bpf(berkeley packet filter)技术扩展而来的。
55.kprobe是内核的动态探测工具,可以探测任何一条内核指令。kprobe根据探测点类型可分为三种:kprobes,jprobes和kretprobes(也叫返回探测点)。kprobes是可以被插入到内核的任何指令位置的探测点,jprobes则只能被插入到一个内核函数的入口,而kretprobes则是在指定的内核函数返回时才被执行。
56.bio,块输入输出结构体,代表了一次i/0请求,代表一个块设备的一个扇区或者多个连续扇区的数据请求,扇区是块设备的最小访问单元,bio是文件系统发给block layer层的。
57.bio request,块输入输出请求,代表块设备可以处理的一次任务单元,一个request由一个bio或者多个扇区相连的bio组成。
58.io scheduler,io调度器,是操作系统用来决定块设备上io操作提交顺序的方法。存在的目的有两个,一是提高io吞吐量,二是降低io响应时间。
59.为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
60.参见图1所示,本实施例提供了一种io延迟时间统计方法,包括如下步骤:
61.s1:响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段。
62.具体来说:
63.使用ebpf中的kprobe在io请求下发过程中插入第一时间探测点,用于获取io请求下发到文件系统层处的完成时间tt1。
64.使用ebpf中的kprobe在为io请求分配内存数据页过程中插入第二时间探测点,用于获取io请求对应的内存数据页置脏完成的时间tt2。通过以上两个时间探测点实现了内存数据页置脏阶段关键动作触发时间的监测。
65.使用ebpf中的kprobe在脏页回写流程中插入第三时间探测点,用于获取将脏页封装为块输入输出结构体的完成时间tt3。
66.使用ebpf中的kprobe在脏页回写流程中插入第四时间探测点,用于获取将块输入输出请求生成时间tt4。通过以上两个时间探测点实现了块输入输出请求生成阶段关键动作触发时间的监测。
67.当块输入输出请求添加到插入队列后,实时监控块输入输出请求的数量;直到块输入输出请求的数量到达阈值后,将插入队列的块输入输出请求放入硬件派发队列,当硬件派发队列的块输入输出请求派发到驱动层时,使用ebpf中的kprobe插入第五时间探测点,用于获取块输入输出请求派发到驱动层的时间tt5。通过插入第五时间探测点实现了输入输出调度阶段关键动作触发时间的监测。
68.当块输入输出请求派发到驱动层后,封装成控制器和磁盘设备可以识别的块输入输出请求数据,并被驱动层提交给硬件层;此时使用ebpf中的kprobe插入第六时间探测点,用于获取块输入输出请求数据被提交给硬件层的时间tt6。通过插入第六时间探测点实现了驱动处理阶段关键动作触发时间的监测。
69.当块输入输出请求数据提交到硬件层后,通过磁盘控制器发送到存储设备,并由存储设备进行数据的落盘处理;使用ebpf中的kprobe在落盘处理过程中插入第七时间探测点,用于获取数据落盘完成时间tt7。通过插入第七时间探测点实现了硬件处理阶段关键动作触发时间的监测。
70.当块输入输出请求数据写入存储设备后,进入输入输出完成流程,返回硬件中断,并进行回调函数的返回和清理;使用ebpf中的kprobe在输入输出完成流程中插入第八时间
探测点,用于获取输入输出完成流程的结束时间tt8。通过插入第八时间探测点实现了输入输出完成阶段关键动作触发时间的监测。
71.s2:根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时。
72.具体来说:
73.通过公式pagecachetime=tt2-tt1计算出内存数据页置脏阶段耗时pagecachetime;通过公式biorequestmaketime=tt4-tt3计算出块输入输出请求生成阶段耗时biorequestmaketime;通过公式ioschedulertime=tt5-tt4计算出输入输出调度阶段耗时ioschedulertime;通过公式drivertime=tt6-tt5计算出驱动处理阶段耗时drivertime;通过公式hardwaretime=tt7-tt6计算出硬件处理阶段耗时hardwaretime;通过公式iocompletetime=tt8-tt7计算出输入输出完成阶段耗时iocompletetime。
74.s3:根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。
75.具体来说,通过公式
76.pagecachetime+biorequestmaketime+ioschedulertime+drivertime+hardware time+iocompletetime=t计算出io请求的执行过程延迟时间t。
77.另外,需要特别说明的是,可利用性能分析工具iolantency,根据以上io处理过程阶段对应的耗时统计,可以获得某个进程每个阶段的io耗时,以及某个磁盘上所有io的每个阶段耗时,进而可获知io的性能瓶颈是发生在哪里,从而做进一步的分析。
78.可见,本方法实现了对每个重要阶段io耗时的统计,能够完成对io链路更细粒度的追踪,并且可以根据io耗时定位io延迟发生的具体位置。
79.参见图2所示,本发明还公开了一种io延迟时间统计方法,包括如下步骤:
80.1、用户层io指令下发:用户态调用系统api进行数据写操作,将数据buffer、写的位置、数据长度等信息传递到内核文件系统层。
81.2、pagecache置脏耗时统计:在内核文件系统层中,需要对此次io的数据结构体进行第一次描述,包括数据buffer起始地址,数据长度,写的位置等内容。此时,文件系统层为此次io分配page cache,首先从现有的page cache中查找要访问的文件块,若未命中,则将要访问的内容从磁盘中加载到page cache。然后将数据写入page cache中,并将page cache置为脏页。
82.脏页写入磁盘是由后台回写进程完成的,因此需要判断是否达到回写操作的触发条件。回写操作的触发条件具体如下:(1)脏页数量超过水位限制(2)用户同步命令(3)系统定时唤醒回写操作(4)脏页在系统中停留时间超过阈值。若以上脏页回写触发条件未达到,则此次io结束。
83.在io请求下发到文件系统层处,使用ebpf中的kprobe插入时间检测函数,建立时间探测点tt1,在此次io对应的page cache被置脏处,使用kprobe方法插入时间探测点tt2。pagecache置脏耗时等于io请求对应的page cache置脏完成的时间tt2减去io请求下发到文件系统层的时间tt1。
84.3、bio request生成耗时统计:若达到任何一项回写操作的触发条件,则系统启动脏页回写流程,脏页被封装成bio结构体,每个bio结构体包含256个bio vector,每个bio vector指向一个脏页对应的page cache。
85.bio生成后,被提交到通用块层,生成一个bio request,若bio request的数据长度太长,超出限制,则对此次bio做分拆,分拆成多个bio。若此bio request与其他io请求的物理位置相邻,则合并成一个bio,不能合并的话,则作为单独的bio request存在。
86.在bio生成处,利用ebpf中的kprobe插入时间探测点tt3,在bio request生成并经过分拆合并后,利用ebpf中的kprobe插入时间探测点tt4;bio request生成耗时等于bio request生成的时间tt4减去bio生成的时间tt3。
87.4、io scheduler耗时统计:bio request被添加到plug队列时,为了增大数据处理的吞吐量,等请求数量积累到一定数量后,根据系统io调度算法的设定,系统再将plug队列中的io请求放入unplug队列,也就是硬件派发队列,进入unplug队列中的io请求被派发到驱动层处,利用ebpf中的kprobe插入时间探测点tt5。io scheduler阶段耗时等于io请求被派发到驱动层的时间tt5减去bio request生成的时间tt4。
88.5、驱动层耗时统计:bio请求进入驱动层处,bio请求接下来被驱动进一步的处理和封装,封装成控制器和磁盘设备可以识别的数据,被driver提交给硬件。数据被提交给硬件处,利用ebpf中的kprobe插入时间探测点tt6。驱动层处理耗时等于数据被提交给硬件时的时间tt6减去bio请求进入驱动层的时间tt5。
89.6、硬件层耗时统计:bio请求被driver提交给硬件,会经过磁盘控制器,线缆,网络等到达存储设备,存储设备进行数据的落盘处理,在数据落盘完成处,利用ebpf中的kprobe插入时间探测点tt7。硬件层处理耗时等于数据落盘完成处的时间tt7减去数据被提交给硬件处的时间tt6。
90.7、io complete处理耗时统计:在io写入磁盘设备后,会进入complete流程,在complete流程中,返回硬件中断,进行一些回调函数的返回和清理工作,这些全部完成后,利用ebpf中的kprobe插入时间探测点tt8,一次io请求才算真正完成。io complete处理耗时等于io complete完成的时间tt8减去数据落盘完成处的时间tt7。
91.由此可见,本方法利用ebpf中的kprobe的内核调试方法,在io请求从生成到完成的每个阶段中重要的执行过程的前后插入探测点,计算每个重要阶段的io耗时,完成对io链路更细粒度的追踪。本发明在文件系统层、块层的块输入输出请求生成阶段、io scheduler调度阶段、驱动层、硬件层、io complete阶段实现了io耗时的分析,从而能够准确定位io延迟发生的具体位置。
92.参见图3所示,本发明还公开了一种io延迟时间统计系统,包括:时间监控模块1、阶段耗时计算模块2和统计模块3。
93.时间监控模块1,配置用于响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段。
94.阶段耗时计算模块2,配置用于根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处
理阶段耗时和输入输出完成阶段耗时。
95.统计模块3,配置用于根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。
96.本发明公开了一种io延迟时间统计系统,实现了对每个重要阶段io耗时的统计,能够完成对io链路更细粒度的追踪,并且可以根据io耗时定位io延迟发生的具体位置。有效的解决了iostat无法区分io延迟是在io调度还是硬件上,以及blktrace工具无法区分性能问题是发生在磁盘上、磁盘控制器上还是驱动层面的问题。
97.参见图4所示,本发明还公开了一种io延迟时间统计装置,包括处理器101和存储器102;其中,所述处理器101执行所述存储器中保存的io延迟时间统计程序时实现以下步骤:
98.1、响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段。
99.2、根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时。
100.3、根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。
101.本实施例提供的io延迟时间统计装置可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
102.其中,处理器101可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器101可以采用数字信号处理(digital signal processor,dsp)、现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑阵列(programmable logic array,pla)中的至少一种硬件形式来实现。处理器101也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(central processing unit,cpu);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器101可以在集成有图像处理器(graphics processing unit,gpu),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器101还可以包括人工智能(artificial intelligence,ai)处理器,该ai处理器用于处理有关机器学习的计算操作。
103.存储器102可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器102还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器102至少用于存储以下计算机程序,其中,该计算机程序被处理器101加载并执行之后,能够实现前述任一实施例公开的io延迟时间统计方法的相关步骤。另外,存储器102所存储的资源还可以包括操作系统和数据等,存储方式可以是短暂存储或者永久存储。其中,操作系统可以包括windows、unix、linux
等。数据可以包括但不限于上述io延迟时间统计方法中涉及的数据等。
104.进一步的,本实施例中的io延迟时间统计装置,还可以包括:
105.输入接口103,用于获取外界导入的io延迟时间统计程序,并将获取到的io延迟时间统计程序保存至所述存储器102中,还可以用于获取外界终端设备传输的各种指令和参数,并传输至处理器101中,以便处理器101利用上述各种指令和参数展开相应的处理。本实施例中,所述输入接口103具体可以包括但不限于usb接口、串行接口、语音输入接口、指纹输入接口、硬盘读取接口等。
106.输出接口104,用于将处理器101产生的各种数据输出至与其相连的终端设备,以便于与输出接口相连的其他终端设备能够获取到处理器101产生的各种数据。本实施例中,所述输出接口104具体可以包括但不限于usb接口、串行接口等。
107.通讯单元105,用于在服务器运行业务优化配置装置和外部服务器之间建立远程通讯连接,以便于io延迟时间统计装置能够将镜像文件挂载到外部服务器中。本实施例中,通讯单元105具体可以包括但不限于基于无线通讯技术或有线通讯技术的远程通讯单元。
108.键盘106,用于获取用户通过实时敲击键帽而输入的各种参数数据或指令。
109.显示器107,用于对运行io延迟时间统计过程的相关信息进行实时显示。
110.鼠标108,可以用于协助用户输入数据并简化用户的操作。
111.本发明还公开了一种可读存储介质,这里所说的可读存储介质包括随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动硬盘、cd-rom或技术领域内所公知的任意其他形式的存储介质。可读存储介质中存储有io延迟时间统计程序,所述io延迟时间统计程序被处理器执行时实现以下步骤:
112.1、响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段。
113.2、根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时。
114.3、根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。
115.综上所述,本发明实现了对每个重要阶段io耗时的统计,能够完成对io链路更细粒度的追踪,并且可以根据io耗时定位io延迟发生的具体位置。
116.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的方法而言,由于其与实施例公开的系统相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
117.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些
功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
118.在本发明所提供的几个实施例中,应该理解到,所揭露的系统、系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
119.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
120.另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。
121.同理,在本发明各个实施例中的各处理单元可以集成在一个功能模块中,也可以是各个处理单元物理存在,也可以两个或两个以上处理单元集成在一个功能模块中。
122.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
123.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
124.以上对本发明所提供的io延迟时间统计方法、系统、装置及可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

技术特征:
1.一种io延迟时间统计方法,其特征在于,包括:响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段;根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时;根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。2.根据权利要求1所述的io延迟时间统计方法,其特征在于,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,包括:使用数据包过滤器的动态探测工具在io请求下发过程中插入第一时间探测点,用于获取io请求下发到文件系统层处的完成时间tt1;使用数据包过滤器的动态探测工具在为io请求分配内存数据页过程中插入第二时间探测点,用于获取io请求对应的内存数据页置脏完成的时间tt2。3.根据权利要求2所述的io延迟时间统计方法,其特征在于,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,还包括:使用数据包过滤器的动态探测工具在脏页回写流程中插入第三时间探测点,用于获取将脏页封装为块输入输出结构体的完成时间tt3;使用数据包过滤器的动态探测工具在脏页回写流程中插入第四时间探测点,用于获取将块输入输出请求生成时间tt4。4.根据权利要求3所述的io延迟时间统计方法,其特征在于,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,还包括:当块输入输出请求添加到插入队列后,实时监控块输入输出请求的数量;块输入输出请求的数量到达阈值后,将插入队列的块输入输出请求放入硬件派发队列,当硬件派发队列的块输入输出请求派发到驱动层时,使用数据包过滤器的动态探测工具插入第五时间探测点,用于获取块输入输出请求派发到驱动层的时间tt5。5.根据权利要求4所述的io延迟时间统计方法,其特征在于,所述通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间,还包括:当块输入输出请求派发到驱动层后,封装成控制器和磁盘设备可以识别的块输入输出请求数据,并被驱动层提交给硬件层;此时使用数据包过滤器的动态探测工具插入第六时间探测点,用于获取块输入输出请求数据被提交给硬件层的时间tt6;当块输入输出请求数据提交到硬件层后,通过磁盘控制器发送到存储设备,并由存储设备进行数据的落盘处理;使用数据包过滤器的动态探测工具在落盘处理过程中插入第七时间探测点,用于获取数据落盘完成时间tt7;当块输入输出请求数据写入存储设备后,进入输入输出完成流程,返回硬件中断,并进行回调函数的返回和清理;使用数据包过滤器的动态探测工具在输入输出完成流程中插入
第八时间探测点,用于获取输入输出完成流程的结束时间tt8。6.根据权利要求5所述的io延迟时间统计方法,其特征在于,所述根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,包括:通过公式pagecachetime=tt2-tt1计算出内存数据页置脏阶段耗时pagecachetime;通过公式biorequestmaketime=tt4-tt3计算出块输入输出请求生成阶段耗时biorequestmaketime;通过公式ioschedulertime=tt5-tt4计算出输入输出调度阶段耗时ioschedulertime;通过公式drivertime=tt6-tt5计算出驱动处理阶段耗时drivertime;通过公式hardwaretime=tt7-tt6计算出硬件处理阶段耗时hardwaretime;通过公式iocompletetime=tt8-tt7计算出输入输出完成阶段耗时iocompletetime。7.根据权利要求6所述的io延迟时间统计方法,其特征在于,所述根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间,包括:通过公式pagecachetime+biorequestmaketime+ioschedulertime+drivertime+hardware time+iocompletetime=t计算出io请求的执行过程延迟时间t。8.一种io延迟时间统计系统,其特征在于,包括:时间监控模块,配置用于响应于监测到用户层io下发后,通过对io请求的执行过程中插入多个时间探测点,以获取io请求的执行过程中关键动作触发时间;所述io请求的执行过程依次包括内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段;阶段耗时计算模块,配置用于根据关键动作触发时间计算内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时;统计模块,配置用于根据内存数据页置脏阶段耗时、块输入输出请求生成阶段耗时、输入输出调度阶段耗时、驱动处理阶段耗时、硬件处理阶段耗时和输入输出完成阶段耗时,计算io请求的执行过程延迟时间。9.一种io延迟时间统计装置,其特征在于,包括:存储器,用于存储io延迟时间统计程序;处理器,用于执行所述io延迟时间统计程序时实现如权利要求1至7任一项权利要求所述的io延迟时间统计方法的步骤。10.一种可读存储介质,其特征在于:所述可读存储介质上存储有io延迟时间统计程序,所述io延迟时间统计程序被处理器执行时实现如权利要求1至7任一项权利要求所述的io延迟时间统计方法的步骤。

技术总结
本发明提出的一种IO延迟时间统计方法、系统、装置及存储介质,所述方法包括:响应于监测到用户层IO下发后,通过对IO请求的执行过程中插入多个时间探测点,以获取IO请求的执行过程中内存数据页置脏阶段、块输入输出请求生成阶段、输入输出调度阶段、驱动处理阶段、硬件处理阶段和输入输出完成阶段的关键动作触发时间;根据关键动作触发时间计算每个阶段的耗时;根据每个阶段的耗时,计算IO请求的执行过程延迟时间。本发明实现了对每个重要阶段IO耗时的统计,能够完成对IO链路更细粒度的追踪,并且可以根据IO耗时定位IO延迟发生的具体位置。以根据IO耗时定位IO延迟发生的具体位置。以根据IO耗时定位IO延迟发生的具体位置。


技术研发人员:张旭芳 匡志鹏
受保护的技术使用者:苏州浪潮智能科技有限公司
技术研发日:2023.07.14
技术公布日:2023/10/19
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

航空商城 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

评论

相关推荐