《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #10 Fair Group Scheduling

    xiaoxiao2021-04-16  216

    HACK #10 Fair Group Scheduling

    本节介绍Cgroup之一、管理CPU资源的Fair Group Scheduling。Fair Group SchedulingFair Group Scheduling是Cgroup的资源管理之一,用来控制Linux内核的进程调度程序进行的CPU时间分配。与其他Cgroup进行的资源管理一样,可以对每个特定进程组进行资源(CPU分配时间)管理。使用这个功能,就可以在分组间对CPU分配时间进行调整。另外,Fair Group Scheduling使用的是Linux 2.6.23以后引入的CFS(Completely Fair Scheduler)的CPU分配时间控制功能,因此在没有安装CFS的Linux 2.6.23之前版本的内核中不能使用。因此,本节介绍怎样通过CFS对非实时调度策略进程的CPU分配进行控制。Fair Group Scheduling的使用方法下面通过实例来讲解Fair Group Scheduling的使用方法。使用前,需要挂载和安装Cgroup文件系统。由于使用了Cgroup进行资源控制,因此挂载时需要启用CPU资源控制。

    # mount -t cgroup -o cpu cgroup /cgroup

    在本示例中将创建两个控制CPU资源的分组,分别为GroupA、GroupB。

    # mkdir /cgroup/GroupA # mkdir /cgroup/GroupB

    为GroupA、GroupB这两个分组分配进程,从而在各分组间公平分享CPU时间。也就是说,GroupA和GroupB的CPU使用率都是50%。然后,确认一下实际的CPU时间分配是否公平。打开一个新的终端,将shell进程分配给GroupA。

    # echo $$ > /cgroup/GroupA/tasks

    然后,在这个shell上形成死循环,使CPU利用率达到100%。

    # while :; do true; done

    接着,向GroupB分配新的shell进程,在shell上形成死循环,使GroupB中的CPU使用率也达到100%。

    # echo $$ > /cgroup/GroupB/tasks # while :; do true; done

    在这个状态下使用top命令确认CPU使用率,可以发现各分组中shell(bash)的CPU使用率基本都是50%,GroupA和GroupB分别使用一半的CPU资源。

    top - 03:53:13 up 1 day, 19:07, 4 users, load average: 1.35, 0.42, 0.14 Tasks: 115 total, 3 running, 112 sleeping, 0 stopped, 0 zombie Cpu(s):100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1021532k total, 497896k used, 523636k free, 80220k buffers Swap: 2064376k total, 0k used, 2064376k free, 204004k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8333 root 20 0 105m 1856 1444 R 50.2 0.2 0:37.83 bash 8342 root 20 0 105m 1820 1424 R 49.9 0.2 0:32.43 bash

    然后,向其中一个分组添加进程,并确认分组间(GroupA和GroupB)的CPU资源分配为各50%。打开一个新的终端,向GroupB添加shell进程。同样,在这个shell上形成死循环,使CPU使用率达到100%。

    # echo $$ > /cgroup/GroupB/tasks # while :; do true; done

    这时使用top命令将显示下列结果。

    top - 03:54:07 up 1 day, 19:08, 4 users, load average: 1.89, 0.71, 0.25 Tasks: 115 total, 4 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s):100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1021532k total, 497896k used, 523636k free, 80228k buffers Swap: 2064376k total, 0k used, 2064376k free, 204008k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8333 root 20 0 105m 1856 1444 R 49.9 0.2 1:04.86 bash 8342 root 20 0 105m 1820 1424 R 24.9 0.2 0:57.64 bash 8354 root 20 0 105m 1852 1448 R 24.9 0.2 0:01.82 bash

    可以看出GroupA和GroupB都为50%,并且GroupB中的两个shell进程也各占25%。再确认一下,是否即使再向GroupB添加其他进程,也不会对分配给GroupA的CPU时间产生影响。同样,添加终端,将shell分配给GroupB,并形成死循环。

    # echo $$ > /cgroup/GroupB/tasks # while :; do true; done

    从top命令的结果可以看出,向GroupA分配了50%,剩下的50%被GroupB的3个进程均分。

    top - 03:57:11 up 1 day, 19:11, 5 users, load average: 3.22, 1.88, 0.79 Tasks: 116 total, 5 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 99.7%us, 0.3%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1021532k total, 498648k used, 522884k free, 80260k buffers Swap: 2064376k total, 0k used, 2064376k free, 204008k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8333 root 20 0 105m 1856 1444 R 49.9 0.2 2:38.69 bash 8342 root 20 0 105m 1824 1424 R 16.9 0.2 1:36.27 bash 8354 root 20 0 105m 1856 1448 R 16.6 0.2 0:39.11 bash 8368 root 20 0 105m 1824 1424 R 16.6 0.2 0:14.23 bash

    以上就是在分组间平分CPU资源的方法。cpu.shares下面介绍cpu.shares特殊文件。在启用CPU资源控制的Cgroup文件系统中,为Fair Group Scheduling准备了cpu.shares文件。

    # ls /cgroup/GroupA cgroup.procs cpu.rt_runtime_us notify_on_release cpu.rt_period_us cpu.shares tasks

    在cpu.shares文件中,可以对进程调度程序所处理的进程组设置CPU时间分配的比重。通过修改这个值,就可以在分组间调整CPU时间的比例。默认值为1024。

    # cat /cgroup/GroupA/cpu.shares

    1024这里将GroupB的cpu.shares设置为GroupA的一半,即512。

    # echo 512> /cgroup/GroupB/cpu.shares

    在CPU资源分配中,GroupA的比重变为1024,GroupB的比重变为512。因此,分配给GroupA的时间就是GroupB的2倍。使用top命令,确认分配给刚才启动的shell进程的CPU资源。

    top - 04:07:40 up 1 day, 19:22, 5 users, load average: 4.00, 3.73, 2.34 Tasks: 116 total, 5 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s):100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1021532k total, 481024k used, 540508k free, 80348k buffers Swap: 2064376k total, 0k used, 2064376k free, 204012k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8333 root 20 0 105m 1856 1444 R 66.5 0.2 7:54.18 bash 8342 root 20 0 105m 1824 1424 R 11.3 0.2 3:20.07 bash 8354 root 20 0 105m 1856 1448 R 11.0 0.2 2:22.90 bash 8368 root 20 0 105m 1824 1424 R 11.0 0.2 1:58.02 bash

    可以发现,GroupA变成66%,GroupB变成33%,并且在GroupB中,3个shell进程分别占用11%。小结本节介绍了Fair Group Scheduling。它能以进程组为单位控制CPU资源分配,将CPU时间平分给多个用户,使特定处理不会对其他处理造成一定程度上的影响。—Hiroshi Shimamoto

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

    最新回复(0)