CN114385392A - 一种Linux内核调度器的重建方法及装置 - Google Patents
一种Linux内核调度器的重建方法及装置 Download PDFInfo
- Publication number
- CN114385392A CN114385392A CN202111501122.5A CN202111501122A CN114385392A CN 114385392 A CN114385392 A CN 114385392A CN 202111501122 A CN202111501122 A CN 202111501122A CN 114385392 A CN114385392 A CN 114385392A
- Authority
- CN
- China
- Prior art keywords
- scheduling
- kernel scheduler
- data
- scheduling entity
- entity
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0715—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本说明书一个或多个实施例提供一种Linux内核调度器的重建方法,在系统处于停机模式下,对内核调度器的调度数据以及各个调度实体的状态数据进行重建,具体而言,先确定纳入内核调度器的所有调度实体,对每一调度实体执行出队操作,并清空每一调度实体对应的状态数据。对所有的调度实体执行出队操作后,对出队后的每一调度实体执行入队操作,并根据内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据,最后根据重新为各个调度实体构建的状态数据,以及调度策略,重新构建调度数据。重建完成后,退出停机模式,以使内核调度器继续对调度实体的调度。
Description
技术领域
本说明书一个或多个实施例涉Linux内核调度器技术领域,尤其涉及一种Linux内核调度器的重建方法及装置。
背景技术
Linux系统中的内核调度器用于将内核资源合理的分配给各个进程,以提升Linux的系统流畅度。内核调度器对各个进程的调度过程比较复杂,一般而言,某一调度实体(进程或者进程组)被纳入内核调度器的调度之后,内核调度器会开始记录并初始化该调度实体的状态数据,作为该调度实体对应的状态数据,之后随着时间,依据调度策略周期性地更新该调度实体的状态数据直至该调度实体被内核执行完成。内核调度器根据各个调度实体对应的状态数据,以及调度策略,得到记录各个调度实体调度顺序信息的调度数据,内核调度器按照调度数据依序完成对各个调度实体的调度。
其中,内核调度器的调度策略由很多函数组成,包括为纳入内核调度器的调度实体构建哪些状态数据(例如构建虚拟运行时间)、如何初始化各个调度数据对应的状态数据值、如何周期性更新各个调度数据对应的状态数据值、如何根据各个调度数据对应的状态数据进行排序得到用于记录顺序信息的调度数据等。不同的调度策略包括的函数不同,因此,内核调度器使用不同的调度策略对各个调度实体会有不同的调度过程。
实际应用中,调度数据或各个调度实体对应的状态数据会有错误的情况,例如,在对内核调度器的调度策略进行更新时,更新后的调度策略使用了更新前的调度状态数据,但由于更新时机不恰当等,更新前的调度策略并未及时更新各个调度实体的状态数据,使得更新后的调度策略所依据的各个调度实体对应的状态数据不准确。
相关技术中,是技术人员通过分析内核调度器的完整调度过程,然后对各个调度实体对应的状态数据或调度数据进行纠正。这种人工进行纠正的方式,不仅准确性难以保证,还增添了人工成本。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种Linux内核调度器的重建方法。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种Linux内核调度器的重建方法,内核调度器根据纳入调度的各个调度实体对应的状态数据以及调度策略构建调度数据,并根据所构建的调度数据依序完成对各个调度实体的调度;该方法包括:
接收到重建内核调度器的指令后,调用stop machine函数使系统进入停机模式,以停止所述内核调度器对调度实体的调度,在所述系统处于停机模式下执行以下步骤:
确定纳入所述内核调度器调度的所有调度实体;
对纳入所述内核调度器调度的每一调度实体执行出队操作,并清空每一调度实体对应的状态数据;
对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据;
清空所述内核调度器的调度数据;
基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新构建调度数据;
退出停机模式,以继续所述内核调度器对调度实体的调度。
根据本说明书一个或多个实施例的第二方面,提出了一种Linux内核调度器的重建装置,内核调度器根据纳入调度的各个调度实体对应的状态数据以及调度策略构建调度数据,并根据所构建的调度数据依序完成对各个调度实体的调度;该装置包括:
接收模块,用于接收到重建内核调度器的指令后,调用stop machine函数使系统进入停机模式,以停止所述内核调度器对调度实体的调度;
确定模块,用于确定纳入所述内核调度器调度的所有调度实体;
清空状态数据模块,用于对纳入所述内核调度器调度的每一调度实体执行出队操作,并清空每一调度实体对应的状态数据;
重建状态数据模块,用于对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据;
清空调度数据模块,清空所述内核调度器的调度数据;
重建调度数据模块,用于基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新构建调度数据;
退出模块,用于退出停机模式,以继续所述内核调度器对调度实体的调度。
本说明书提出的Linux内核调度器的重建方法,在系统处于停机模式下,对内核调度器的调度数据以及各个调度实体的状态数据进行重建,具体而言,先确定纳入内核调度器的所有调度实体,对每一调度实体执行出队操作,并清空每一调度实体对应的状态数据。对所有的调度实体执行出队操作后,对出队后的每一调度实体执行入队操作,并根据内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据,最后根据重新为各个调度实体构建的状态数据,以及调度策略,重新构建调度数据。重建完成后,退出停机模式,以使内核调度器继续对调度实体的调度。
通过本说明书的一个或多个实施例,在内核调度器出现故障的情况下,可自动完成内核调度器的重建,无须人工对内核调度器的调度过程一个一个进行复核,节约了人工成本,提高了故障恢复的准确性,并且,本说明书的方法能够保证正确的使用和维护相应的状态数据及调度数据,通用性较高,可适用于不同调度策略的内核调度器,降低风险系数。
附图说明
图1是一示例性实施例提供的一种Linux内核调度器的重建方法的流程示意图。
图2是一示例性实施例提供的另一种Linux内核调度器的重建方法的流程示意图。
图3是一示例性实施例提供的一种Linux内核调度器的重建装置的结构示意图。
图4是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
Linux系统有着广泛的使用,例如云服务商在云服务中使用的系统大多都是Linux系统。Linux系统中,一般是通过内核调度器将内核资源合理的分配给各个进程,而随着实际业务需求,对内核资源的分配方式发生了不同需要,衍生出很多不同调度策略的内核调度器,以衍生过程完全公平调度器为例,在以往的内核调度器中,是以进程为调度单位,即,调度实体都是进程,按照实际运行时间,或者按照不同进程的权重等,依次进行调度,而对于多个用户使用同一个系统时,进程多的用户就会长时间占用更多的内核资源,进程少的用户由于进程多的用户长时间占用较多的内核资源,使得进程少的用户的进程不能得到很好的处理,在云服务中,多个用户共用使用同一系统资源时,这样的情况并不是期望出现的,对长时间进程不能得到处理的用户很不友好。
因此出现完全公平调度器,调度实体为进程或者进程组,一个用户的多个进程为一个进程组,以进程组作为一个调度实体分配资源,使得各个用户得到的内核资源完全公平,因此称之为完全公平调度器。
而未来根据实际需要,还会衍生出更多不同调度策略的内核调度器,对内核调度器的调度策略进行更新、升级,例如改变每个调度实体对应的状态数据的更新周期,对每个实体对应的状态数据的更新规则进行更改,或者记录每个调度实体更多的状态信息,每个调度实体对应的状态数据可能会更多,等等。
需要说明的是,每个内核调度器的调度策略是由很多函数组成的,包括为纳入内核调度器的调度实体构建哪些状态数据(例如构建虚拟运行时间)、如何初始化各个调度数据对应的状态数据值、如何周期性更新各个调度数据对应的状态数据值、如何根据各个调度数据对应的状态数据进行排序得到用于记录顺序信息的调度数据等。不同的调度策略包括的函数不同,因此,内核调度器使用不同的调度策略对各个调度实体会有不同的调度过程。
其中,不同的调度策略会为调度实体构建不同的状态数据,例如上述的完全公平调度器的调度策略,会构建虚拟运行时间,并周期性更新。又如,在完全公平调度器衍生出来前,实时调度器的调度策略,会记录每个调度实体的实际运行时间,并周期性更新。
由于调度策略不同,调度数据也会有所不同,例如,上述的完全公平调度器的调度策略,调度数据为以各个调度实体对应的虚拟运行时间为关键字构建的红黑树。rt调度器,以各个调度实体实际的运行时间为顺序进行执行,调度数据是具有优先级的多个队列。
总结来说,一个内核调度器需要有调度策略,会为每个调度实体构建对应的状态数据,而每个调度实体对应的状态数据用于表征该调度实体被内核调度器纳入调度后开始记录的状态信息。内核调度器根据纳入调度的各个调度实体对应的状态数据以及调度策略,构建用于记录调度顺序信息的调度数据,并根据所构建的调度数据依序完成对各个调度实体的调度。
以上是对内核调度器的介绍,实际应用中,会出现内核调度器中各个调度实体对应的状态数据或者内核调度器的调度数据出现问题的情况,例如内核调度器的调度策略在执行时出现问题,使得某一调度实体对应的状态数据没有得到及时更新,又例如对内核调度器的调度策略进行更新时,所记录的状态数据或调度数据发生变化,等等。
基于此,本说明书提出一种Linux内核调度器的重建方法,在系统处于停机模式下,对内核调度器的调度数据以及各个调度实体的状态数据进行重建,具体而言,先确定纳入内核调度器的所有调度实体,对每一调度实体执行出队操作,并清空每一调度实体对应的状态数据。对所有的调度实体执行出队操作后,对出队后的每一调度实体执行入队操作,并根据内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据,最后根据重新为各个调度实体构建的状态数据,以及调度策略,重新构建调度数据。重建完成后,退出停机模式,以使内核调度器继续对调度实体的调度。
通过本说明书的一个或多个实施例,在内核调度器出现故障的情况下,可自动完成内核调度器的重建,无须人工对内核调度器的调度过程一个一个进行复核,节约了人工成本,提高了故障恢复的准确性,并且,本说明书的方法能够保证正确的使用和维护相应的状态数据及调度数据,通用性较高,可适用于不同的内核调度器,降低风险系数。
接下来对本说明书示出的Linux内核调度器的重建方法进行详细的说明。如图1所示,为本说明书示出的Linux内核调度器的重建方法的流程示意图,包括以下步骤:
步骤101、接收到重建内核调度器的指令后,调用stop machine函数使系统进入停机模式,以停止所述内核调度器对调度实体的调度,在所述系统处于停机模式下执行步骤103至步骤111。
其中,重建内核调度器的指令,可以是用户输入的,用以重建出现故障的内核调度器,也可以是某一事件触发的(例如,监测到内核调度器中的调度数据出现问题,或监测到某一调度实体对应的状态数据出现问题等等)。
若重建内核调度器的指令是用户输入的,那么根据用户输入的指令,重建对应的内核调度器即可,若是某一事件触发的,那么重建的内核调度器是发生该事件的内核调度器。
需要说明的是,stop machine命令是系统最高优先级别的进程,调用stopmachine函数后,系统会处于停机模式,系统将不会处理其他进程,只会处理了stopmachine命令下的相关计算,因此,调用stop machine函数后,所有系统处于停机模式,内核调度器的调度也会相应的停止(人工进行查错复盘内核调度器的调度过程时,也需要调动stop machine命令,使所有系统处于停机模式)。有关stop machine命令的详细说明,可参见相关技术中的说明,此次不进行详尽的描述。
系统处于停机模式后,执行以下步骤。
步骤103、确定纳入所述内核调度器调度的所有调度实体。
Linux系统中,不止一个内核调度器,系统根据进程的类型不同,将进程分配至不同的内核调度器,例如,将实时进程分配至实时内核调度器,将普通进程分配至完全公平调度器等。
由于,系统的中进程或者进程组不是全部归属于一个内核调度器调度的,因此,在进行内核调度器的重建时,需要确定纳入本内核调度器调度的所有调度器实体。
其中,每个内核调度器会有对应的运行队列,可以遍历内核调度器对应的运行队列,确定该内核调度器对应的运行队列中的进程以及进程组,将该内核调度器对应的运行队列中的进程或进程组确定为纳入该内核调度器调度的调度实体。
步骤105、对纳入所述内核调度器调度的每一调度实体执行出队操作,并清空每一调度实体对应的状态数据。
每个内核调度器所纳入的调度实体会被内核调度器放入对应的运行队列。当有调度实体纳入调度后,会将其放入对应的队列,入队的过程中,会为其构建对应的状态数据,并初始化对应的状态数据。
因此,在对调度实体对应的状态数据进行重建时,需要先执行出队操作,将内核调度器对应的运行队列先清空,并将每个调度实体对应的状态数据清空。
需要说明的是,本说明所说的清空,是指删除对应的数据,清空调度实体对应的状态数据,是指删除内核调度器中,用于记录该调度实体的状态信息的状态数据。
步骤107、对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据。
对纳入所述内核调度器调度的所有调度实体执行出队操作后,就是对内核调度器对应的运行队列置为空,成为空队列。然后对出队后的每一调度实体执行入队操作,并根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据。
其中,本说明书的调度实体入队,是指将进程或者进程组对应的标识记录至运行队列,作为内核调度器的一个调度实体,调度实体出队,是指进程或者进程组对应的标识从运行队列中删除。
步骤109、清空所述内核调度器的调度数据。
内核调度器是根据调度数据所记录的顺序信息,对所纳入的调度实体进行调度的,而调度数据是依据各个调度实体对应的状态数据以及调度策略得到的,各个调度数据对应的状态数据发生了变化,因此,调度数据也需要进行重建,需要将之前的调度数据进行清空。
步骤111、基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新为所述内核调度器构建调度数据。
步骤113、退出停机模式,以继续所述内核调度器对调度实体的调度。
退出停机模式后,系统会继续处理各个进程,内核调度器也会恢复对各个调度器实体的调度。
由于对内核调度器进行重建后,纳入所述内核调度器的调度实体对应的状态数据都是重建后的状态数据,调度数据也是重建后的调度数据,因此,恢复内核调度器对各个调度实体的调度后,所依赖的数据都是重新初始化后的数据,根据初始化后的各个数据,进行正确的调度。
通过本说明书的一个或多个实施例,在内核调度器出现故障的情况下,可自动完成内核调度器的重建,无须人工对内核调度器的调度过程一个一个进行复核,节约了人工成本,提高了故障恢复的准确性,并且,本说明书的方法能够保证正确的使用和维护相应的状态数据及调度数据,通用性较高,可适用于不同调度策略的内核调度器,降低风险系数。
需要说明的是,本说明书的状态数据用于表征调度实体被内核调度器纳入调度后开始记录的状态信息。调度数据用于记录各个调度实体的调度顺序信息。
其中,在内核调度器的策略为完全公平策略,此时的内核调度器为完全公平内核调度器,完全公平内核调度器已是相对成熟的技术,本说明书不进行详细赘述。当内核调度器为完全公平内核调度器的情况想下,此时,调度实体对应的状态数据至少包括虚拟运行时间,内核调度数据包括以各个调度实体对应的虚拟运行时间为关键字的红黑树。
其中,在调度实体为进程组的情况下,所述调度实体对应的状态数据还包括:以组内各个进程对应的虚拟运行时间为关键字的红黑树。
高精度定时器是内核系统中用于精确计时的计时器,可精确到纳秒,内核调度器可以调用高精度定时器来计时各个调度实体被执行的时间等,部分内核调度器会根据高精度定时器的计时作为参考进行调度。
因此,在一个或多个实施例中,在步骤105之间,还可以先确定所述内核调度器的高精度定时器的状态标志位是否为开启状态,在确定所述高精度定时器的状态标志位为开启状态的情况下,关闭所述高精度定时器。
在步骤111之后,在确定所述高精度定时器的状态标志位为开启状态的情况下,开启所述高精度定时器。
此外,在重建调度器的指令为更新内核调度器的调度策略的情况下,如图2所示,Linux内核调度器的重建方法包括:
步骤201、接收到重建内核调度器的指令后,调用stop machine函数使系统进入停机模式,以停止所述内核调度器对调度实体的调度,在所述系统处于停机模式下执行步骤203~步骤211。
步骤203、确定纳入所述内核调度器调度的所有调度实体。
步骤205、对纳入所述内核调度器调度的每一调度实体执行出队操作,并清空每一调度实体对应的状态数据。
步骤207、对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器更新后的调度策略,重新为该调度实体构建并初始化对应的状态数据。
步骤209、清空所述内核调度器的调度数据。
步骤211、基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述更新后的调度策略,重新构建调度数据。
步骤213、退出停机模式,以继续所述内核调度器对调度实体的调度。
接下来本说明书以完全公平调度策略为例,对Linux内核调度器的重建方法进行详细说明。
1、内核调度器的重建需要在原子环境中进行(原子环境,或者称之为中断环境,所有数据保持当前状态保持不变,也不会改变),因此,可以利用stop machine机制(调用stopmachine函数)进入系统停机状态,使得所有CPU处于stopping状态。
2、清理当前的状态数据及调度数据。
1)遍历系统中的task_groups链表:
ⅰ.对每一个CPU上的cfs_rq(CFS内核调度器对应的运行队列)进行清理:
cfs_rq上的进程都进行出队操作,并清空相关的调度状态,例如,load(负载)、tasks_timeline(红黑树)相关的数据。
ⅱ.清理第i步中所有cfs_rq所对应的se(调度实体)相关数据状态。
ⅲ.通过遍历throttled_cfs_rq链表(除root_task_group外,root_task_group为根节点,只剩root_task_group表示链表为空),处理task_groups上已经被throttled(挂起)的cfs_rq,强制将其进行unthrottle(解挂)操作,并关闭CFS bandwidth的高精度定时器。
2)遍历所有CPU的运行队列rq:
清理rq上的相关数据状态。
3、重建内核调度器:
1)遍历系统中的task_list:
判断每一个进程的状态,如果是运行状态,清除其对应的相关状态,例如on_rq(是否加入对应的红黑树的标志位)、vruntime(虚拟运行时间)等状态数据,然后对其进行入队操作,相关的数据状态会调用调度器函数自动更新和同步。
2)遍历系统的task_groups链表:
检测task group的定时器状态,若处于period_active状态,则启动CFSbandwidth的高精度定时器,否则无需启动。
4、退出stop machine状态,系统继续运行。
以上是对Linux内核调度器的重建方法的详细说明,接下来对与上述方法对应的Linux内核调度器的重建装置进行详细的说明。
本说明书还提供了一种Linux内核调度器的重建装置,内核调度器根据纳入调度的各个调度实体对应的状态数据以及调度策略构建调度数据,并根据所构建的调度数据依序完成对各个调度实体的调度;如图3所示,该装置包括:
接收模块301,用于接收到重建内核调度器的指令后,调用stop machine函数使系统进入停机模式,以停止所述内核调度器对调度实体的调度;
确定模块303,用于确定纳入所述内核调度器调度的所有调度实体;
清空状态数据模块305,用于对纳入所述内核调度器调度的每一调度实体执行出队操作,并清空每一调度实体对应的状态数据;
重建状态数据模块307,用于对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据;
清空调度数据模块309,清空所述内核调度器的调度数据;
重建调度数据模块311,用于基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新构建调度数据;
退出模块313,用于退出停机模式,以继续所述内核调度器对调度实体的调度。
其中,在所述内核调度器为完全公平调度器的情况下:
所述调度实体对应的状态数据至少包括虚拟运行时间;
所述调度数据包括以各调度实体对应的虚拟运行时间为关键词的红黑树。
此外,在所述调度实体为进程组的情况下,所述调度实体对应的状态数据还包括:以组内各个进程对应的虚拟运行时间为关键字的红黑树。
此外,在所述内核调度器为完全公平调度器的情况下,所述装置还可以包括:
关闭模块,用于在对纳入所述内核调度器调度的每一调度实体执行出队操作之前,确定所述内核调度器的高精度定时器的状态标志位是否为开启状态;在确定所述高精度定时器的状态标志位为开启状态的情况下,关闭所述高精度定时器;
开启模块,用于在基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新为所述内核调度器构建调度数据之后,退出停机模式之前,在确定所述高精度定时器的状态标志位为开启状态的情况下,开启所述高精度定时器。
此外,所述确定模块还可以具体用于:
遍历所述内核调度器对应的运行队列,确定所述运行队列中的进程以及进程组,将所述运行队列中的进程或进程组确定为纳入所述内核调度器调度的调度实体。
在所述重建指令为更新内核调度器的调度策略的情况下,所述重建状态数据模块可以具体用于:
对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器更新后的调度策略,重新为该调度实体构建并初始化对应的状态数据;
所述重建调度数据模块可以具体用于:
用于基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述更新后的调度策略,重新构建调度数据。
上述实施例阐明的装置、模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
本说明书还提供了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一所述Linux内核调度器的重建法。
图4示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书还提供了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一所述的Linux内核调度器的重建方法的步骤。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (14)
1.一种Linux内核调度器的重建方法,内核调度器根据纳入调度的各个调度实体对应的状态数据以及调度策略构建调度数据,并根据所构建的调度数据依序完成对各个调度实体的调度;该方法包括:
接收到重建内核调度器的指令后,调用stop machine函数使系统进入停机模式,以停止所述内核调度器对调度实体的调度,在所述系统处于停机模式下执行以下步骤:
确定纳入所述内核调度器调度的所有调度实体;
对纳入所述内核调度器调度的每一调度实体执行出队操作,并清空每一调度实体对应的状态数据;
对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据;
清空所述内核调度器的调度数据;
基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新构建调度数据;
退出停机模式,以继续所述内核调度器对调度实体的调度。
2.如权利要求1所述的方法,所述状态数据用于表征调度实体被内核调度器纳入调度后开始记录的状态信息。
3.如权利要求1所述的方法,所述调度数据用于记录各个调度实体的调度顺序信息。
4.如权利要求1所述的方法,在所述内核调度器为完全公平调度器的情况下:
所述调度实体对应的状态数据至少包括虚拟运行时间;
所述调度数据包括以各个调度实体对应的虚拟运行时间为关键字的红黑树。
5.如权利要求4所述的方法,在所述调度实体为进程组的情况下,所述调度实体对应的状态数据还包括:以组内各个进程对应的虚拟运行时间为关键字的红黑树。
6.如权利要求4所述的方法,在对纳入所述内核调度器调度的每一调度实体执行出队操作之前,还包括:
确定所述内核调度器的高精度定时器的状态标志位是否为开启状态;
在确定所述高精度定时器的状态标志位为开启状态的情况下,关闭所述高精度定时器;
在基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新为所述内核调度器构建调度数据之后,退出停机模式之前,还包括:
在确定所述高精度定时器的状态标志位为开启状态的情况下,开启所述高精度定时器。
7.如权利要求1所述的方法,所述确定纳入所述内核调度器调度的所有调度实体,包括:
遍历所述内核调度器对应的运行队列,确定所述运行队列中的进程以及进程组,将所述运行队列中的进程或进程组确定为纳入所述内核调度器调度的调度实体。
8.如权利要求1所述的方法,在重建指令为更新内核调度器的调度策略的情况下:
所述根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据,包括:
根据所述内核调度器更新后的调度策略,重新为该调度实体构建并初始化对应的状态数据;
所述基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新构建调度数据,包括:
基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述更新后的调度策略,重新构建调度数据。
9.一种Linux内核调度器的重建装置,内核调度器根据纳入调度的各个调度实体对应的状态数据以及调度策略构建调度数据,并根据所构建的调度数据依序完成对各个调度实体的调度;该装置包括:
接收模块,用于接收到重建内核调度器的指令后,调用stop machine函数使系统进入停机模式,以停止所述内核调度器对调度实体的调度;
确定模块,用于确定纳入所述内核调度器调度的所有调度实体;
清空状态数据模块,用于对纳入所述内核调度器调度的每一调度实体执行出队操作,并清空每一调度实体对应的状态数据;
重建状态数据模块,用于对纳入所述内核调度器调度的所有调度实体执行出队操作后,对所述出队后的每一调度实体执行入队操作,并根据所述内核调度器的调度策略,重新为该调度实体构建并初始化对应的状态数据;
清空调度数据模块,清空所述内核调度器的调度数据;
重建调度数据模块,用于基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新构建调度数据;
退出模块,用于退出停机模式,以继续所述内核调度器对调度实体的调度。
10.如权利要求9所述的装置,在所述内核调度器为完全公平调度器的情况下:
所述调度实体对应的状态数据至少包括虚拟运行时间;
所述调度数据包括以各调度实体对应的虚拟运行时间为关键词的红黑树。
11.如权利要求10所述的装置,在所述调度实体为进程组的情况下,所述调度实体对应的状态数据还包括:以组内各个进程对应的虚拟运行时间为关键字的红黑树。
12.如权利要求10所述的装置,所述装置还包括:
关闭模块,用于在对纳入所述内核调度器调度的每一调度实体执行出队操作之前,确定所述内核调度器的高精度定时器的状态标志位是否为开启状态;在确定所述高精度定时器的状态标志位为开启状态的情况下,关闭所述高精度定时器;
开启模块,用于在基于为各个调度实体重新构建以及初始化后的对应的状态数据,以及所述调度策略,重新为所述内核调度器构建调度数据之后,退出停机模式之前,在确定所述高精度定时器的状态标志位为开启状态的情况下,开启所述高精度定时器。
13.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-8中任一项所述Linux内核调度器的重建法。
14.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-8中任一项所述的Linux内核调度器的重建方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111501122.5A CN114385392A (zh) | 2021-12-09 | 2021-12-09 | 一种Linux内核调度器的重建方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111501122.5A CN114385392A (zh) | 2021-12-09 | 2021-12-09 | 一种Linux内核调度器的重建方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114385392A true CN114385392A (zh) | 2022-04-22 |
Family
ID=81195546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111501122.5A Pending CN114385392A (zh) | 2021-12-09 | 2021-12-09 | 一种Linux内核调度器的重建方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114385392A (zh) |
-
2021
- 2021-12-09 CN CN202111501122.5A patent/CN114385392A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10733591B2 (en) | Tiered model for event-based serverless computing | |
US9477521B2 (en) | Method and system for scheduling repetitive tasks in O(1) | |
US11175940B2 (en) | Scheduling framework for tightly coupled jobs | |
CN109739627B (zh) | 任务的调度方法、电子设备及介质 | |
US10983846B2 (en) | User space pre-emptive real-time scheduler | |
CN111104227B (zh) | 一种K8s平台的资源控制方法、装置及相关组件 | |
CN111061556A (zh) | 执行优先级任务的优化方法、装置、计算机设备及介质 | |
US20240264875A1 (en) | Method, apparatus, system, device, medium and program product for resource scheduling | |
CN116594753A (zh) | 任务调度方法、装置、电子设备、存储介质及程序产品 | |
US11711795B2 (en) | Apparatus and method for altruistic scheduling based on reinforcement learning | |
CN114327894A (zh) | 资源分配方法、装置、电子设备及存储介质 | |
CN109102200B (zh) | 一种定时任务处理方法及装置 | |
CN110990136A (zh) | 一种任务处理方法和任务调度器 | |
CN114461365A (zh) | 一种进程调度处理方法、装置、设备和存储介质 | |
CN113032119A (zh) | 一种任务调度方法、装置、存储介质及电子设备 | |
CN114385392A (zh) | 一种Linux内核调度器的重建方法及装置 | |
US11360702B2 (en) | Controller event queues | |
CN116737370A (zh) | 一种多资源调度方法、系统、存储介质及终端 | |
CN115373886A (zh) | 服务群组容器停机方法、装置、计算机设备和存储介质 | |
CN115202842A (zh) | 任务调度方法及装置 | |
CN114281504A (zh) | 一种任务调度方法、装置、电子设备及计算机可读介质 | |
US9053227B2 (en) | Concurrent assertion | |
CN110442434B (zh) | 一种任务调度方法、装置、存储介质和服务器 | |
CN117290070A (zh) | 一种构建发布任务的执行方法、装置、设备及存储介质 | |
CN115543560A (zh) | 容器组调度方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |