Linux cgroups机制 cpu/cpuset/schedtune

Linux cgroups机制 cpu/cpuset/schedtune

Linux cgroups机制中的cpu/cpuset/schedtune子系统 跟linux/android进程调度策略有关,记录下各项功能参数的用法。


Cpu

  • cpu.shares:整数值,用来设置分组任务获得 CPU 时间的相对值。
  • cpu.rt_runtime_us:用来设置实时进程获得 CPU 资源的周期,单位为微妙。
  • cpu.rt_period_us:用来设置实时进程可以最长获得 CPU 资源的时间,单位为微秒

在每个指定的周期,允许一个实时任务组最多执行多长时间。当实时任务组在一个周期用完了带宽时,这个任务组将会被节流,不允许继续运行,直到下一个周期。
比如
cpu.rt_period_us为1000000,cpu.rt_runtime_us为950000,代表不同策略组的Cpu.shares 比例,决定不同策略组获得cpu时间片的比例
A group 的 cpu.shares 文件不变, 值为 1024
B group 的 cpu.shares 文件中的值改为 512, 这样, 相当于B占用CPU总资源的 1/3 (因为 512 / (512+1024) = 1/3)


Cpuset

Cpuset用于修改task的cpu核亲和度

  • cpus对应内核亲和度,必须是连续的,比如0-3,2-6
  • cpu_exclusive对应是否核独占,如果设置代表tasks将独占cpus对应的cpu核,一般都是关闭

Schedtune

schedtune提供了一套用户接口的工具,用于功耗-性能调节。schedtune是cgroup的一个子系统。所以在cgroup的mount节点下,stune分别为每个group,都提供了2个调节开关:

  • schedtune.boost
    boost的值用int型表示,范围为[0, 100]。
    boost默认值为0,代表CFS调度器会工作在能耗最低的状态。这也意味着schedutil使task跑在最低的OPP。
    boost值100,则表示调度器为工作在性能最高的状态,同时OPP也处在最大。
    0-100的范围可以根据其他场景来进行适当调节。比如,优化交互的响应、电池电量变化等。
  • schedtune.prefer_idle
    这是一个控制调度器节省功耗优先,还是性能优先的flag。
    默认值0,会让CFS调度器根据energy-aware wakeup策略来分配在group中的task。(功耗优先)
    当值设为1,会让CFS调度器分配task时,有最小的wakeup延迟。(性能优先)
    android平台下使用这个flag用来表示正在和用户交互的应用。
    设为1的节点:
    dev/stune/foreground/schedtune.prefer_idle
    dev/stune/top-app/schedtune.prefer_idle
    设为0节点:
    dev/stune/background/schedtune.prefer_idle
    dev/stune/rt/schedtune.prefer_idle
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×