检测I/O性能抖动的方法以及装置与流程

文档序号:30060652发布日期:2022-05-17 23:27阅读:254来源:国知局
检测I/O性能抖动的方法以及装置与流程
检测i/o性能抖动的方法以及装置
技术领域
1.本说明书实施例涉及计算机技术领域,特别涉及一种方法。本说明书一个或者多个实施例同时涉及一种检测i/o性能抖动的装置,一种计算设备,以及一种计算机可读存储介质。


背景技术:

2.在云存储环境下,可能会由于各种原因出现i/o性能抖动。要想解决i/o性能抖动的问题,首先要对性能抖动进行检测。目前检测i/o性能抖动,在业内用的比较多的是blktrace工具,其通过linux内核下blktrace模块实现了对linux存储i/o事件捕获的功能,进而进行i/o性能分析。
3.但是,由于blktrace过于集中分析i/o栈的block层,分析的不够全面而且结果过于离散,无法清晰地的给出i/o性能抖动的瓶颈点。


技术实现要素:

4.有鉴于此,本说明书实施例提供了一种检测i/o性能抖动的方法。本说明书一个或者多个实施例同时涉及一种检测i/o性能抖动的装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。
5.根据本说明书实施例的第一方面,提供了一种检测i/o性能抖动的方法,包括:采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,其中,所述多个关键状态至少包括:i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态;解析所述i/o请求,以获取所述i/o请求的唯一标识信息;记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系;根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。
6.可选地,所述多个关键状态,还包括:i/o请求产生的状态、i/o请求下发至驱动的状态;所述多个关键区间至少包括:第一状态与第二状态之间形成的关键区间,其中,所述第一状态为所述i/o请求产生的状态或者所述i/o请求下发至驱动的状态,所述第二状态为所述i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态或者i/o请求结束的状态;以及,所述i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态中任意两对关键状态形成的两个关键区间,其中,一对关键状态对应形成一个关键区间。
7.可选地,所述采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,包括:基于内核追踪技术,在i/o生命周期内多个关键状态分别对应的系统内核函数上挂上钩子函数;其中,所述钩子函数用于从所挂的系统内核函数获取所述i/o请求达到所述关键状态的时间戳。
8.可选地,所述记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系,包括:通过以所述i/o请求的唯一标识信息为key,对hash map进行搜索;如果
查找到以所述i/o请求的唯一标识信息为key的元素,在所述元素中记录所述关键状态对应的时间信息;如果未查找到以所述i/o请求的唯一标识信息为key的元素,增加以所述i/o请求的唯一标识信息为key的元素,在所述元素中记录所述关键状态对应的时间信息。
9.可选地,在所述根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息之前,还包括:根据所述对应关系中记录的时间信息,统计每个i/o请求的总延迟;通过将每个i/o请求对应的总延迟与预设延迟阈值比较,从所述若干个i/o请求中剔除未发生性能抖动的i/o请求。
10.可选地,所述根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果,包括:根据所述对应关系,按每两个相邻关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟消耗分布、最大耗时、最小耗时、平均耗时中的任一种或多种分析结果;其中,所述延迟消耗分布具体根据所述若干个i/o请求在对应关键区间中的耗时占所述多个关键区间中的耗时的占比得到;所述最大耗时具体根据所述若干个i/o请求在对应关键区间中延迟最大的i/o请求的耗时得到;所述最小耗时具体根据所述若干个i/o请求在对应关键区间中延迟最小的i/o请求的耗时得到;所述平均耗时具体根据所述若干个i/o请求在对应关键区间中耗时的平均值得到。
11.可选地,还包括:从解析若干个i/o请求的解析结果中,获取进程相关的关键信息;根据所述关键信息,按每个进程分析所述时间信息,得到多个进程各自对应的延迟分析结果。
12.可选地,还包括:根据所述时间信息,确定采集到的i/o请求中i/o总延迟最大的i/o请求;和/或,输出所述多个关键区间各自对应的延迟分析结果,并在输出中标识出所述多个关键区间中延迟最大的区间。
13.可选地,还包括:统计总i/o数、读写i/o数、清空i/o数、i/o请求对应的操作磁盘的位置、i/o请求对应的操作磁盘的长度、i/o请求对应的队列信息中的一种或多种附加信息;在输出所述延迟分析结果时,输出所述附加信息。
14.根据本说明书实施例的第二方面,提供了一种检测i/o性能抖动的装置,包括:信息采集模块,被配置为采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,其中,所述多个关键状态至少包括:i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态。请求解析模块,被配置为解析所述i/o请求,以获取所述i/o请求的唯一标识信息。关系记录模块,被配置为记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系。延迟分析模块,被配置为根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。
15.根据本说明书实施例的第三方面,提供了一种计算设备,包括:存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,其中,所述多个关键状态至少包括:i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态;解析所述i/o请求,以获取所述i/o请求的唯一标识信息;记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系;根据所述对应关系,按任意两个关键
状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。
16.根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现本说明书任意实施例所述检测i/o性能抖动的方法的步骤。
17.本说明书一个实施例提供了检测i/o性能抖动的方法,由于该方法采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,而所述多个关键状态至少包括i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态,i/o请求结束的状态这几个对性能分析具有重要影响的状态,并记录关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系,因此,在对若干个i/o请求采集完成之后,能够根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到对性能分析具有重要影响的多个关键区间各自对应的延迟分析结果。可见,该方法能够检测出i/o请求的生命周期内多个关键区间的延迟分析结果,分析更为全面,延迟分析结果能够较为清晰地勾勒出i/o请求的生命周期内关键区间上的性能瓶颈点。
附图说明
18.图1是本说明书一个实施例提供的一种检测i/o性能抖动的方法的流程图;
19.图2是本说明书一个实施例提供的i/o请求的生命周期内五个关键状态的示意图;
20.图3是本说明书一个实施例提供的基于hash map记录对应关系的示意图;
21.图4是本说明书一个实施例提供的非抖动i/o剔除流程示意图;
22.图5-1是本说明书一个实施例提供的一种json格式的延迟分析结果示意图;
23.图5-2是本说明书另一个实施例提供的一种json格式的延迟分析结果示意图;
24.图6是本说明书一个实施例提供的一种检测i/o性能抖动的装置的结构示意图;
25.图7是本说明书另一个实施例提供的一种检测i/o性能抖动的装置的结构示意图;
26.图8是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
27.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
28.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
29.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
30.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
31.ebpf,(berkeley packet filter)。是一个用于过滤网络报文的架构,可以用于内核追踪(kernel tracing)、应用性能调优/检测、流控(traffic control)等领域。
32.i/o,输入/输出(input/output)。
33.在本说明书中,提供了一种检测i/o性能抖动的方法,本说明书同时涉及一种检测i/o性能抖动的装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
34.图1示出了根据本说明书一个实施例提供的一种检测i/o性能抖动的方法的流程图,包括步骤102至步骤110。
35.步骤102:采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,其中,所述多个关键状态至少包括:i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态。
36.其中,所述多个关键状态,指一个io生命周期内被传输过程中所经历的多个关键状态。例如,生命周期内可以包括若干个关键状态,所述多个关键状态可以是生命周期内的所有阶段或者部分阶段的状态。
37.步骤104:解析所述i/o请求,以获取所述i/o请求的唯一标识信息。
38.其中,所述唯一标识信息,可以根据一个i/o请求中相对固定的一项或多项请求信息来确定。例如,可以使用i/o请求所描述磁盘操作起始扇区、io产生时间、磁盘的主次设备号、产生io进程所在的cpu编号、硬件队列编号等等,任选两种组合作为唯一标识信息。
39.步骤106:记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系。
40.其中,一个i/o请求的唯一标识信息,可以对应多个关键状态,且其中每个关键状态可以各对应一个时间信息。
41.步骤108:根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。
42.例如,根据所述对应关系,可以按每两个相邻关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。一个i/o请求在生命周期内经历的各个状态,是有先后顺序的,因此,多个关键状态同样有先后顺序,每两个相邻关键状态之间可以为一个关键区间,多个关键区间之间没有交叉和覆盖。再例如,也可以不论是否相邻,按需选多对关键状态,每对关键状态为一个关键区间,从而划分出多个关键区间,该多个关键区间之间,可以交叉,可以覆盖,可以按需对这些关键区间的时间信息进行分析。
43.延迟也即时延,是指i/o请求在其生命周期内所经历的i/o各路径上的时间损耗,例如,os耗时、磁盘耗时等。再例如,os耗时更细的分为block层耗时、驱动耗时、i/o的complete耗时等。因此,可以根据具体应用场景下i/o请求传输路径以及性能抖动的特点,设置对应的关键状态以及分析时间信息的方式,本说明书实施例提供的方法对此并不进行限制。
44.由于该方法采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,多个关键状态至少包括i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态,i/o
请求结束的状态,并记录关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系,因此,在对若干个i/o请求采集完成之后,能够根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。可见,该方法能够检测出i/o请求的生命周期内多个关键区间的延迟分析结果,分析更为全面,延迟分析结果能够较为清晰地勾勒出i/o请求的生命周期内关键区间的性能瓶颈点。
45.为了更加全面地勾勒i/o请求的生命周期的全貌,本说明书一个或多个实施例提供的方法中,所述多个关键状态,还可以包括:i/o请求产生的状态、i/o请求下发至驱动的状态。相应地,所述多个关键区间至少包括:第一状态与第二状态之间形成的关键区间,其中,所述第一状态为所述i/o请求产生的状态或者所述i/o请求下发至驱动的状态,所述第二状态为所述i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态或者i/o请求结束的状态;以及,所述i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态中任意两对关键状态形成的两个关键区间,其中,一对关键状态对应形成一个关键区间。
46.例如,结合上述实施例,根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果,可以包括:根据所述对应关系,按所述多个关键状态中每相邻两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。其中,所述i/o请求产生的状态与所述i/o请求下发至驱动的状态为相邻的两个关键状态、所述i/o请求下发至驱动的状态与i/o请求下发至磁盘的状态为相邻的两个关键状态、所述i/o请求下发至磁盘的状态与磁盘完成i/o请求的状态为相邻的两个关键状态、所述磁盘完成i/o请求的状态与所述i/o请求结束的状态为相邻的两个关键状态。
47.根据linux内核存储i/o软件栈的特点,如图2所示的i/o请求的生命周期内五个关键状态的示意图所示,在用于存储的i/o请求的生命周期内经过的传输路径上,划分出i/o请求产生(如图2所示的i/o_start状态)、i/o请求下发至驱动(如图2所示的dispatch状态)、i/o请求下发至磁盘(如图2所示的issue_disk状态)、磁盘完成i/o请求(如图2所示的disk_complete状态)、i/o请求结束(如图2所示的i/o_complete状态)五个关键状态。根据这五个关键状态以及分别对应的时间信息,可以对应确定出四个关键区间的延迟,可以分别定义为:block延迟、driver延迟、disk延迟、complete延迟。分析时间信息时,可以通过以下对延迟的描述进行计算,得到分析所需要的耗时。具体地,例如:
48.block延迟:block又可称为通用块设备层(generic block layer),是linux内核的一个重要组成部分,它对底层物理存储设备的能力、i/o数据模型进行了抽象,处理系统所有对块设备请求的入口。block延迟,是指计算i/o请求经过这层软件的耗时。例如,block延迟t_block=t_dispatch-t_i/o_start。t_dispatch为i/o请求下发至驱动的状态对应的时间信息,t_i/o_start为i/o请求产生的状态对应的时间信息。
49.driver延迟:是指i/o请求经过磁盘驱动层软件的耗时。例如,driver延迟t_driver=t_issue_disk-t_dispatch。其中,t_issue_disk为i/o请求下发至磁盘的状态对应的时间信息。
50.disk延迟:是指磁盘完成i/o请求的耗时。例如,disk延迟t_disk=t_disk_complete-t_issue_disk。其中,t_disk_complete为磁盘完成i/o请求的状态对应的时间信息。
51.complete延迟:是指磁盘完成i/o后到结束i/o生命周期这层软件上的耗时。例如,complete延迟t_complete=t_i/o_complete-t_disk_complete。t_i/o_complete为结束i/o请求的时间。
52.本说明书实施例提供的方法,对采集i/o请求达到生命周期内的多个关键状态时分别对应的时间信息的具体方式并不进行限制。例如,可以基于内核追踪技术,在i/o生命周期内多个关键状态分别对应的系统内核函数上挂上钩子函数;其中,所述钩子函数用于从所挂的系统内核函数获取所述i/o请求达到所述关键状态的时间戳。更具体地,例如,可以基于内核追踪技术ebpf,在上述五个关键状态对应的系统内核代码函数上挂上自定义的钩子函数。钩子函数,允许编程者插入自定义程序,通常由打包好的程序提供接口。在该实施例中,可以在钩子函数中插入用于从内核函数获取时间戳和关心的i/o请求信息的程序。
53.例如,在linux系统中,i/o请求产生的状态对应的系统内核函数可以是block_getrq;i/o请求下发至驱动的状态对应的系统内核函数可以是block_rq_issue;i/o请求下发至磁盘的状态对应的系统内核函数可以是virti/o_queue_rq/scsi_dispatch_cmd/nvme_queue_rq;磁盘完成i/o请求的状态对应的系统内核函数可以是virtblk_done/scsi_done/nvme_complete_rq;i/o请求结束的状态对应的系统内核函数可以是block_rq_complete。
54.在采集到时间信息之后,为了便于分析统计,需要将时间信息记录下来。由于i/o请求经过例如上述五个关键状态时,需要在记录时,确保将相同i/o请求的信息对应起来,这样才能在统计时根据对应关系确定各个关键状态的时间戳。因此,本说明书实施例提供的方法中,所述记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系,可以包括:通过以所述i/o请求的唯一标识信息为key(关键字),对hash map(哈希图)进行搜索;如果查找到以所述i/o请求的唯一标识信息为key的元素,在所述元素中记录所述关键状态对应的时间信息;如果未查找到以所述i/o请求的唯一标识信息为key的元素,增加以所述i/o请求的唯一标识信息为key的元素,在所述元素中记录所述关键状态对应的时间信息。
55.在该实施例中,通过hash map能够快速的实现对相同i/o请求的关键状态以及时间信息的增、删、改、查,有效提高分析效率。例如,可以基于ebpf的hash map数据通信机制实现。具体地,例如,可以使用i/o请求携带的一项或多项信息作为hash map的key值,只要能唯一标识一个i/o请求即可。例如,可以使用i/o请求携带的磁盘操作起始扇区、i/o请求产生时间、i/o请求操作磁盘的主次设备号、产生i/o请求的进程所在的cpu编号、硬件队列编号等等中的任两项信息的组合作为key值。
56.在针对每个关键状态采集到信息之后,通过key值对hash map进行搜索,若能查到对应的元素,表明当前i/o请求已经存在,对对应的元素做修改以增加信息更新元素即可。如图3所示的基于hash map记录对应关系的示意图,当通过key值对hash map进行搜索,未查找到元素时,增加元素,记录i/o请求产生时间t_i/o_start;若查找到元素,则修改元素,先后记录i/o请求下发至驱动的时间t_dispatch、i/o请求下发至磁盘的时间t_issue_disk,磁盘完成i/o请求时间t_disk_complete、结束i/o请求的时间t_i/o_complete。
57.另外,为了提高分析效率,本说明书实施例提供的方法,还可以剔除非抖动i/o,避免因为数据量太大造成数据分析压力。具体地,当一个i/o的总延迟时间没有超出预设阈值
的情况下,这个i/o就是非抖动i/o,否则,这个i/o就是抖动i/o。因此,本说明书实施例提供的方法,在所述根据对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息之前,还包括:根据所述对应关系中记录的时间信息,统计每个i/o请求的总延迟;通过将每个i/o请求对应的总延迟与预设延迟阈值比较,从所述若干个i/o请求中剔除未发生性能抖动的i/o请求。
58.例如,如图4所示的非抖动i/o剔除流程示意图,可以通过给定一个时间阈值t,当采集完时间信息之后,将每个i/o请求t_i/o_complete减去t_i/o_start的结果与t进行比较,如果超过,则确定该i/o请求为发生性能抖动的i/o请求,进而进一步解析i/o请求、分析统计数据、格式化输出最后输出诊断结果,如果未超过,则确定该i/o请求为非抖动,将该i/o请求剔除。例如,可以从hash map中剔除未发生抖动的i/o请求对应的元素。
59.本说明书实施例提供的方法对分析时间信息的分析方式并不进行限制,可以按照具体应用场景的需要设置所需要分析的角度。例如,为了满足一些应用场景下深入分析的需要,本说明书一个或多个实施例中,所述根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果,包括:根据所述对应关系,按每两个相邻关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟消耗分布、最大耗时、最小耗时、平均耗时中的任一种或多种分析结果。
60.其中,所述延迟消耗分布具体根据所述若干个i/o请求在对应关键区间中的耗时占所述多个关键区间中的耗时的占比得到;
61.所述最大耗时具体根据所述若干个i/o请求在对应关键区间中延迟最大的i/o请求的耗时得到;
62.所述最小耗时具体根据所述若干个i/o请求在对应关键区间中延迟最小的i/o请求的耗时得到;
63.所述平均耗时具体根据所述若干个i/o请求在对应关键区间中耗时的平均值得到。
64.例如,如图5-1所示的json格式的一种延迟分析结果示意图,“component”表示关键区间;“percent”表示延迟消耗分布;“max”表示最大延迟的i/o请求的耗时;“min”表示最小延迟的i/o请求的耗时;“avg”表示若干个i/o请求的耗时的平均值。如图5-1所示,通过json格式输出延迟分析结果,可以更加方便地将数据吐到第三方应用上进行清晰直观地展示。
65.例如,假设采集到n个i/o请求,那么i/o整体在各关键区间的延迟消耗分布的计算如下所示,可以包括:
66.block延迟的平均耗时:t_avg_block=(t_block_1+t_block_2+...+t_block_n)/n
67.driver延迟的平均耗时:t_avg_driver=(t_driver_1+t_driver_2+...+t_driver_n)/n
68.disk延迟的平均耗时:t_avg_disk=(t_disk_1+t_disk_2+...+t_disk_n)/ncomplete延迟的平均耗时:t_avg_complete=(t_complete_1+t_complete_2+...+t_complete_n)/n
69.总延迟:t_total=t_avg_block+t_avg_driver+t_avg_disk+t_avg_complete
70.因此,每一关键区间的延迟消耗分布:如以block延迟为例,block延迟占总耗时比例为:t_avg_block/t_total*100%。其他关键区间依次类推,在此不再赘述。
71.另外,由于分析出i/o请求在进程级别的延迟损耗能够进一步帮助找出i/o性能抖动的瓶颈点,因此,本说明书一个或多个实施例中,所述方法还包括:从解析若干个i/o请求的解析结果中,获取进程相关的关键信息;根据所述关键信息,按每个进程分析所述时间信息,得到多个进程各自对应的延迟分析结果。
72.本说明书实施例提供的方法对按进程分析时间信息的分析方式并不进行限制,可以按照具体应用场景的需要设置所需要分析的角度。例如,为了满足一些应用场景下深入分析的需要,本说明书一个或多个实施例中,根据所述关键信息,可以分析每个进程的i/o请求平均总耗时,每个进程的i/o请求在磁盘侧的耗时。
73.例如,如图5-2所示的json格式的另一种延迟分析结果示意图所示,“comm”表示进程名称;“pid”表示进程id;“total_delay”表示这个进程的i/o请求平均总耗时,单位是us;disk_delay表示这个进程的i/o请求在磁盘侧的耗时。如图5-2所示的延迟分析结果,相对于进程,磁盘上消耗的延迟较大,可见该延迟分析结果有助于对性能抖动的分析。
74.需要说明的是,图5-1与图5-2所示的延迟分析结果示例仅用于对本说明书实施例提供的方法进行示意性解释,并不构成对本说明书实施例提供的方法的限制,可以根据实施场景需要,设置符合分析需求的延迟分析结果的格式、内容。
75.在一些应用场景中,为了更深入分析性能瓶颈,例如,本说明书实施例提供的方法,还可以根据所述时间信息,确定采集到的若干个i/o请求中i/o总延迟最大的i/o请求。例如,可以在输出延迟分析结果的同时,在延迟分析结果中给出总延迟最大的i/o请求。再例如,本说明书实施例提供的方法,还可以输出所述多个关键区间各自对应的延迟分析结果,并在输出中标识出所述多个关键区间中延迟最大的区间。又例如,本说明书实施例提供的方法,还可以统计总i/o数、读写i/o数、清空i/o数、i/o请求对应的操作磁盘的位置、i/o请求对应的操作磁盘的长度、i/o请求对应的队列信息中的一种或多种附加信息;在输出所述延迟分析结果时,输出所述附加信息。
76.结合本说明书多个实施例,本说明书实施例提供的方法可以基于ebpf技术,跟踪获取i/o的多个关键状态的时间信息,从而完整地勾勒出一个存储i/o的生命周期全貌,便于分析性能瓶颈。例如,可以基于延迟分析的需要,解析i/o请求,解析出应用场景所关注的、当前i/o请求对应的操作磁盘的位置、长度、对应的文件信息、进程信息、队列信息等等信息。经过解析之后,获取到的可以是以单个i/o请求为单位的数据,基于这些数据做进一步分析统计,最终可以输出两个维度的信息:一个是统计信息,例如,可以包含总i/o数、读写或flush i/o数、i/o整体在各关键区间的延迟消耗分布、延迟最大的路径(也即关键区间)、i/o在进程级别的延迟损耗等等。另一个可以输出i/o请求中总延迟最大的i/o,即抖动最严重的i/o。可见,由于延迟分析结果中提供了i/o整体在各关键区间的延迟消耗分布、i/o在进程级别的延迟损耗等信息,有利于对更复杂的i/o性能抖动问题的定位,达到了一键诊断出i/o性能抖动原因的快捷检测效果。
77.与上述方法实施例相对应,本说明书还提供了检测i/o性能抖动的装置实施例,图6示出了本说明书一个实施例提供的一种检测i/o性能抖动的装置的结构示意图。如图6所
示,该装置包括:信息采集模块602、请求解析模块604、关系记录模块606及延迟分析模块608。
78.该信息采集模块602,可以被配置为采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,其中,所述多个关键状态至少包括:i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态。
79.该请求解析模块604,可以被配置为解析所述i/o请求,以获取所述i/o请求的唯一标识信息。
80.该关系记录模块606,可以被配置为记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系。
81.该延迟分析模块608,可以被配置为根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。
82.由于该装置采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,多个关键状态至少包括i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态,i/o请求结束的状态,并记录关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系,因此,在对若干个i/o请求采集完成之后,能够根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。可见,该装置能够检测出i/o请求的生命周期内多个关键区间的延迟分析结果,分析更为全面,延迟分析结果能够较为清晰地勾勒出i/o请求的生命周期内关键区间的性能瓶颈点。
83.本说明书实施例提供的装置,对采集i/o请求达到生命周期内的多个关键状态时分别对应的时间信息的具体方式并不进行限制。例如,所述信息采集模块602,可以被配置为基于内核追踪技术,在i/o生命周期内多个关键状态分别对应的系统内核函数上挂上钩子函数。其中,所述钩子函数用于从所挂的系统内核函数获取用于确定所述唯一标识信息的请求信息以及所述i/o请求达到所述关键状态的时间戳。
84.图7示出了本说明书另一个实施例提供的一种检测i/o性能抖动的装置的结构示意图。如图7所示,所述关系记录模块606,可以包括:搜索子模块6062、更新子模块6064及新增子模块6066。
85.该搜索子模块6062,可以被配置为通过以所述i/o请求的唯一标识信息为key,对hash map进行搜索。
86.该更新子模块6064,可以被配置为如果查找到以所述i/o请求的唯一标识信息为key的元素,在所述元素中记录所述关键状态对应的时间信息。
87.该新增子模块6066,可以被配置为如果未查找到以所述i/o请求的唯一标识信息为key的元素,增加以所述i/o请求的唯一标识信息为key的元素,在所述元素中记录所述关键状态对应的时间信息。
88.在该实施例中,通过hash map能够快速的实现对相同i/o请求的关键状态以及时间信息的增、删、改、查,有效提高分析效率。
89.另外,为了提高分析效率,如图7所示,本说明书实施例提供的装置,还可以包括:延迟计算模块610及抖动剔除模块612。
90.该延迟计算模块610,可以被配置为根据所述对应关系中记录的时间信息,统计每个i/o请求的总延迟。
91.该抖动剔除模块612,可以被配置为通过将每个i/o请求对应的总延迟与预设延迟阈值比较,从所述若干个i/o请求中剔除未发生性能抖动的i/o请求。
92.由于分析出i/o请求在进程级别的延迟损耗能够进一步帮助找出i/o性能抖动的瓶颈点,因此,本说明书一个或多个实施例中,如图7所示,所述装置还可以包括:进程信息获取模块614以及进程延迟分析模块616。
93.该进程信息获取模块614,可以被配置为从解析若干个i/o请求的解析结果中,获取进程相关的关键信息。
94.该进程分析模块616,可以被配置为根据所述关键信息,按每个进程分析所述时间信息,得到多个进程各自对应的延迟分析结果。
95.在一些应用场景中,为了更深入分析性能瓶颈,如图7所示,所述延迟分析模块,还可以被配置为进行以下任一种或多种处理,包括:
96.根据所述时间信息,确定采集到的i/o请求中i/o总延迟最大的i/o请求;
97.输出所述多个关键区间各自对应的延迟分析结果,并在输出中标识出所述多个关键区间中延迟最大的区间;
98.统计总i/o数、读写i/o数、清空i/o数、i/o请求对应的操作磁盘的位置、i/o请求对应的操作磁盘的长度、i/o请求对应的队列信息中的一种或多种附加信息,在输出所述延迟分析结果时,输出所述附加信息。
99.上述为本实施例的一种检测i/o性能抖动的装置的示意性方案。需要说明的是,该检测i/o性能抖动的装置的技术方案与上述的检测i/o性能抖动的方法的技术方案属于同一构思,检测i/o性能抖动的装置的技术方案未详细描述的细节内容,均可以参见上述检测i/o性能抖动的方法的技术方案的描述。
100.图8示出了根据本说明书一个实施例提供的一种计算设备800的结构框图。该计算设备800的部件包括但不限于存储器810和处理器820。处理器820与存储器810通过总线830相连接,数据库850用于保存数据。
101.计算设备800还包括接入设备840,接入设备840使得计算设备800能够经由一个或多个网络860通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备840可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
102.在本说明书的一个实施例中,计算设备800的上述部件以及图8中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图8所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
103.计算设备800可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备800还可以是移动式或静止式的服务器。
104.其中,处理器820用于执行如下计算机可执行指令:
105.采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,其中,所述多个关键状态至少包括:i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态;
106.解析所述i/o请求,以获取所述i/o请求的唯一标识信息;
107.记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系;
108.根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。
109.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的检测i/o性能抖动的方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述检测i/o性能抖动的方法的技术方案的描述。
110.本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时以用于:
111.采集若干个i/o请求达到生命周期内的多个关键状态时分别对应的时间信息,其中,所述多个关键状态至少包括:i/o请求下发至磁盘的状态、磁盘完成i/o请求的状态、i/o请求结束的状态;
112.解析所述i/o请求,以获取所述i/o请求的唯一标识信息;
113.记录所述关键状态、所述i/o请求的唯一标识信息以及所述时间信息的对应关系;
114.根据所述对应关系,按任意两个关键状态之间为一个关键区间分析所述时间信息,得到多个关键区间各自对应的延迟分析结果。
115.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的检测i/o性能抖动的方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述检测i/o性能抖动的方法的技术方案的描述。
116.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
117.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
118.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域
技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
119.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
120.以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1