IO请求的监测方法及装置、存储介质及电子设备转让专利

申请号 : CN202310030519.3

文献号 : CN115756732B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李宏伟方浩

申请人 : 苏州浪潮智能科技有限公司

摘要 :

本申请实施例提供了一种IO请求的监测方法及装置、存储介质及电子设备,涉及计算机领域。其中,该IO请求的监测方法包括:在业务虚拟机操作系统运行时执行目标监测工具,得到业务虚拟机操作系统中的N个目标函数的运行信息;在M个层中存在满足预设条件的K对层、且K对层中的每对层包括两个层的情况下,获取K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系;根据N个目标函数的运行信息以及K个IO请求信息映射关系,确定一组IO请求中的同一个IO请求在M个层中的各个层上的处理时长。

权利要求 :

1.一种IO请求的监测方法,其特征在于,包括:

在业务虚拟机操作系统运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息,其中,所述业务虚拟机操作系统用于在运行时对一组IO请求进行处理,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址以及初始IO请求长度,所述目标监测工具用于获取所述N个目标函数的运行信息,所述N个目标函数是在所述业务虚拟机操作系统中的M个层上执行的函数,所述N个目标函数中的各个目标函数是在所述M个层中对应的一个层上执行的函数,N等于1或为大于或等于2的正整数,M等于1或为大于或等于2的正整数,所述N个目标函数的运行信息包括所述N个目标函数中的各个目标函数输入的IO请求地址以及IO请求长度、所述各个目标函数的执行时间;

在所述M个层中存在满足预设条件的K对层、且所述K对层中的每对层包括两个层的情况下,获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系,其中,所述预设条件是指在所述每对层包括的两个层上同一个IO请求的IO请求信息不同,所述IO请求信息包括IO请求地址和/或IO请求长度,K为大于或等于1的正整数,所述IO请求信息映射关系用于表示在所述两个层上同一个IO请求的IO请求信息之间的映射关系;

根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长。

2.根据权利要求1所述的方法,其特征在于,所述在业务虚拟机操作系统运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息,包括:在所述业务虚拟机操作系统运行时执行所述目标监测工具中的N个监测函数,得到所述N个目标函数的运行信息,其中,所述N个监测函数与所述N个目标函数具有一一对应的关系,所述N个监测函数中的各个监测函数用于获取所述N个目标函数中对应的一个目标函数的运行信息。

3.根据权利要求2所述的方法,其特征在于,所述在所述业务虚拟机操作系统运行时执行所述目标监测工具中的N个监测函数,得到所述N个目标函数的运行信息,包括:在所述业务虚拟机操作系统运行时,通过目标工具集将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息,其中,所述N个监测函数是根据所述目标工具集所构建的监测函数。

4.根据权利要求3所述的方法,其特征在于,在所述业务虚拟机操作系统运行时,通过目标工具集将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息,包括:在所述业务虚拟机操作系统运行时,通过扩展伯克利包过滤器eBPF将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息。

5.根据权利要求2所述的方法,其特征在于,在业务虚拟机操作系统运行时执行目标监测工具之前,所述方法还包括:响应于接收到的监测指令,在所述目标监测工具中设置所述N个监测函数,其中,所述监测指令用于指示对所述N个目标函数进行监测。

6.根据权利要求1所述的方法,其特征在于,所述N个目标函数中的各个目标函数是以下之一:所述业务虚拟机操作系统中的内核态函数、用户态函数、静态函数。

7.根据权利要求1所述的方法,其特征在于,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系,包括:通过以下步骤获取所述K对层中的第i对层包括的两个层之间的IO请求信息映射关系,得到所述K个IO请求信息映射关系中的第i个IO请求信息映射关系,其中,i为大于或等于1、且小于或等于K的正整数:通过所述第i对层包括的两个层的存储实例,确定所述第i对层包括的两个层之间的IO请求信息映射关系,得到所述第i个IO请求信息映射关系,其中,所述第i对层包括的两个层的存储实例中记录了在所述第i对层包括的两个层上同一个IO请求的IO请求信息。

8.根据权利要求1所述的方法,其特征在于,所述方法还包括:

在所述业务虚拟机操作系统运行之前,配置所述K个IO请求信息映射关系。

9.根据权利要求1所述的方法,其特征在于,所述方法还包括:

在所述业务虚拟机操作系统运行的过程中,配置所述K个IO请求信息映射关系。

10.根据权利要求1所述的方法,其特征在于,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,包括:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态文件层和客户机内核态块层的情况下,获取所述客户机内核态文件层与所述客户机内核态块层之间的IO请求信息映射关系。

11.根据权利要求1所述的方法,其特征在于,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,包括:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态块层和宿主机内核态文件层的情况下,获取所述客户机内核态块层与所述宿主机内核态文件层之间的IO请求信息映射关系。

12.根据权利要求1所述的方法,其特征在于,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,包括:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的宿主机内核态文件层和宿主机内核态块层的情况下,获取所述宿主机内核态文件层与所述宿主机内核态块层之间的IO请求信息映射关系。

13.根据权利要求1所述的方法,其特征在于,所述根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长,包括:对所述一组IO请求中的第i个IO请求执行以下步骤,其中,i为大于或等于1的正整数,所述第i个IO请求的初始IO请求信息包括第i个初始IO请求地址以及第i个初始IO请求长度:根据所述K个IO请求信息映射关系和所述第i个IO请求的初始IO请求信息,在所述N个目标函数的运行信息中确定与所述第i个IO请求对应的执行时间,得到N个执行时间;

根据所述N个执行时间,确定所述第i个IO请求在所述M个层中的各个层的处理时长。

14.根据权利要求13所述的方法,其特征在于,所述根据所述K个IO请求信息映射关系和所述第i个IO请求的初始IO请求信息,在所述N个目标函数的运行信息中确定与所述第i个IO请求对应的执行时间,得到N个执行时间,包括:通过以下步骤确定所述N个目标函数中的第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间,得到第j个执行时间,其中,j为大于或等于1、且小于或等于N的正整数:在j等于1的情况下,在所述N个目标函数中的第1个目标函数的运行信息中查找包括所述初始IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第1个目标函数的运行信息中与所述第i个IO请求对应的执行时间;

在j大于1、且第j‑1个目标函数所在的层和所述第j个目标函数所在的层之间存在IO请求信息映射关系的情况下,获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑

1个IO请求信息,并根据所述K个IO请求信息映射关系中与所述第j‑1个目标函数所在的层和所述第j个目标函数所在的层对应的IO请求信息映射关系,获取与所述第j‑1个IO请求信息具有映射关系的第j个IO请求信息;在所述第j个目标函数的运行信息中查找包括所述第j个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。

15.根据权利要求14所述的方法,其特征在于,所述获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息,包括:将所述第j‑1个目标函数的运行信息中与所述第i个IO请求对应的IO请求地址以及IO请求长度确定为所述第j‑1个IO请求信息。

16.根据权利要求13所述的方法,其特征在于,所述方法还包括:

在j大于1、且第j‑1个目标函数所在的层和第j个目标函数所在的层之间不存在IO请求信息映射关系的情况下,获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息;

在所述第j个目标函数的运行信息中查找包括所述第j‑1个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。

17.根据权利要求13所述的方法,其特征在于,所述根据所述N个执行时间,确定所述第i个IO请求在所述M个层中的各个层的处理时长,包括:通过以下步骤确定所述第i个IO请求在所述M个层中的第j个层的处理时长,其中,j为大于或等于1、且小于或等于M的正整数:在所述N个目标函数中的2个目标函数在所述第j个层上执行的情况下,将所述N个执行时间中与所述2个目标函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长;和/或在所述N个目标函数中的P个目标函数在所述第j个层上执行、且所述P个目标函数包括所述第j个层的入口函数和出口函数的情况下,将所述N个执行时间中与所述入口函数和所述出口函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长,其中,P为大于2的正整数。

18.根据权利要求13所述的方法,其特征在于,所述N个目标函数是按照处理所述第i个IO请求的先后顺序排列的。

19.根据权利要求1至18中任一项所述的方法,其特征在于,所述方法还包括:

在所述业务虚拟机操作系统运行时,获取接收到目标读取指令,其中,所述目标读取指令用于读取目标文件;

将所述目标读取指令转换成所述一组IO请求,其中,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址是根据所述目标文件的存储地址确定得到的,所述一组IO请求中的各个IO请求具有对应的初始IO请求长度是根据所述目标文件的文件大小确定得到的。

