一、按比例控制cpu资源
1.挂载cgroup文件系统
jian@ubuntu:~/share$ sudo mkdir /cgroup
jian@ubuntu:~/share$ sudo mount -t cgroup -o cpu cgroup /cgroup
2.创建两个cpu资源分组ga和ga
jian@ubuntu:~/share$ sudo mkdir /cgroup/ga
jian@ubuntu:~/share$ sudo mkdir /cgroup/gb
3.把进程分配给两个资源组组
首先通过ps查看到自己这个控制台的PID为8086,并且把8086进程分配给ga组。
jian@ubuntu:~/share$ ps
PID TTY TIME CMD
8086 pts/0 00:00:00 bash
8253 pts/0 00:00:00 ps
jian@ubuntu:~/share$ sudo echo 8086 > sudo /cgroup/ga/tasks
新开一个控制台进行同样的操作,分给资源组gb。当然,可以使用$$代表当前进程来进行快速操作:
jian@ubuntu:~/share$ sudo echo $$ > sudo /cgroup/ga/tasks
4.查看cpu时间分配值(cgroup分配cpu时间是根据值的比例来分配的)
jian@ubuntu:~/share$ cat /cgroup/ga/cpu.shares
1024
5.修改ga和gb分配cpu资源的比重为2:1
jian@ubuntu:~/share$ sudo echo 1024 > sudo /cgroup/ga/cpu.shares
jian@ubuntu:~/share$ sudo echo 512 > sudo /cgroup/gb/cpu.shares
二、按cpu号控制cpu资源(可以提高缓存的利用率)
1.开启cpuset功能
修改内核CONFIG_CPUSETS = y
2.挂载cgroup文件系统
jian@ubuntu:~/share$ sudo mkdir /cgroup
jian@ubuntu:~/share$ sudo mount -t cgroup -o cpuset cgroup /cgroup
3.创建两个cpu资源分组ga
jian@ubuntu:~/share$ sudo mkdir /cgroup/ga
4.把cpu0分配给ga组
jian@ubuntu:~/share$ sudo echo 0 > sudo /cgroup/ga/cpuset.cpus
5.把进程分配给ga资源组
jian@ubuntu:~/share$ sudo echo $$ > sudo /cgroup/ga/task
这样子sh进程就可以只运行在cpu0上。
三、控制内存资源
1.在Ubuntu21.10虚拟机上无法查看和修改cgroup的memory.limit_in_bytes参数,需要修改/etc/default/grub文件,其中的两行原文是:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US"
改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0"
GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US systemd.unified_cgroup_hierarchy=0"
执行线面命令更新grup:
grub-mkconfig -o /boot/grub/grub.cfg
2.挂载cgroup文件系统
jian@ubuntu:~/share$ sudo mkdir /cgroup
jian@ubuntu:~/share$ sudo mount -t cgroup -o memory cgroup /cgroup
3.创建两个cpu资源分组ga
jian@ubuntu:~/share$ sudo mkdir /cgroup/ga
4.设置ga组的内存使用量限制为10M
jian@ubuntu:~/share$ sudo echo 10M > sudo /cgroup/ga/memory.usage_in_bytes
5.把进程分配给ga资源组
jian@ubuntu:~/share$ sudo echo $$ > sudo /cgroup/ga/task
这样子当前sh进程只能使用10M内存。
四、控制IO资源
1.配置内核
CONFIG_BLK_CGROUP = y
CONFIG_CFQ_CGROUP_IOSCHED = y
2.确定cgroup支持Block IO控制
查看 /proc/cgroups 文件,可以看到 blkio ,并且enabled为1则说明支持。
3.挂载cgroup文件系统
jian@ubuntu:~/share$ sudo mkdir /cgroup
jian@ubuntu:~/share$ sudo mount -t cgroup -o blkio cgroup /cgroup
4.查看块设备的调度算法
cat /sys/class/block/sda/queue/scheduler
[mq-deadline] none cfq
看到支持的调度算法,其中当前选择的调度算法已加上[ ]括号。
5.设置cfq调度算法
jian@ubuntu:~/share$ sudo echo cfq > /sys/class/block/sda/queue/scheduler
6.创建两个io资源分组high和low
jian@ubuntu:~/share$ sudo mkdir /cgroup/high
jian@ubuntu:~/share$ sudo mkdir /cgroup/low
7.设置权重
jian@ubuntu:~/share$ sudo echo 1000 > sudo /cgroup/high/blkio.weight
jian@ubuntu:~/share$ sudo echo 100 > sudo /cgroup/low/blkio.weight
8.把进程分配给两个组
新建一个控制台,把进程分配给high组
jian@ubuntu:~/share$ sudo echo $$ > sudo /cgroup/high/task
同样新建一个控制台,把进程分配给low组
jian@ubuntu:~/share$ sudo echo $$ > sudo /cgroup/low/task
9.清理cache
jian@ubuntu:~/share$ sudo echo 3 > sudo /proc/sys/vm/drop_caches
10.两个控制台同时执行dd操作,并且使用time计时
jian@ubuntu:~/share$ time dd if=~/high of=/dev/null bs=1M count=400
jian@ubuntu:~/share$ time dd if=~/low of=/dev/null bs=1M count=400