【问题标题】:Scheduling Policy调度策略
【发布时间】:2012-02-17 07:42:10
【问题描述】:

在从事嵌入式项目时;在将调度策略从 SCHED_OTHER 更改为 SCHED_RR 期间,我遇到了计时器问题和流加载延迟。一些问题在SCHED_OTHER 期间不会出现,而是在SCHED_RR(循环)出现。

更改调度策略会产生什么影响。在政策变更期间在嵌入式项目中实现内核模块时需要注意什么?

【问题讨论】:

    标签: posix posix-ere


    【解决方案1】:

    SCHED_RR 带有时间片,因此如果进程完成时间片 下一个过程将轮流进行。如果你的时间片足够大,那么短的 IO 进程 将比 Cpu 处于劣势,因为 cpu 任务会在整个时间片内阻塞 CPU。但是请注意,如果您减少时间片,您将获得更多的上下文切换,因此对于这个更高的责任会降低性能。我还提供了优先级。

    SCHED_OTHER 与 RR 不同,因此不提供静态优先级。 它有一个动态优先级,如果进程准备好运行但在 等待队列。如果进程处于活动状态,它将被重置为 0。您还可以使用 nice 将动态值从 -20 缩放到 19(在 19 上,进程是 nice 并且更频繁地等待)

    我主要在嵌入式系统中使用 SCHED_OTHER 和 SCHED_FIFO

    最好的问候 肯尼

    【讨论】:

    • 感谢 kenny 提供意见。
    • 但是关于时间切片如何减少进程的时间切片,有没有 posix 函数呢?还有对于 SCHED_OTHER,动态优先级是什么,使用哪个 API?
    • 要更改不错的值,您可以使用 posix 函数 linux.die.net/man/2/nice 动态值本身,您无法更改这将是讨厌的
    • posix 函数如 pthread_setschedprio 用于实时策略,如 SCHED_RR 和 SCHED_FIFO,但对于 SCHED_OTHER,我找不到 posix 函数,如果有,请提供 posix 函数的名称。
    • 为了设置和获取不错的值,您可以使用 "getpriority(int which, int who)" 和 "setpriority(int which, int who, int prio)" linux.die.net/man/2/getpriority
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多