20.一种IO请求的监测装置,其特征在于,包括:

执行模块,用于在业务虚拟机操作系统运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息,其中,所述业务虚拟机操作系统用于在运行时对一组IO请求进行处理,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址以及初始IO请求长度,所述目标监测工具用于获取所述N个目标函数的运行信息,所述N个目标函数是在所述业务虚拟机操作系统中的M个层上执行的函数,所述N个目标函数中的各个目标函数是在所述M个层中对应的一个层上执行的函数,N等于1或为大于或等于2的正整数,M等于1或为大于或等于2的正整数,所述N个目标函数的运行信息包括所述N个目标函数中的各个目标函数输入的IO请求地址以及IO请求长度、所述各个目标函数的执行时间;

第一获取模块,用于在所述M个层中存在满足预设条件的K对层、且所述K对层中的每对层包括两个层的情况下,获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系,其中,所述预设条件是指在所述每对层包括的两个层上同一个IO请求的IO请求信息不同,所述IO请求信息包括IO请求地址和/或IO请求长度,K为大于或等于1的正整数,所述IO请求信息映射关系用于表示在所述两个层上同一个IO请求的IO请求信息之间的映射关系;

确定模块,用于根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长。

21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至19任一项中所述的方法的步骤。

22.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至

19任一项中所述的方法的步骤。

说明书 :

IO请求的监测方法及装置、存储介质及电子设备

技术领域

[0001] 本申请实施例涉及计算机领域,具体而言,涉及一种IO请求的监测方法及装置、存储介质及电子设备。

背景技术

[0002] 虚拟化是构建云计算基础架构的关键技术之一,I/O(Input/Output,输入/输出)设备虚拟化根据实现方式可分为软件虚拟化、半虚拟化(para‑virtualization)及硬件辅助虚拟化。软件虚拟化由于性能问题,仅适用于对性能要求不太高的场景,如虚拟串口设备等;硬件虚拟化则由于灵活性差、适应范围窄、价格昂贵,只应用于对性能有严格要求的特定场景。现代虚拟化应用场景则主要以半虚拟化应用模式为主。半虚拟通过宿主机操作系统与客户机操作系统配合,按照通用协议实现数据传输。相较于软件虚拟化纯软件模拟的方式,半虚拟化具有更高的性能;相较于硬件虚拟化,半虚拟化则具有更好的灵活性与适用范围,以及更低的成本。
[0003] 虚拟化IO栈往往十分复杂,虚拟化中IO请求会穿透两层IO栈,并经过半虚拟化请求转换,整个IO链路十分之长。而任意环节的波动都会影响到IO性能。现有技术中,往往通过blk trace、perf、iotop、虚拟化软件如QEMU(Quick Emulator Linux,平台的开源模拟处理器软件)自带的IO调试工具等等,对虚拟化IO栈处理IO请求的部分过程进行追踪和分析(比如:对部分处理过程中的IO性能进行分析和追踪),难以对整个处理IO请求的过程进行全局的分析和追踪。
[0004] 针对相关技术中,IO请求的监测的全面性较低的技术问题,尚未提出有效的解决方案。

发明内容

[0005] 本申请实施例提供了一种IO请求的监测方法及装置、存储介质及电子设备,以至少解决相关技术中IO请求的监测的全面性较低的问题。
[0006] 根据本申请的一个实施例,提供了一种IO请求的监测方法,包括:在业务虚拟机操作系统运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息,其中,所述业务虚拟机操作系统用于在运行时对一组IO请求进行处理,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址以及初始IO请求长度,所述目标监测工具用于获取所述N个目标函数的运行信息,所述N个目标函数是在所述业务虚拟机操作系统中的M个层上执行的函数,所述N个目标函数中的各个目标函数是在所述M个层中对应的一个层上执行的函数,N等于1或为大于或等于2的正整数,M等于1或为大于或等于2的正整数,所述N个目标函数的运行信息包括所述N个目标函数中的各个目标函数输入的IO请求地址以及IO请求长度、所述各个目标函数的执行时间;在所述M个层中存在满足预设条件的K对层、且所述K对层中的每对层包括两个层的情况下,获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系,其中,所述预设条件是指在所述每对层包括的两个层上同一个IO请求的IO请求信息不同,所述IO请求信息包括IO请求地址和/或IO请求长度,K为大于或等于1的正整数,所述IO请求信息映射关系用于表示在所述两个层上同一个IO请求的IO请求信息之间的映射关系;根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长。
[0007] 在一个示例性实施例中,所述在业务虚拟机操作系统运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息,包括:在所述业务虚拟机操作系统运行时执行所述目标监测工具中的N个监测函数,得到所述N个目标函数的运行信息,其中,所述N个监测函数与所述N个目标函数具有一一对应的关系,所述N个监测函数中的各个监测函数用于获取所述N个目标函数中对应的一个目标函数的运行信息。
[0008] 在一个示例性实施例中,所述在所述业务虚拟机操作系统运行时执行所述目标监测工具中的N个监测函数,得到所述N个目标函数的运行信息,包括:在所述业务虚拟机操作系统运行时,通过目标工具集将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息,其中,所述N个监测函数是根据所述目标工具集所构建的监测函数。
[0009] 在一个示例性实施例中,在所述业务虚拟机操作系统运行时,通过目标工具集将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息,包括:在所述业务虚拟机操作系统运行时,通过扩展伯克利包过滤器eBPF将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息。
[0010] 在一个示例性实施例中,在业务虚拟机操作系统运行时执行目标监测工具之前,所述方法还包括:响应于接收到的监测指令,在所述目标监测工具中设置所述N个监测函数,其中,所述监测指令用于指示对所述N个目标函数进行监测。
[0011] 在一个示例性实施例中,所述N个目标函数中的各个目标函数是以下之一:所述业务虚拟机操作系统中的内核态函数、用户态函数、静态函数。
[0012] 在一个示例性实施例中,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系,包括:通过以下步骤获取所述K对层中的第i对层包括的两个层之间的IO请求信息映射关系,得到所述K个IO请求信息映射关系中的第i个IO请求信息映射关系,其中,i为大于或等于1、且小于或等于K的正整数:通过所述第i对层包括的两个层的存储实例,确定所述第i对层包括的两个层之间的IO请求信息映射关系,得到所述第i个IO请求信息映射关系,其中,所述第i对层包括的两个层的存储实例中记录了在所述第i对层包括的两个层上同一个IO请求的IO请求信息。
[0013] 在一个示例性实施例中,所述方法还包括:在所述业务虚拟机操作系统运行之前,配置所述K个IO请求信息映射关系。
[0014] 在一个示例性实施例中,所述方法还包括:在所述业务虚拟机操作系统运行的过程中,配置所述K个IO请求信息映射关系。
[0015] 在一个示例性实施例中,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,包括:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态文件层和客户机内核态块层的情况下,获取所述客户机内核态文件层与所述客户机内核态块层之间的IO请求信息映射关系。
[0016] 在一个示例性实施例中,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,包括:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态块层和宿主机内核态文件层的情况下,获取所述客户机内核态块层与所述宿主机内核态文件层之间的IO请求信息映射关系。
[0017] 在一个示例性实施例中,所述获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,包括:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的宿主机内核态文件层和宿主机内核态块层的情况下,获取所述宿主机内核态文件层与所述宿主机内核态块层之间的IO请求信息映射关系。
[0018] 在一个示例性实施例中,所述根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长,包括:对所述一组IO请求中的第i个IO请求执行以下步骤,其中,i为大于或等于1的正整数,所述第i个IO请求的初始IO请求信息包括第i个初始IO请求地址以及第i个初始IO请求长度:根据所述K个IO请求信息映射关系和所述第i个IO请求的初始IO请求信息,在所述N个目标函数的运行信息中确定与所述第i个IO请求对应的执行时间,得到N个执行时间;根据所述N个执行时间,确定所述第i个IO请求在所述M个层中的各个层的处理时长。
[0019] 在一个示例性实施例中,所述根据所述K个IO请求信息映射关系和所述第i个IO请求的初始IO请求信息,在所述N个目标函数的运行信息中确定与所述第i个IO请求对应的执行时间,得到N个执行时间,包括:通过以下步骤确定所述N个目标函数中的第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间,得到第j个执行时间,其中,j为大于或等于1、且小于或等于N的正整数:在j等于1的情况下,在所述N个目标函数中的第1个目标函数的运行信息中查找包括所述初始IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第1个目标函数的运行信息中与所述第i个IO请求对应的执行时间;在j大于1、且第j‑1个目标函数所在的层和所述第j个目标函数所在的层之间存在IO请求信息映射关系的情况下,获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息,并根据所述K个IO请求信息映射关系中与所述第j‑1个目标函数所在的层和所述第j个目标函数所在的层对应的IO请求信息映射关系,获取与所述第j‑1个IO请求信息具有映射关系的第j个IO请求信息;在所述第j个目标函数的运行信息中查找包括所述第j个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。
[0020] 在一个示例性实施例中,所述获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息,包括:将所述第j‑1个目标函数的运行信息中与所述第i个IO请求对应的IO请求地址以及IO请求长度确定为所述第j‑1个IO请求信息。
[0021] 在一个示例性实施例中,所述方法还包括:在j大于1、且第j‑1个目标函数所在的层和第j个目标函数所在的层之间不存在IO请求信息映射关系的情况下,获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息;在所述第j个目标函数的运行信息中查找包括所述第j‑1个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。
[0022] 在一个示例性实施例中,所述根据所述N个执行时间,确定所述第i个IO请求在所述M个层中的各个层的处理时长,包括:通过以下步骤确定所述第i个IO请求在所述M个层中的第j个层的处理时长,其中,j为大于或等于1、且小于或等于M的正整数:在所述N个目标函数中的2个目标函数在所述第j个层上执行的情况下,将所述N个执行时间中与所述2个目标函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长;和/或在所述N个目标函数中的P个目标函数在所述第j个层上执行、且所述P个目标函数包括所述第j个层的入口函数和出口函数的情况下,将所述N个执行时间中与所述入口函数和所述出口函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长,其中,P为大于2的正整数。
[0023] 在一个示例性实施例中,所述N个目标函数是按照处理所述第i个IO请求的先后顺序排列的。
[0024] 在一个示例性实施例中,其特征在于,所述方法还包括:在所述业务虚拟机操作系统运行时,获取接收到目标读取指令,其中,所述目标读取指令用于读取目标文件;将所述目标读取指令转换成所述一组IO请求,其中,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址是根据所述目标文件的存储地址确定得到的,所述一组IO请求中的各个IO请求具有对应的初始IO请求长度是根据所述目标文件的文件大小确定得到的。
[0025] 根据本申请的另一个实施例,提供了一种IO请求的监测装置,包括:执行模块,用于在业务虚拟机操作系统运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息,其中,所述业务虚拟机操作系统用于在运行时对一组IO请求进行处理,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址以及初始IO请求长度,所述目标监测工具用于获取所述N个目标函数的运行信息,所述N个目标函数是在所述业务虚拟机操作系统中的M个层上执行的函数,所述N个目标函数中的各个目标函数是在所述M个层中对应的一个层上执行的函数,N等于1或为大于或等于2的正整数,M等于1或为大于或等于2的正整数,所述N个目标函数的运行信息包括所述N个目标函数中的各个目标函数输入的IO请求地址以及IO请求长度、所述各个目标函数的执行时间;第一获取模块,用于在所述M个层中存在满足预设条件的K对层、且所述K对层中的每对层包括两个层的情况下,获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系,其中,所述预设条件是指在所述每对层包括的两个层上同一个IO请求的IO请求信息不同,所述IO请求信息包括IO请求地址和/或IO请求长度,K为大于或等于1的正整数,所述IO请求信息映射关系用于表示在所述两个层上同一个IO请求的IO请求信息之间的映射关系;确定模块,用于根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长。
[0026] 根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
[0027] 根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
[0028] 通过本申请实施例,在业务虚拟机操作系统中的各个层对IO请求进行处理的过程中,可以对上述各个层上执行的函数中所希望监测的函数进行监测。此外,在上述各个层对IO请求进行处理的过程中,IO请求地址会经过多次转换;因此结合同一个IO请求的IO请求信息在上述各个层之间的映射关系,实现了对在上述各个层上处理同一个IO请求的处理过程的全面监测。因此,可以解决IO请求的监测的全面性较低问题,达到提升IO请求的监测的全面性的技术效果。

