《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #9 RT Group Scheduling 与RT Throttling...

    xiaoxiao2021-04-16  242

    HACK #9 RT Group Scheduling 与RT Throttling

    本节介绍对实时进程所使用的CPU时间进行限制的功能RT Group Scheduling和RT Throttling。RT Group Scheduling和RT Throttling功能是用来限制使用实时调度策略的进程的CPU时间。内核2.6.25以后的版本都可以使用这个功能。本节将介绍如何使用RT Scheduling和RT Throttling来限制实时进程的CPU时间。为了让Linux系统能够应用到需要实时性的领域,Linux的进程调度程序采用的是实时调度策略(参考Hack #8)。实时调度策略具有静态优先级,调度的优先级比其他一般进程高,需要执行时一定会分配CPU时间。如果实时进程陷入无限循环,就会占用CPU,其他处理完全无法运行。该功能通过限制实时进程的CPU时间,使执行权即使在这种情况下也能切换到其他进程,可以避免产生系统死机的问题。实时实时功能的目的是实现满足实时限制的处理,即,在有限时间内得到处理结果。也就是将对特定事件进行处理的延迟控制在一定时间以内,在有意义的时间内一定作出应答的功能。因此,即使在内核运行过程中,也能迅速切换到要处理事件的进程。因此内核内部设置了优先权点(preemption point),可以根据事件立刻切换到实时进程。要求实时性的处理,如图形处理。在实时图形处理中,画面更新的处理应当配合显示器上显示的刷新来进行。这个实时处理中重要的是要在一定时间(刷新率)内完成图形处理。分配CPU时间提高吞吐量的目的和实时的目的是不同的,这点经常容易混淆。RT ThrottlingRT Throttling是对分配给实时进程的CPU时间进行限制的功能。使用实时调度策略的进程由于bug等出现不可控错误时,完全不调度其他进程,系统就会无响应。通过限制分配给实时进程的每个单位时间的CPU时间,就可以防止使用实时调度策略的进程出现bug。还可以指定单位时间内分配多少CPU时间给实时进程。标准设置的单位时间是1秒,CPU分配时间是0.95秒,非实时进程每1秒也可以使用CPU 0.05秒。可是对分配给实时进程的CPU时间进行限制,会不会对实时处理造成影响呢?答案是不会。正如在关于实时性的介绍中提到的,对某个处理使用实时策略,是为了满足实时限制,即在一定时间内完成处理。如果对实时性有要求的进程占用CPU时间,就不能实现实时性。为使用实时调度策略的进程的处理分配所必需的或实时限制量的CPU时间,就可以防止系统的实时进程出现不可控错误等意外情况。系统的整体设置整个系统的CPU时间设置可以使用sysctl来获取、设置。最近的内核都可以通过sysctl来限制实时进程能够使用的CPU时间。下列为获取当前值的例子。这个例子中使用的是标准设置,单位时间为1秒,CPU分配时间为0.95秒。

    $ sysctl -n kernel.sched_rt_period_us 1000000 $ sysctl -n kernel.sched_rt_runtime_us 950000

    设置示例要将CPU分配时间改为0.9秒,可以执行下列操作。

    # sysctl -w kernel.sched_rt_runtimes_us=900000

    另外,将CPU分配时间指定为–1,对实时进程的CPU时间限制就会消失。这与内核导入该功能之前的行为是一样的。

    # sysctl -w kernel.sched_rt_runtime_us=-1

    当然,也可以从proc文件系统存取。

    /proc/sys/kernel/sched_rt_period_us /proc/sys/kernel/sched_rt_runtime_us

    当CONFIG_RT_GROUP_SCHED有效时,受到Cgroup设置值的限制,不能进行与Cgroup中的有效值相矛盾的设置。但是在这里,将sched_rt_runtime_us设置为–1,是用来使RT Throttling失效的设置。一般来说,sysctl中的设置仅用于有效(启用)与无效(关闭)的切换,单个设置需要使用Cgroup来进行。Cgroup中的设置RT Group Scheduling是Cgroup的子系统。要使用RT Group Scheduling,必须启用CONFIG_RT_GROUP_SCHED。可以与其他Cgroup一样通过cgroup文件系统进行设置(参考Hack #7)。

    # mount -t cgroup cgroup /cgroup

    与RT Group Scheduling相关的项目有下面两个。可以对每个分组分别设置RT throttling的单位时间与CPU分配时间。

    cpu.rt_period_us cpu.rt_runtime_us

    小结在需要实时性的领域,必须向进程赋予实时调度策略,将延迟控制在一定数量以下。但是,实时进程因bug等发生不可控错误时,就可能出现系统自身无法应答的情况。使用RT Group Scheduling功能,可以仅分配实时进程真正需要的CPU时间,从而防止系统进程发生不可控错误等。参考文献 Documentation/scheduler/sched-rt-group.txt—Hiroshi Shimamoto

    相关资源:七夕情人节表白HTML源码(两款)

    最新回复(0)