操作系统调度延迟诊断方法、装置、电子设备及存储介质与流程

文档序号:32712893发布日期:2022-12-28 01:35阅读:36来源:国知局
操作系统调度延迟诊断方法、装置、电子设备及存储介质与流程

1.本公开涉及计算机技术领域,尤其涉及一种操作系统调度延迟诊断方法、装置、电子设备及存储介质。


背景技术:

2.在现有技术中,linux实时性在linux中占有非常重要的地位,不同应用场景对实时性的要求也不一样。目前,linux存在的共性问题在于:linux内核调度延迟诊断难度大。
3.在现有技术中通过线程结构的预留字段或者自己新增字段实现延迟诊断的,但是,上述处理方法缺乏所有版本内核普适性。
4.因此,目前亟需一种具有普适性和扩展性的linux内核调度延迟诊断方法,以解决现有技术中linux内核调度延迟诊断难度大的问题。


技术实现要素:

5.本公开的目的在于提供一种操作系统调度延迟诊断方法、装置、电子设备及存储介质,旨在解决现有技术中的上述问题。
6.根据本公开实施例的第一方面,提供一种操作系统调度延迟诊断方法,包括:响应于用户态程序的诊断指令,激活内核模块的调度延迟诊断功能,获取第一线程的被唤醒时刻时间戳并存储在栈空间,当第一线程被调度时,根据被唤醒时刻时间戳和获取的被调度时刻时间戳计算调度延时时间,将第一线程的调度延时时间和相应的延迟信息存储到内核缓存区中;响应于用户态程序的数据获取指令,将内核缓存区中保存的延迟信息发送给用户态程序指定的存储空间。
7.根据本公开实施例的第二方面,提供一种操作系统调度延迟诊断装置,包括:用户态程序模块,用于发送诊断指令和数据获取指令,获取内核缓存区中保存的延迟信息;内核模块,用于响应于用户态程序的诊断指令,激活内核模块的调度延迟诊断功能,获取第一线程的被唤醒时刻时间戳并存储在栈空间,当第一线程被调度时,根据被唤醒时刻时间戳和获取的被调度时刻时间戳计算调度延时时间,将第一线程的调度延时时间和相应的延迟信息存储到内核缓存区中;响应于用户态程序的数据获取指令,将内核缓存区中保存的延迟信息发送给用户态程序。
8.根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;处理器,用于从存储器中读取可执行指令,并执行指令以实现本公开第一方面所提供的操作系统调度延迟诊断方法。
9.根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现本公开第1方面所提供的操作系统调度延迟诊断方法的步骤。
10.本公开的实施例提供的技术方案可以包括以下有益效果:
11.采用本公开实施例,借用内核的栈空间来存放线程的被唤醒时刻时间戳,提高了
适用的普适性和扩展性,并且集成了用户态程序和内核模块,降低了用户自主诊断的门槛,采用本公开实施例的技术方案对系统本身性能影响小、占用资源小,能够快速定位到异常线程。
12.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
13.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
14.图1是根据一示例性实施例示出的一种操作系统调度延迟诊断方法的流程图;
15.图2是根据一示例性实施例示出的一种操作系统调度延迟诊断方法的示例性处理流程图;
16.图3是根据一示例性实施例示出的一种操作系统调度延迟诊断装置的框图;
17.图4是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
18.下面将结合附图详细地对示例性实施例进行描述说明。
19.应当指出,相关实施例及附图仅为描述说明本公开所提供的示例性实施例,而非本公开的全部实施例,也不应理解本公开受相关示例性实施例的限制。
20.应当指出,本公开中所用术语“第一”、“第二”等仅用于区别不同步骤、设备或模块等。相关术语既不代表任何特定技术含义,也不表示它们之间的顺序或者相互依存关系。
21.应当指出,本公开中所用术语“一个”、“多个”、“至少一个”的修饰是示意性而非限制性的。除非在上下文另有明确指出,否则应该理解为“一个或多个”。
22.应当指出,本公开中所用术语“和/或”,用于描述关联对象之间的关联关系,一般表示至少存在三种关联关系。例如,a和/或b,至少可以表示:单独存在a,同时存在a和b,单独存在b这三种关联关系。
23.应当指出,本公开的方法实施例中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。除非特别说明,本公开的范围不受相关实施例中步骤的描述顺序限制。
24.需要说明的是,本公开中所有获取信号、信息或数据的动作都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
25.技术用语说明
26.1、调度延迟(scheduling delay):指一个任务具备运行的条件(即进入cpu的runqueue),到真正执行(获得cpu的执行权)的这段时间。
27.2、实时性(real-time):指操作系统必须对外来事件在限定时间内做出反应,限定时间的范围需要根据实际需要确定,例如,控制化学反应控制系统的限定时间可能很长,而汽车控制系统的限定时间就会很短。
28.3、操作系统(operating system):是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。
29.示例性方法一
30.图1是根据一示例性实施例示出的一种操作系统调度延迟诊断方法的流程图,如图1所示,操作系统调度延迟诊断方法用于linux内核调度延迟诊断中,包括以下步骤:
31.在步骤s110中,响应于用户态程序的诊断指令,激活内核模块的调度延迟诊断功能,获取第一线程的被唤醒时刻时间戳并存储在栈空间,当第一线程被调度时,根据被唤醒时刻时间戳和获取的被调度时刻时间戳计算调度延时时间,将第一线程的调度延时时间和相应的延迟信息存储到内核缓存区中;
32.其中,在激活内核模块的调度延迟诊断功能后,利用栈空间存储第一线程被唤醒时刻时间戳,随后,在第一线程被调度时,需要根据唤醒时刻时间戳和被调度时刻时间戳计算得出调度延时时间,并且,利用自定义的内核缓存区存储述第一线程的调度延时时间和相应的延迟信息。
33.在步骤s120中,响应于用户态程序的数据获取指令,将内核缓存区中保存的延迟信息发送给用户态程序指定的存储空间。
34.需要说明的是,在上述处理中,在接收到用户态程序的数据获取指令后,需要将在步骤s110中获取的保存在自定义的内核缓存区中的延迟信息发送到用户态程序的存储空间中。需要说明的是,该存储空间是用户态程序指定的存储空间。
35.采用本公开实施例,借用内核的栈空间来存放线程的被唤醒时刻时间戳,提高了适用的普适性和扩展性,并且集成了用户态程序和内核模块,降低了用户自主诊断的门槛,采用本公开实施例的技术方案对系统本身性能影响小、占用资源小。
36.示例性方法二
37.如图1所示,操作系统调度延迟诊断方法用于linux内核调度延迟诊断中,包括以下步骤:
38.在步骤s110中,响应于用户态程序的诊断指令,激活内核模块的调度延迟诊断功能,获取第一线程的被唤醒时刻时间戳并存储在栈空间,当第一线程被调度时,根据被唤醒时刻时间戳和获取的被调度时刻时间戳计算调度延时时间,将第一线程的调度延时时间和相应的延迟信息存储到内核缓存区中;其中,上述延迟信息具体包括以下至少之一:线程信息、cgroup组信息、内核态调用堆栈信息、用户态调用堆栈信息、线程调用链信息。从而获取到丰富的延时信息。其中,cgroup为源自控制组群(control groups)的简写,是linux内核的一个功能,用来限制、控制与分离一个进程组的资源(例如,cpu、内存、磁盘输入输出等)。
39.步骤s110具体包括:
40.响应于第一线程被唤醒,通过栈空间记录第一线程的被唤醒时刻时间戳;
41.响应于第一线程被调度,计算被调度时刻时间戳与被唤醒时刻时间戳的差值,根据差值得到第一线程的调度延时时间存储到内核缓存区。通过计算被调度时刻时间戳与被唤醒时刻时间戳的差值,能够准确的得到第一线程的调度延时时间。
42.在本公开实施例中,为了方便用户快速定位所关注的线程,在本公开实施例中,还可以通过用户态程序获取预先设置的指定线程和调度延时时间阈值。也就是说,在实际应用中,可以通过线程或者线程的pid(线程在操作系统中唯一的id)、comm(线程的中文名)、tgid(线程组主线程pid)实现对线程的过滤,可以只用关注业务感兴趣的业务线程;当然,根据实际需要,也可以不对线程进行指定,关注所有的线程;此外,针对业务不同的实时性
响应需求,可以指定纳秒或微秒级别的调度延时时间阈值,帮助业务线程发现不符合预期的业务异常流程。在此种情况下,步骤s110的处理具体包括:
43.响应于第一线程为预先设置的指定线程,获取指定线程的被唤醒时刻时间戳并存储在栈空间,当第一线程被调度时,根据被唤醒时刻时间戳和获取的被调度时刻时间戳计算调度延时时间,将指定线程的调度延时时间存储到内核缓存区中;
44.响应于指定线程的调度延时时间大于或者等于调度延时时间阈值,执行获取指定线程的延迟信息并存储到内核缓存区中的操作。
45.通过上述处理,能够快速的过滤掉用户不关注的线程,从而向用户推送用户真正关注的线程的延迟信息。此外,还可以根据用户的个性化需求设置调度延时时间阈值。
46.从上述处理可以看出,步骤s110需要分为下面三个步骤来处理:
47.1、第一线程被唤醒时,借用第一线程的栈空间记录第一线程进入运行队列的时间t1(对应于上述被唤醒时刻时间戳);
48.2、第一线程被调度时,当前时间(对应于上述被调度时刻时间戳)t2-t1,获得第一线程的调度延迟时间delta=t2-t1;
49.3、对delta超过阈值的第一线程,获取当前cpu正运行线程的线程信息、堆栈信息、被延迟调度线程的线程信息、堆栈信息等放入到自定义内存缓存区。
50.在实际应用中,在步骤s110中,响应于用户态程序的诊断指令,需要加载诊断内核模块:chushi-tools install;激活调度延迟诊断功能:chushi-tools syssched-delay
‑‑
activate="threshold=20";借用栈空间为线程调度延迟存储字段的存储空间,在线程被唤醒时,记录下线程被唤醒时刻的时间戳;在线程被调度时,通过被调度时刻的时间戳current_time_ms与被唤醒时刻的时间戳的差值,得到线程的调度延时时间delta_ms;如果延迟时间delta_ms大于预先设定的调度延时时间阈值,将当前线程的线程信息、cgroup组信息、内核态调用堆栈、用户态调用堆栈以及线程调用链信息获取到自定义的缓存区中。
51.在步骤s120中,响应于用户态程序的数据获取指令,将内核缓存区中保存的延迟信息发送给用户态程序指定的存储空间。在本公开实施例中,延迟信息具体包括以下至少之一:线程信息、cgroup组信息、内核态调用堆栈信息、用户态调用堆栈信息、线程调用链信息。通过这些信息,可以完全掌握业务代码异常的具体流程,可以直接帮助用户发现自己的业务异常点。其中,通过cgroup组信息,可以关注到指定容器里面的业务线程情况,可以在容器场景下,迅速定位到异常线程对应的容器和业务,帮助用户迅速发现问题点。
52.在本公开实施例中,用户态程序获取内核缓存区中的延迟信息,然后可以对延迟信息进行格式解析、格式输出,查看诊断结果,并可以生成火焰图。
53.采用本公开实施例,借用内核的栈空间来存放线程的被唤醒时刻时间戳,提高了适用的普适性和扩展性,并且集成了用户态程序和内核模块,降低了用户自主诊断的门槛,采用本公开实施例的技术方案对系统本身性能影响小、占用资源小,通过设置指定线程和调度延时时间阈值能够快速定位到异常线程。
54.示例性方法三
55.图2是根据一示例性实施例示出的一种操作系统调度延迟诊断方法的示例性处理流程图,如图2所示,具体包括如下操作:
56.一、用户态程序的过滤配置、阈值设定。
57.内核模块支持所有的线程us级别的调度延迟时间的获取,所以避免干扰信息,通过用户态程序可以对感兴趣的系统调用进行设置,使内核态(即内核模块)只关注用户感兴趣的系统调用,例如,采用线程组id过滤条件、线程pid过滤条件、线程名过滤条件对感兴趣的系统调用进行过滤;当然也支持调度延时时间阈值指定,只关注用户预期外的延时事件;
58.二、内核模块的数据获取,具体步骤如下:
59.1、当线程被唤醒放入到cpu运行队列时,通过自定义的线程扩展字段记录该线程入队时间;
60.2、当该线程被cpu选中,开始运行时,通过被调度时刻时间戳与被唤醒时刻时间戳的差值delta_us可以得到该线程的调度延迟时间;并且根据用户态程序的设置,进行指定线程和调度延时时间阈值的条件过滤,只关注用户配置的线程调度情况;
61.当调度延迟时间delta_us大于设置的阈值threshold时间,收集线程相关的调度信息和运行信息,例如,线程pid,线程内核态堆栈信息、线程用户态堆栈信息、线程调用链信息、线程cgroup组信息、线程入队信息、线程调度延迟时长等;
62.三、按需信息获取和按需数据格式化。
63.用户态程序可以随时访问内核模块获取的调度延时时间,用户态程序可以按需输出线程的异常信息,也可以生成具体的火焰图。
64.从上述技术方案可以看出,本公开实施例通过记录线程在cpu调度队列上的时间,来确定线程的调度延迟,但是内核线程结构体没有多余的字段用来记录线程的时间戳,因此本公开实施例采用了借用内核栈空间的方式来存放线程的调度延迟时间,即通过自定义堆栈的呈现方式,获取当前线程的调用链和被延迟调度线程的程序调用链,可以直观的呈现出影响者和被影响者的链路堆栈,可以快速准确确定被影响者和影响原因;用户态可以通过命令字段生成日志文件或者火焰图帮助分析调度延迟问题,火焰图和日志,能够帮助客户直观的发现业务异常流程,和直观的发现问题点,帮助优化和诊断调度延迟问题。当业务线程rt抖动,调度延迟,采用本公开实施例的技术方案可以在这种情况下给相关技术人员提供出诊断依据,方便技术人员对此问题进行修复。
65.示例性装置
66.图3是根据一示例性实施例示出的一种操作系统调度延迟诊断装置的框图。参照图3,该装置300包括用户态程序模块310和内核模块320。
67.该用户态程序模块310,用于发送诊断指令和数据获取指令,获取内核缓存区中保存的延迟信息;用户态程序模块310进一步用于:获取预先设置的指定线程和调度延时时间阈值。
68.该内核模块320,用于响应于用户态程序的诊断指令,激活内核模块的调度延迟诊断功能,获取第一线程的被唤醒时刻时间戳并存储在栈空间,当第一线程被调度时,根据被唤醒时刻时间戳和获取的被调度时刻时间戳计算调度延时时间,将第一线程的调度延时时间和相应的延迟信息存储到内核缓存区中;响应于用户态程序的数据获取指令,将内核缓存区中保存的延迟信息发送给用户态程序。
69.内核模块320具体用于:
70.响应于第一线程被唤醒,通过栈空间记录第一线程的被唤醒时刻时间戳;
71.响应于第一线程被调度,计算被调度时刻时间戳与被唤醒时刻时间戳的差值,根
据差值得到第一线程的调度延时时间并存储到内核缓存区。
72.在用户态模块310获取预先设置的指定线程和调度延时时间阈值时,内核模块320具体用于:响应于第一线程为预先设置的指定线程,执行获取指定线程的被唤醒时刻时间戳并存储在栈空间,当第一线程被调度时,根据被唤醒时刻时间戳和获取的被调度时刻时间戳计算调度延时时间,将指定线程的调度延时时间存储到内核缓存区中。响应于指定线程的调度延时时间大于或者等于调度延时时间阈值,执行获取指定线程的延迟信息并存储到内核缓存区中的操作。
73.需要说明的是,延迟信息具体包括以下至少之一:线程信息、cgroup组信息、内核态调用堆栈信息、用户态调用堆栈信息、线程调用链信息。
74.示例性装置是与上述示例性方法对应的装置实施例,各个模块的具体操作可以参照方法实施例的描述进行理解,在此不再赘述。
75.示例性电子设备
76.图4是根据一示例性实施例示出的一种电子设备400的框图。该电子设备400可以是车辆控制器、车载终端、车载计算机或者其他类型的电子设备。
77.参照图4,电子设备400,可包括至少一个处理器410和存储器420。处理器410可以执行存储在存储器420中的指令。处理器410通过数据总线与存储器420通信连接。除存储器420外,处理器410还可通过数据总线与输入设备430、输出设备440、通信设备450通信连接。
78.处理器410可以是任何常规的处理器,诸如商业可获得的cpu。处理器还可以包括诸如图像处理器(graphic process unit,gpu),现场可编程门阵列(field programmable gate array,fpga)、片上系统(system on chip,soc)、专用集成芯片(application specific integrated circuit,asic)或它们的组合。
79.存储器420可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
80.在本公开实施例中,存储器420中存储有可执行指令,处理器410可以从所述存储器420中读取所述可执行指令,并执行所述指令以实现上述示例性实施例中任一所述的操作系统调度延迟诊断方法的全部或部分步骤。
81.示例性计算机可读存储介质
82.除了上述方法和装置以外,本公开的示例性实施例还可以是计算机程序产品或存储有该计算机程序产品的计算机可读存储介质。该计算机产品中包括计算机程序指令,该计算机程序指令可被处理器执行,以实现上述示例性实施例中任一方法中描述的的全部或部分步骤。
83.所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本技术实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言以及脚本语言(例如python)。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
84.所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子包括:具有一个或多个导线电连接的静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘,或者上述的任意合适的组合。
85.本领域技术人员在考虑说明书及实践本公开后,将容易想到本公开的其它实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
86.应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1