附图说明

[0029] 图1是本申请实施例的一种IO请求的监测方法的移动终端的硬件结构框图;
[0030] 图2是根据本申请实施例的一种虚拟化IO栈的全视图;
[0031] 图3是根据本申请实施例的IO请求的监测方法的流程图;
[0032] 图4是根据本申请实施例的一种IO请求的监测方法的示意图;
[0033] 图5是根据本申请实施例的一种获取目标函数的运行信息的示意图;
[0034] 图6是根据本申请实施例的一种执行监测函数的示意图;
[0035] 图7是根据本申请实施例的一种设置监测函数的示意图;
[0036] 图8是根据本申请实施例的一种获取IO请求映射关系的示意图;
[0037] 图9是根据本申请实施例的一种配置IO请求信息映射关系的示意图一;
[0038] 图10是根据本申请实施例的一种配置IO请求信息映射关系的示意图二;
[0039] 图11是根据本申请实施例的一种获取IO请求信息映射关系的示意图一;
[0040] 图12是根据本申请实施例的一种获取IO请求信息映射关系的示意图二;
[0041] 图13是根据本申请实施例的一种获取IO请求信息映射关系的示意图三;
[0042] 图14是根据本申请实施例的一种确定同一个IO请求的处理时长的示意图;
[0043] 图15是根据本申请实施例的一种确定IO请求1对应的执行时间的示意图一;
[0044] 图16是根据本申请实施例的一种确定IO请求1对应的执行时间的示意图二;
[0045] 图17是根据本申请实施例的一种确定IO请求1对应的执行时间的示意图三;
[0046] 图18是根据本申请实施例的一种目标函数的顺序的示意图;
[0047] 图19是根据本申请实施例的一种获取一组IO请求的示意图;
[0048] 图20是根据本申请实施例的IO请求的监测装置的结构框图。

具体实施方式

[0049] 下文中将参考附图并结合实施例来详细说明本申请的实施例。
[0050] 需要说明的是,本申请实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
[0051] 本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本申请实施例的一种IO请求的监测方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
[0052] 存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的IO请求的监测方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0053] 传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
[0054] 图2是根据本申请实施例的一种虚拟化IO栈的全视图,如图2所示,业务虚拟机操作系统(或称为,虚拟化IO栈)106包括客户机用户态(层)、客户机内核态(层)、宿主机用户态(层)以及宿主机内核态(层),其中,客户机用户态(层)包括用户应用102,客户机内核态(层)包括文件层104和客户机内核态(层)块层106,宿主机内核态(层)包括文件层108和块层110,宿主机用户态(层)包括hypervisor(虚拟机监视器)。在业务虚拟机操作系统中的各个层处理IO请求的过程中会涉及到多层地址转换,主要涉及到的各层地址有:客户应用IO请求的在客户虚拟机文件内逻辑偏移;客户虚拟机内virtio块设备LBA(Logical Block Address,逻辑块地址)地址;Virtio块设备后端存储文件内的地址;主机中物理存储设备的LBA地址等等。
[0055] 业务虚拟机操作系统106可以但不限于通过以下步骤对一个完整的业务虚拟机IO请求进行处理。
[0056] 步骤1,在业务虚拟机操作系统106中,业务应用IO通过系统调用接口下发IO请求至客户操作系统内核,一般是由VFS(Virtualization File System,虚拟文件系统)或者块层处理。
[0057] 步骤2,客户操作系统内核将IO请求下发至宿主机用户态(层)中的virtio(抽象)前端驱动,如virtio‑scsi等。
[0058] 步骤3,Virtio前端驱动将IO请求按规定格式放入共享内存区域(virtqueue)中(也即将IO请求放入virtio请求队列中),并通过kvm(Kernel‑based Virtual Machine,基于内核的虚拟机)的eventfd机制通知到宿主机(即上述的宿主机用户态(层))。
[0059] 步骤4,宿主机(即上述的宿主机用户态(层))的virtio后端驱动响应virtio前端驱动的IO请求,virtio后端可在宿主机用户态(层)模拟实现,主要是将客户机IO请求转换成后端存储文件的读写请求。然后将请求通过宿主机的系统调用(比如:read,pread,write,pwrite等等)下发至宿主机VFS(即上述的文件层108)。
[0060] 步骤5,宿主机VFS层响应virtio后端IO请求,由实际的文件系统实例进行处理;文件系统将文件请求转换为块设备的IO请求,并通过bio(Block input output,块设备的输入/输出)下发给块层110处理。
[0061] 步骤6,宿主机块层(即上述的块层110)响应IO请求,并将请求转发给设备驱动层112进行处理。
[0062] 步骤7,设备驱动层112处理完IO请求,将请求所对应的结果依次通知到宿主机的设备驱动层112、块层110、宿主机VFS层(即上述的文件层108)、virtio后端,再到客户操作系统的virtio前端驱动、客户机内核态块层106、客户机VFS层(即上述的文件层104),最后再到客户应用(即上述的用户应用102)。
[0063] 在本实施例中提供了一种运行于上述移动终端的IO请求的监测方法,图3是根据本申请实施例的IO请求的监测方法的流程图,如图3所示,该流程包括如下步骤:
[0064] 步骤S202,在业务虚拟机操作系统116运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息;
[0065] 步骤S204,在所述M个层中存在满足预设条件的K对层、且所述K对层中的每对层包括两个层的情况下,获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系;
[0066] 步骤S206,根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长。
[0067] 通过上述步骤,在业务虚拟机操作系统中的各个层对IO请求进行处理的过程中,可以对上述各个层上执行的函数中所希望监测的函数进行监测。此外,在上述各个层对IO请求进行处理的过程中,IO请求地址会经过多次转换;因此结合同一个IO请求的IO请求信息在上述各个层之间的映射关系,实现了对在上述各个层上处理同一个IO请求的处理过程的全面监测。因此,可以解决IO请求的监测的全面性较低问题,达到提升IO请求的监测的全面性的技术效果。
[0068] 可选的,在本实施例中,可以但不限于通过监测目标监测工具对业务虚拟机操作系统中的各个层上执行的目标函数进行监测。图4是根据本申请实施例的一种IO请求的监测方法的示意图,如图4所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、文件层104、块层106、宿主机用户态层116、文件层108、块层110和设备驱动层112以及存储设备114。其中,文件层104上执行有目标函数1,块层106上执行有目标函数2,文件层108上执行有目标函数3,块层110上执行有目标函数4。
[0069] 用户应用102可以但不限于发起一组IO请求,IO请求可以但不限于依次通过文件层104、块层106、宿主机用户态层116以及文件层108、块层110、设备驱动层112进行处理,实现从存储设备114读取IO请求所对应的文件,得到IO请求的结果;并将IO请求的结果逐个返回至设备驱动层112、块层110、文件层108、宿主机用户态层116、块层106、文件层104以及用户应用102。
[0070] 在业务虚拟机操作系统116对上述一组IO请求进行处理的过程中,可以但不限于通过目标监测工具202监测目标函数1、目标函数2、目标函数3和目标函数4,得到目标函数1的运行信息1、目标函数2的运行信息2、目标函数3的运行信息3以及目标函数4的运行信息4。根据文件层104和块层106之间的IO请求映射关系1、块层106和文件层108之间的IO请求映射关系2以及文件层108和块层110之间的IO请求映射关系3,以及上述运行信息1、运行信息2、运行信息3和运行信息4,确定业务虚拟机操作系统116中的各个层(即上述的文件层
104、块层106、文件层108以及块层110)处理同一个IO请求的处理时长。
[0071] 其中,上述步骤的执行主体可以为终端等,但不限于此。
[0072] 步骤S202和步骤S204的执行顺序是可以互换的,即可以先执行步骤S204,然后再执行步骤S202。
[0073] 在上述步骤S202提供的技术方案中,业务虚拟机操作系统中的一个层上可以但不限于执行一个或者多个函数,目标函数可以但不限于为在业务虚拟机操作系统中的各个层上执行的函数中所希望监测IO性能的函数。实现了灵活配置所需要监测的目标函数,提升了监测IO性能的灵活度。
[0074] 可选的,在本实施例中,每个目标函数的运行信息中包括一组IO请求中的多个IO请求所对应的多条运行信息,多条运行信息中可以但不限于包括各个目标函数输入的多个IO请求所对应的IO请求地址、多个IO请求所对应的IO请求长度以及各个目标函数执行各个IO请求的执行时间。
[0075] 可选的,在本实施例中,目标函数的运行信息中可以但不限于包括目标函数的函数名、各个目标函数处理IO请求的时间戳(可以但不限于包括各个目标函数开始处理IO请求的时间戳和完成处理IO请求的时间戳)、文件名或块设备名、IO请求地址及IO请求长度(length)等等信息。对于短时间内出现重复的相同的(offset, length)组合,IO请求处理过程总是遵循FIFO(First in First out,先进先出)的原则,因此可以通过时间戳来区分不同的IO请求。
[0076] 可选的,在本实施例中,所有的入口函数都是目标函数,并且目标函数中必须包括包含IO请求的地址及偏移(offset),通过结合IO请求的地址与偏移,实现了从业务虚拟机操作系统中的各个层上处理的IO请求中确定同一个IO请求,提升了确定同一个IO请求的准确性。
[0077] 在一个示范性实施例中,可以但不限于通过以下方式得到业务虚拟机操作系统中的N个目标函数的运行信息:在所述业务虚拟机操作系统运行时执行所述目标监测工具中的N个监测函数,得到所述N个目标函数的运行信息,其中,所述N个监测函数与所述N个目标函数具有一一对应的关系,所述N个监测函数中的各个监测函数用于获取所述N个目标函数中对应的一个目标函数的运行信息。
[0078] 可选的,在本实施例中,可以但不限于通过与目标函数一一对应的监测函数,实现对各个目标函数的监测。图5是根据本申请实施例的一种获取目标函数的运行信息的示意图,如图5所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、文件层104、块层106、宿主机用户态层116、文件层108、块层110和设备驱动层112以及存储设备114。其中,文件层104上执行有目标函数1,块层106上执行有目标函数2,文件层108上执行有目标函数3,块层110上执行有目标函数4。
[0079] 用户应用102可以但不限于发起一组IO请求,IO请求可以但不限于依次通过文件层104、块层106、宿主机用户态层116以及文件层108、块层110、设备驱动层112进行处理,实现从存储设备114读取IO请求所对应的文件,得到IO请求的结果;并将IO请求的结果逐个返回至设备驱动层112、块层110、文件层108、宿主机用户态层116、块层106、文件层104以及用户应用102。在业务虚拟机操作系统116对上述一组IO请求进行处理的过程中,分别执行目标监测工具202中的监测函数1、监测函数2、监测函数3和监测函数4,实现对目标函数1、目标函数2、目标函数3和目标函数4的监测,得到目标函数1的运行信息1、目标函数2的运行信息2、目标函数3的运行信息3以及目标函数4的运行信息4。
[0080] 在一个示范性实施例中,可以但不限于通过以下方式得到N个目标函数的运行信息:在所述业务虚拟机操作系统运行时,通过目标工具集将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息,其中,所述N个监测函数是根据所述目标工具集所构建的监测函数。
[0081] 可选的,在本实施例中,可以但不限于基于目标工具集构建监测函数,通过目标工具集在业务虚拟机操作系统的运行环境执行监测函数,图6是根据本申请实施例的一种执行监测函数的示意图,如图6所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、文件层104、块层106、宿主机用户态层116、文件层108、块层110和设备驱动层112以及存储设备114。其中,文件层104上执行有目标函数1,块层106上执行有目标函数2,文件层
108上执行有目标函数3,块层110上执行有目标函数4。
[0082] 用户应用102可以但不限于发起一组IO请求,IO请求可以但不限于依次通过文件层104、块层106、宿主机用户态层116以及文件层108、块层110、设备驱动层112进行处理,实现从存储设备114读取IO请求所对应的文件,得到IO请求的结果;并将IO请求的结果逐个返回至设备驱动层112、块层110、文件层108、宿主机用户态层116、块层106、文件层104以及用户应用102。
[0083] 在业务虚拟机操作系统116对一组IO请求进行处理的过程中,通过目标工具集204将目标监测工具202中的监测函数1、监测函数2、监测函数3和监测函数4在业务虚拟机操作系统116的运行环境206中执行,实现对目标函数1、目标函数2、目标函数3和目标函数4的监测,得到目标函数1的运行信息1、目标函数2的运行信息2、目标函数3的运行信息3以及目标函数4的运行信息4。
[0084] 在一个示范性实施例中,可以但不限于通过以下方式得到N个目标函数的运行信息:在所述业务虚拟机操作系统运行时,通过扩展伯克利包过滤器eBPF将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息。
[0085] 可选的,在本实施例中,目标工具集可以但不限于为扩展伯克利包过滤器eBPF(extended Berkeley Packet Filter)。可以但不限于基于eBPF实现IO性能追踪框架,IO性能追踪框架可以但不限于适用于虚拟化IO场景,也可用于容器,网络等应用场景。实现了对uprobe、kprobe以及静态追踪点(即上述的目标函数)处理同一个IO请求的处理过程的追踪。
[0086] 在一个示范性实施例中,可以但不限于通过以下方式设置N个监测函数:响应于接收到的监测指令,在所述目标监测工具中设置所述N个监测函数,其中,所述监测指令用于指示对所述N个目标函数进行监测。
[0087] 可选的,在本实施例中,一个监测函数可以但不限于用于监测一个目标函数。图7是根据本申请实施例的一种设置监测函数的示意图,如图7所示,在接收到监测指令的情况下,可以表明希望对多个目标函数进行监测,在这样的情况下,可以响应于接收到的监测指令,在目标监测工具202中设置所希望监测的多个目标函数所对应的监测函数(监测函数1、监测函数2、监测函数3和监测函数4)。
[0088] 在一个示范性实施例中,所述N个目标函数中的各个目标函数是以下之一:所述业务虚拟机操作系统中的内核态函数、用户态函数、静态函数。
[0089] 在上述步骤S204提供的技术方案中,由于IO请求在各层间处理的时候,地址会经过多次转换,也就是说,同一个IO请求在业务虚拟机操作系统中的不同层上进行处理的时候,同一个IO请求的IO请求地址和/或IO请求长度可能会发生变化(即上述的预设条件是指在每对层包括的两个层上同一个IO请求的IO请求信息不同),在这样的情况下,可以获取对层中包括的两个层之间的IO请求映射关系。
[0090] 可选的,在本实施例中,IO请求的长度可以但不限于与IO请求所请求的文件、数据等等的大小相对应。
[0091] 可选的,在本实施例中,IO请求映射关系可以但不限于包括每对层包括的两个层之间的IO请求地址和/或IO请求长度之间的映射关系。
[0092] 在一个示范性实施例中,可以但不限于通过以下步骤获取所述K对层中的第i对层包括的两个层之间的IO请求信息映射关系,得到所述K个IO请求信息映射关系中的第i个IO请求信息映射关系,其中,i为大于或等于1、且小于或等于K的正整数:通过所述第i对层包括的两个层的存储实例,确定所述第i对层包括的两个层之间的IO请求信息映射关系,得到所述第i个IO请求信息映射关系,其中,所述第i对层包括的两个层的存储实例中记录了在所述第i对层包括的两个层上同一个IO请求的IO请求信息。
[0093] 可选的,在本实施例中,可以但不限于通过对层包括的两个层的存储实例获取IO请求信息映射关系。图8是根据本申请实施例的一种获取IO请求映射关系的示意图,如图8所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、文件层104、块层106、宿主机用户态层116、文件层108、块层110和设备驱动层112以及存储设备114。其中,文件层104上执行有目标函数1,块层106上执行有目标函数2,文件层108上执行有目标函数3,块层
110上执行有目标函数4。
[0094] 用户应用102可以但不限于发起一组IO请求,IO请求可以但不限于依次通过文件层104、块层106、宿主机用户态层116以及文件层108、块层110、设备驱动层112进行处理,实现从存储设备114读取IO请求所对应的文件,得到IO请求的结果;并将IO请求的结果逐个返回至设备驱动层112、块层110、文件层108、宿主机用户态层116、块层106、文件层104以及用户应用102。
[0095] 对层1包括文件层104和块层106,对层2包括块层106和文件层108,对层3包括文件层108和块层110。可以但不限于通过对层1包括的文件层104和块层106的存储实例,确定对层1包括的文件层104和块层106之间的IO请求信息映射关系1。可以但不限于通过对层2包括的块层106和文件层108的存储实例,确定对层2包括的块层106和文件层108之间的IO请求信息映射关系2。可以但不限于通过对层3包括的文件层108和块层110的存储实例,确定对层3包括的文件层108和块层110之间的IO请求信息映射关系3。
[0096] 在一个示范性实施例中,可以但不限于通过以下方式配置IO请求信息映射关系:在所述业务虚拟机操作系统运行之前,配置所述K个IO请求信息映射关系。
[0097] 可选的,在本实施例中,可以但不限于在业务虚拟机操作系统运行之前,配置对层中包括的两个层之间的IO请求信息映射关系。图9是根据本申请实施例的一种配置IO请求信息映射关系的示意图一,如图9所示,业务虚拟机操作系统可以但不限于在时间t2开始运行,那么可以但不限于在时间t2之前的时间t1配置K个IO请求信息映射关系。通过这样的方式,实现了在业务虚拟机操作系统运行的过程中可以直接调用配置好的IO请求信息映射关系,减少了调用IO请求信息映射关系所需的时间,提升了监测IO请求的效率。
[0098] 在一个示范性实施例中,可以但不限于通过以下方式配置IO请求信息映射关系:在所述业务虚拟机操作系统运行的过程中,配置所述K个IO请求信息映射关系。
[0099] 可选的,在本实施例中,图10是根据本申请实施例的一种配置IO请求信息映射关系的示意图二,如图10所示,业务虚拟机操作系统可以但不限于在时间t3至时间t4内运行,那么可以但不限于在时间t3至时间t4内的时间t5配置K个IO请求信息映射关系。通过这样的方式,实现了在业务虚拟机操作系统运行的过程中,灵活按照所需要监测的IO请求,配置IO请求信息映射关系,提升了配置IO请求信息映射关系的灵活性。
[0100] 在一个示范性实施例中,可以但不限于通过以下方式获取每对层包括的两个层之间的IO请求信息映射关系:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态文件层和客户机内核态块层的情况下,获取所述客户机内核态文件层与所述客户机内核态块层之间的IO请求信息映射关系。
[0101] 可选的,在本实施例中,一对层包括的两个层可以但不限于为客户机内核态文件层和客户机内核态块层,可以但不限于获取客户机内核态文件层的层间地址(Guest File Address,简称GFA)和客户机内核态块层的层间地址(Guest Block Address,简称GBA)之间的映射关系作为IO请求信息映射关系。图11是根据本申请实施例的一种获取IO请求信息映射关系的示意图一,如图11所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、客户机内核态文件层302、客户机内核态块层304、宿主机用户态层116、层306、层308和设备驱动层112以及存储设备114。对层1包括客户机内核态文件层302和客户机内核态块层
304,对层2包括客户机内核态块层304和层306,对层3包括层306和层308。可以但不限于获取客户机内核态文件层302与客户机内核态块层304之间的IO请求信息映射关系。
[0102] 在一个示范性实施例中,可以但不限于通过以下方式获取每对层包括的两个层之间的IO请求信息映射关系:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态块层和宿主机内核态文件层的情况下,获取所述客户机内核态块层与所述宿主机内核态文件层之间的IO请求信息映射关系。
[0103] 可选的,在本实施例中,一对层包括的两个层可以但不限于为客户机内核态块层和宿主机内核态文件层,可以但不限于获取客户机内核态块层的层间地址(Guest Block Address,简称GBA)和宿主机内核态文件层的层间地址(Host File Address,简称HFA)之间的映射关系作为IO请求信息映射关系。图12是根据本申请实施例的一种获取IO请求信息映射关系的示意图二,如图12所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、层402、客户机内核态块层304、宿主机用户态层116、宿主机内核态文件层404、层408和设备驱动层112以及存储设备114。对层1包括层402和客户机内核态块层304,对层2包括客户机内核态块层304和宿主机内核态文件层404,对层3包括宿主机内核态文件层404和层
408。可以但不限于获取客户机内核态块层304与宿主机内核态文件层404之间的IO请求信息映射关系。
[0104] 在一个示范性实施例中,可以但不限于通过以下方式获取每对层包括的两个层之间的IO请求信息映射关系:在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的宿主机内核态文件层和宿主机内核态块层的情况下,获取所述宿主机内核态文件层与所述宿主机内核态块层之间的IO请求信息映射关系。
[0105] 可选的,在本实施例中,一对层包括的两个层可以但不限于为宿主机内核态文件层和宿主机内核态块层,可以但不限于获取宿主机内核态文件层的层间地址(Host File Address,简称HFA)和宿主机内核态块层的层间地址(Host Block Address,简称为HBA)之间的映射关系作为IO请求信息映射关系。图13是根据本申请实施例的一种获取IO请求信息映射关系的示意图三,如图13所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、层502、层504、宿主机用户态层116、宿主机内核态文件层404、宿主机内核态块层506和设备驱动层112以及存储设备114。对层1包括层502和层504,对层2包括层504和宿主机内核态文件层404,对层3包括宿主机内核态文件层404和宿主机内核态块层506。可以但不限于获取宿主机内核态文件层404与宿主机内核态块层506之间的IO请求信息映射关系。
[0106] 在上述步骤S206提供的技术方案中,根据监测的目标函数的运行信息以及IO请求映射关系,可以精确获得该IO请求在业务虚拟机操作系统中各个层的处理耗时(即上述的处理时长)。此外,也可以通过统计方法统计业务虚拟机操作系统的处理过程中各个阶段的平均、最大延时、波动信息等等信息,实现了对业务虚拟机操作系统中各个层的IO性能进行全面的追踪和监控,提升了监测对业务虚拟机操作系统运行状态的实时性。
[0107] 可选的,在本实施例中,在对IO请求进行处理的过程中,整个IO链路十分之长。而任意环节的波动都会影响到IO性能,比如:CPU(central processing unit,中央处理器)的压力变化可能会影响到宿主机对IO的响应速度;网络波动则可能影响到如iSCSI,nvme‑of等等性能;部分客户虚拟机的IO压力可能会影响到宿主机环境中其它虚拟机的IO性能等。通过本申请实施例中的IO请求的监测,可以实现从业务虚拟机操作系统的整体角度进行对业务虚拟机操作系统的性能进行监控、追踪和分析,为系统性能调优提供极大帮助,极大的提升了业务虚拟机操作系统的性能的调控效率。
[0108] 在一个示范性实施例中,可以但不限于通过对所述一组IO请求中的第i个IO请求执行以下步骤,确定一组IO请求中的同一个IO请求在M个层中的各个层上的处理时长,其中,i为大于或等于1的正整数,所述第i个IO请求的初始IO请求信息包括第i个初始IO请求地址以及第i个初始IO请求长度:根据所述K个IO请求信息映射关系和所述第i个IO请求的初始IO请求信息,在所述N个目标函数的运行信息中确定与所述第i个IO请求对应的执行时间,得到N个执行时间;根据所述N个执行时间,确定所述第i个IO请求在所述M个层中的各个层的处理时长。
[0109] 可选的,在本实施例中,可以但不限于以K等于3,M等于4,以及一组IO请求中的第1个IO请求为例,对本申请实施例中的确定第1个IO请求在业务虚拟机操作系统中的4个层中的各个层的处理时长进行解释和说明,可以但不限于适用于本申请实施例。图14是根据本申请实施例的一种确定同一个IO请求的处理时长的示意图,如图14所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、文件层104、块层106、宿主机用户态层116、文件层108、块层110和设备驱动层112以及存储设备114。其中,文件层104上执行有目标函数1,块层106上执行有目标函数2,文件层108上执行有目标函数3,块层110上执行有目标函数4。对层1包括文件层104和块层106,对层2包括块层106和文件层108,对层3包括文件层108和块层110。
[0110] 用户应用102可以但不限于发起一组IO请求(IO请求1、IO请求2和IO请求3),可以但不限于以IO请求1(即第1个IO请求)为例,IO请求1可以但不限于依次通过文件层104、块层106、宿主机用户态层116以及文件层108、块层110、设备驱动层112进行处理,实现从存储设备114读取IO请求1所请求的文件,得到IO请求1的结果;并将IO请求1的请求结果逐个返回至设备驱动层112、块层110、文件层108、宿主机用户态层116、块层106、文件层104以及用户应用102。
[0111] 在业务虚拟机操作系统116对IO请求1进行处理的过程中,可以但不限于通过目标监测工具202监测目标函数1、目标函数2、目标函数3和目标函数4,得到目标函数1的运行信息1、目标函数2的运行信息2、目标函数3的运行信息3以及目标函数4的运行信息4。根据文件层104和块层106之间的IO请求映射关系1、块层106和文件层108之间的IO请求映射关系2以及文件层108和块层110之间的IO请求映射关系3,以及IO请求1的初始IO请求信息,在运行信息1、运行信息2和运行信息3以及运行信息4中确定与IO请求1对应的执行时间1、执行时间2、执行时间3、执行时间4;再根据执行时间1、执行时间2、执行时间3以及执行时间4,分别确定IO请求1在文件层104、块层106、文件层108以及块层110的处理时长1、处理时长2、处理时长3和处理时长4。
[0112] 在一个示范性实施例中,可以但不限于通过以下步骤确定所述N个目标函数中的第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间,得到第j个执行时间,其中,j为大于或等于1、且小于或等于N的正整数:在j等于1的情况下,在所述N个目标函数中的第1个目标函数的运行信息中查找包括所述初始IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第1个目标函数的运行信息中与所述第i个IO请求对应的执行时间;在j大于1、且第j‑1个目标函数所在的层和所述第j个目标函数所在的层之间存在IO请求信息映射关系的情况下,获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息,并根据所述K个IO请求信息映射关系中与所述第j‑1个目标函数所在的层和所述第j个目标函数所在的层对应的IO请求信息映射关系,获取与所述第j‑1个IO请求信息具有映射关系的第j个IO请求信息;在所述第j个目标函数的运行信息中查找包括所述第j个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。
[0113] 可选的,在本实施例中,可以但不限于以业务虚拟机操作系统116对上述IO请求1(即第1个IO请求)进行处理的过程对本申请实施例中的确定执行时间的流程进行解释和说明(业务虚拟机操作系统116对上述IO请求1进行处理的流程可以参照图14进行理解,本申请实施例在此不再赘述),可以但不限于适用于本申请实施例。图15是根据本申请实施例的一种确定IO请求1对应的执行时间的示意图一,如图15所示,目标函数1所在的层与目标函数2所在的层具有IO请求映射关系1,目标函数2所在的层与目标函数3所在的层具有IO请求映射关系2,目标函数3所在的层与目标函数4所在的层具有IO请求映射关系3。可以但不限于根据第1个IO请求信息(即初始请求信息)从目标函数1的运行信息1中查找包括初始请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为第1个目标函数的运行信息中与IO请求1对应的执行时间1。
[0114] 可以但不限于根据第1个目标函数所在的层和第2个目标函数所在的层对应的IO请求信息映射关系1,获取与第1个IO请求信息具有映射关系的第2个IO请求信息;在第2个目标函数的运行信息2中查找包括第2个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为运行信息2中与IO请求1对应的执行时间2。
[0115] 可以但不限于根据第2个目标函数所在的层和第3个目标函数所在的层对应的IO请求信息映射关系2,获取与第2个IO请求信息具有映射关系的第3个IO请求信息;在第3个目标函数的运行信息3中查找包括第3个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为运行信息3中与IO请求1对应的执行时间3。
[0116] 可以但不限于根据第3个目标函数所在的层和第4个目标函数所在的层对应的IO请求信息映射关系3,获取与第3个IO请求信息具有映射关系的第4个IO请求信息;在第4个目标函数的运行信息4中查找包括第4个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为运行信息4中与IO请求1对应的执行时间4。
[0117] 在一个示范性实施例中,可以但不限于通过以下方式获取第i个IO请求的第j‑1个IO请求信息:将所述第j‑1个目标函数的运行信息中与所述第i个IO请求对应的IO请求地址以及IO请求长度确定为所述第j‑1个IO请求信息。
[0118] 在一个示范性实施例中,在j大于1、且第j‑1个目标函数所在的层和第j个目标函数所在的层之间不存在IO请求信息映射关系的情况下,可以但不限于通过以下方式确定第i个IO请求对应的执行时间:获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息;在所述第j个目标函数的运行信息中查找包括所述第j‑1个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。
[0119] 可选的,在本实施例中,在第j‑1个目标函数所在的层和第j个目标函数所在的层之间不存在IO请求信息映射关系不存在映射关系的情况下,可以但不限于将第j‑1个IO请求信息作为第j个IO请求信息。
[0120] 可以但不限于以业务虚拟机操作系统116对上述IO请求1(即第1个IO请求)进行处理的过程对本申请实施例中的确定执行时间的流程进行解释和说明。图16是根据本申请实施例的一种确定IO请求1对应的执行时间的示意图二,如图16所示,目标函数1所在的层与目标函数2所在的层具有IO请求映射关系1,目标函数2所在的层与目标函数3所在的层不具有IO请求映射关系,目标函数3所在的层与目标函数4所在的层具有IO请求映射关系2。
[0121] 可以但不限于根据第1个IO请求信息(即初始请求信息)从目标函数1的运行信息1中查找包括初始请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为第1个目标函数的运行信息中与IO请求1对应的执行时间1。
[0122] 可以但不限于根据第1个目标函数所在的层和第2个目标函数所在的层对应的IO请求信息映射关系1,获取与第1个IO请求信息具有映射关系的第2个IO请求信息;在第2个目标函数的运行信息2中查找包括第2个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为运行信息2中与IO请求1对应的执行时间2。
[0123] 可以但不限于在第3个目标函数的运行信息3中查找包括第2个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间3确定为第3个目标函数的运行信息3中与IO请求1对应的执行时间3。
[0124] 可以但不限于根据第3个目标函数所在的层和第4个目标函数所在的层对应的IO请求信息映射关系2,获取与第3个IO请求信息具有映射关系的第4个IO请求信息;在第4个目标函数的运行信息4中查找包括第4个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为运行信息4中与IO请求1对应的执行时间4。
[0125] 在一个示范性实施例中,可以但不限于通过以下步骤确定所述第i个IO请求在所述M个层中的第j个层的处理时长,其中,j为大于或等于1、且小于或等于M的正整数:在所述N个目标函数中的2个目标函数在所述第j个层上执行的情况下,将所述N个执行时间中与所述2个目标函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长;和/或在所述N个目标函数中的P个目标函数在所述第j个层上执行、且所述P个目标函数包括所述第j个层的入口函数和出口函数的情况下,将所述N个执行时间中与所述入口函数和所述出口函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长,其中,P为大于2的正整数。
[0126] 可选的,在本实施例中,在一个层上执行多个目标函数的情况下,可以但不限于根据该层上的多个目标函数的执行时间,确定该层处理IO请求的处理时长。图17是根据本申请实施例的一种确定IO请求1对应的执行时间的示意图三,如图17所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、文件层104、块层106、宿主机用户态层116、文件层108、块层110和设备驱动层112以及存储设备114。其中,文件层104上执行有目标函数1,块层106上执行有入口函数1和出口函数2(入口函数1和入口函数2均为目标函数),文件层108上执行有目标函数3,块层110上执行有目标函数4和目标函数5。
[0127] 用户应用102可以但不限于发起一组IO请求,可以但不限于以一组IO请求中的IO请求1为例,IO请求1可以但不限于依次通过文件层104、块层106、宿主机用户态层116以及文件层108、块层110、设备驱动层112进行处理,实现从存储设备114读取IO请求1所对应的文件,得到IO请求1的结果;并将IO请求1的结果逐个返回至设备驱动层112、块层110、文件层108、宿主机用户态层116、块层106、文件层104以及用户应用102。
[0128] 在业务虚拟机操作系统116对上述IO请求1进行处理的过程中,可以但不限于通过目标监测工具202监测目标函数1、入口函数、出口函数、目标函数3和目标函数4和目标函数5,得到目标函数1的运行信息1、入口函数的运行信息2、出口函数的运行信息3、目标函数3的运行信息4、目标函数4的运行信息5以及目标函数5的运行信息6。再根据上述运行信息1、运行信息2、运行信息3和运行信息4以及运行信息5和运行信息6,确定业务虚拟机操作系统
116中的文件层104处理IO请求1的执行时间1,块层106处理IO请求1的执行时间2和执行时间3,文件层108处理IO请求1的执行时间4以及块层110处理IO请求1的执行时间5和执行时间6。可以但不限于将执行时间2和执行时间3之间的差值确定为块层106处理IO请求1的处理时长,可以但不限于将执行时间5和执行时间6之间的差值确定为块层110上处理IO请求1的处理时长。
[0129] 在一个示范性实施例中,所述N个目标函数是按照处理所述第i个IO请求的先后顺序排列的。
[0130] 可选的,在本实施例中,业务虚拟机操作系统中的各个层上执行的目标函数是按照处理每个IO请求的步骤的先后顺序进行排列的。图18是根据本申请实施例的一种目标函数的顺序的示意图,如图18所示,业务虚拟机操作系统116中可以但不限于包括用户应用102、文件层104、块层106、宿主机用户态层116、文件层108、块层110和设备驱动层112以及存储设备114。其中,文件层104上执行有目标函数1,块层106上执行有入口函数1和出口函数2(入口函数1和入口函数2均为目标函数),文件层108上执行有目标函数3,块层110上执行有目标函数4和目标函数5。
[0131] 用户应用102可以但不限于发起一组IO请求,可以但不限于以一组IO请求中的IO请求1为例,IO请求1可以但不限于依次通过文件层104、块层106、宿主机用户态层116以及文件层108、块层110、设备驱动层112进行处理,实现从存储设备114读取IO请求1所对应的文件,得到IO请求1的结果;并将IO请求1的结果逐个返回至设备驱动层112、块层110、文件层108、宿主机用户态层116、块层106、文件层104以及用户应用102。那么目标函数的顺序依次为目标函数1,入口函数,出口函数、目标函数3、目标函数4和目标函数5。
[0132] 在一个示范性实施例中,可以但不限于通过以下方式获取一组IO请求:在所述业务虚拟机操作系统运行时,获取接收到目标读取指令,其中,所述目标读取指令用于读取目标文件;将所述目标读取指令转换成所述一组IO请求,其中,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址是根据所述目标文件的存储地址确定得到的,所述一组IO请求中的各个IO请求具有对应的初始IO请求长度是根据所述目标文件的文件大小确定得到的。
[0133] 可选的,在本实施例中,可以但不限于根据目标文件的文件大小确定各个IO请求所对应的初始IO请求长度。图19是根据本申请实施例的一种获取一组IO请求的示意图,如图19所示,文件在底层实际数据组织一般由三部分组成:inode、meta和data,其中data中存储的是用户数据。由于data在磁盘上分布式是不连续的,因此文件内偏移与该数据段在盘上实际的地址需通过其它地方来记录,这个映射关系就保存在meta中。meta中保存的是多条记录,每条记录对应一个连续数据段,记录内容是该数据段在文件内的偏移、长度,以及在磁盘上的实际位置。
[0134] 比如:目标读取指令用于读取的目标文件共7M,其中,2M的文件记录在磁盘上的0x12340000位置上,文件内偏移为0M;4M的文件记录在磁盘上的0x56780000位置上,文件内偏移为2M;1M的文件记录在磁盘上的0x00100000位置上,文件内偏移为6M。那么可以但不限于将目标读取指令转换成一组IO请求(IO请求1、IO请求2和IO请求3),其中,各个IO请求(IO请求1、IO请求2和IO请求3)具有对应的初始IO请求地址(初始IO请求地址1、初始IO请求地址2和初始IO请求地址3)是分别根据目标文件的存储地址(磁盘上的0x12340000位置、磁盘上的0x56780000位置和磁盘上的0x00100000位置)确定得到的,各个IO请求(IO请求1、IO请求2和IO请求3)具有对应的初始IO请求长度(初始IO请求长度1、初始IO请求长度2和初始IO请求长度3)是根据目标文件的文件大小(分别为2M、4M和1M)确定得到的。
[0135] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
[0136] 在本实施例中还提供了一种IO请求的监测装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0137] 图20是根据本申请实施例的IO请求的监测装置的结构框图,如图20所示,该装置包括:
[0138] 执行模块2002,用于在业务虚拟机操作系统运行时执行目标监测工具,得到所述业务虚拟机操作系统中的N个目标函数的运行信息,其中,所述业务虚拟机操作系统用于在运行时对一组IO请求进行处理,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址以及初始IO请求长度,所述目标监测工具用于获取所述N个目标函数的运行信息,所述N个目标函数是在所述业务虚拟机操作系统中的M个层上执行的函数,所述N个目标函数中的各个目标函数是在所述M个层中对应的一个层上执行的函数,N等于1或为大于或等于2的正整数,M等于1或为大于或等于2的正整数,所述N个目标函数的运行信息包括所述N个目标函数中的各个目标函数输入的IO请求地址以及IO请求长度、所述各个目标函数的执行时间;
[0139] 第一获取模块2004,用于在所述M个层中存在满足预设条件的K对层、且所述K对层中的每对层包括两个层的情况下,获取所述K对层中的每对层包括的两个层之间的IO请求信息映射关系,共得到K个IO请求信息映射关系,其中,所述预设条件是指在所述每对层包括的两个层上同一个IO请求的IO请求信息不同,所述IO请求信息包括IO请求地址和/或IO请求长度,K为大于或等于1的正整数,所述IO请求信息映射关系用于表示在所述两个层上同一个IO请求的IO请求信息之间的映射关系;
[0140] 确定模块2006,用于根据所述N个目标函数的运行信息以及所述K个IO请求信息映射关系,确定所述一组IO请求中的同一个IO请求在所述M个层中的各个层上的处理时长。
[0141] 通过上述装置,在业务虚拟机操作系统中的各个层对IO请求进行处理的过程中,可以对上述各个层上执行的函数中所希望监测的函数进行监测。此外,在上述各个层对IO请求进行处理的过程中,IO请求地址会经过多次转换;因此结合同一个IO请求的IO请求信息在上述各个层之间的映射关系,实现了对在上述各个层上处理同一个IO请求的处理过程的全面监测。因此,可以解决IO请求的监测的全面性较低问题,达到提升IO请求的监测的全面性的技术效果。
[0142] 在一个示范性实施例中,所述执行模块,包括:
[0143] 执行单元,用于在所述业务虚拟机操作系统运行时执行所述目标监测工具中的N个监测函数,得到所述N个目标函数的运行信息,其中,所述N个监测函数与所述N个目标函数具有一一对应的关系,所述N个监测函数中的各个监测函数用于获取所述N个目标函数中对应的一个目标函数的运行信息。
[0144] 在一个示范性实施例中,所述执行单元,用于:
[0145] 在所述业务虚拟机操作系统运行时,通过目标工具集将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息,其中,所述N个监测函数是根据所述目标工具集所构建的监测函数。
[0146] 在一个示范性实施例中,所述执行单元,用于:
[0147] 在所述业务虚拟机操作系统运行时,通过扩展伯克利包过滤器eBPF将所述N个监测函数在所述业务虚拟机操作系统的运行环境中执行,得到所述N个目标函数的运行信息。
[0148] 在一个示范性实施例中,所述装置还包括:
[0149] 设置模块,用于在业务虚拟机操作系统运行时执行目标监测工具之前,响应于接收到的监测指令,在所述目标监测工具中设置所述N个监测函数,其中,所述监测指令用于指示对所述N个目标函数进行监测。
[0150] 在一个示范性实施例中,所述N个目标函数中的各个目标函数是以下之一:所述业务虚拟机操作系统中的内核态函数、用户态函数、静态函数。
[0151] 在一个示范性实施例中,所述第一获取模块用于通过执行以下步骤获取所述K对层中的第i对层包括的两个层之间的IO请求信息映射关系,得到所述K个IO请求信息映射关系中的第i个IO请求信息映射关系,其中,i为大于或等于1、且小于或等于K的正整数:通过所述第i对层包括的两个层的存储实例,确定所述第i对层包括的两个层之间的IO请求信息映射关系,得到所述第i个IO请求信息映射关系,其中,所述第i对层包括的两个层的存储实例中记录了在所述第i对层包括的两个层上同一个IO请求的IO请求信息。
[0152] 在一个示范性实施例中,所述装置还包括:
[0153] 第一配置模块,用于在所述业务虚拟机操作系统运行之前,配置所述K个IO请求信息映射关系。
[0154] 在一个示范性实施例中,所述装置还包括:
[0155] 第二配置模块,用于在所述业务虚拟机操作系统运行的过程中,配置所述K个IO请求信息映射关系。
[0156] 在一个示范性实施例中,所述第一获取模块,包括:
[0157] 第一获取单元,用于在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态文件层和客户机内核态块层的情况下,获取所述客户机内核态文件层与所述客户机内核态块层之间的IO请求信息映射关系。
[0158] 在一个示范性实施例中,所述第一获取模块,包括:
[0159] 第二获取单元,用于在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的客户机内核态块层和宿主机内核态文件层的情况下,获取所述客户机内核态块层与所述宿主机内核态文件层之间的IO请求信息映射关系。
[0160] 在一个示范性实施例中,所述第一获取模块,包括:
[0161] 第三获取单元,用于在所述K对层中的一对层包括的两个层为所述业务虚拟机操作系统中的宿主机内核态文件层和宿主机内核态块层的情况下,获取所述宿主机内核态文件层与所述宿主机内核态块层之间的IO请求信息映射关系。
[0162] 在一个示范性实施例中,所述确定模块用于对所述一组IO请求中的第i个IO请求执行以下步骤,其中,i为大于或等于1的正整数,所述第i个IO请求的初始IO请求信息包括第i个初始IO请求地址以及第i个初始IO请求长度:根据所述K个IO请求信息映射关系和所述第i个IO请求的初始IO请求信息,在所述N个目标函数的运行信息中确定与所述第i个IO请求对应的执行时间,得到N个执行时间;根据所述N个执行时间,确定所述第i个IO请求在所述M个层中的各个层的处理时长。
[0163] 在一个示范性实施例中,所述确定模块,用于通过执行以下步骤确定所述N个目标函数中的第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间,得到第j个执行时间,其中,j为大于或等于1、且小于或等于N的正整数:在j等于1的情况下,在所述N个目标函数中的第1个目标函数的运行信息中查找包括所述初始IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第1个目标函数的运行信息中与所述第i个IO请求对应的执行时间;在j大于1、且第j‑1个目标函数所在的层和所述第j个目标函数所在的层之间存在IO请求信息映射关系的情况下,获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息,并根据所述K个IO请求信息映射关系中与所述第j‑1个目标函数所在的层和所述第j个目标函数所在的层对应的IO请求信息映射关系,获取与所述第j‑1个IO请求信息具有映射关系的第j个IO请求信息;在所述第j个目标函数的运行信息中查找包括所述第j个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。
[0164] 在一个示范性实施例中,所述确定模块用于通过执行以下步骤获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息:将所述第j‑1个目标函数的运行信息中与所述第i个IO请求对应的IO请求地址以及IO请求长度确定为所述第j‑1个IO请求信息。
[0165] 在一个示范性实施例中,所述装置还包括:
[0166] 第二获取模块,用于在j大于1、且第j‑1个目标函数所在的层和第j个目标函数所在的层之间不存在IO请求信息映射关系的情况下,获取所述第j‑1个目标函数所在的层上所述第i个IO请求的第j‑1个IO请求信息;
[0167] 处理模块,用于在所述第j个目标函数的运行信息中查找包括所述第j‑1个IO请求信息的运行信息,并将查找到的运行信息中包括的执行时间确定为所述第j个目标函数的运行信息中与所述第i个IO请求对应的执行时间。
[0168] 在一个示范性实施例中,所述确定模块,用于通过以下步骤确定所述第i个IO请求在所述M个层中的第j个层的处理时长,其中,j为大于或等于1、且小于或等于M的正整数:在所述N个目标函数中的2个目标函数在所述第j个层上执行的情况下,将所述N个执行时间中与所述2个目标函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长;和/或在所述N个目标函数中的P个目标函数在所述第j个层上执行、且所述P个目标函数包括所述第j个层的入口函数和出口函数的情况下,将所述N个执行时间中与所述入口函数和所述出口函数对应的2个执行时间之间的差值确定为所述第i个IO请求在所述第j个层的处理时长,其中,P为大于2的正整数。
[0169] 在一个示范性实施例中,所述N个目标函数是按照处理所述第i个IO请求的先后顺序排列的。
[0170] 在一个示范性实施例中,其特征在于,所述装置还包括:
[0171] 第三获取模块,用于在所述业务虚拟机操作系统运行时,获取接收到目标读取指令,其中,所述目标读取指令用于读取目标文件;
[0172] 转换模块,用于将所述目标读取指令转换成所述一组IO请求,其中,所述一组IO请求中的各个IO请求具有对应的初始IO请求地址是根据所述目标文件的存储地址确定得到的,所述一组IO请求中的各个IO请求具有对应的初始IO请求长度是根据所述目标文件的文件大小确定得到的。
[0173] 需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
[0174] 本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
[0175] 在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read‑Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
[0176] 本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
[0177] 在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
[0178] 本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
[0179] 显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
[0180] 以上所述仅为本申请的优选实施例而已,并不用于限制本申请实施例,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请实施例的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。