CPU时间片比例值设置
cat /cgroup/GroupA/cpu.shares
$ sysctl -n kernel.sched_rt_period_us
1000000
$ sysctl -n kernel.sched_rt_runtime_us
950000
使用下列方法启用 cpuset 选项, 挂载 Cgroup
后, 就可以使用 cpuset
使用 cpuset 前, 必须通过内核 config 启用 cpuset 功能
CONFIG_CPUSETS=y
CPU资源
mount -o cpuset -t cgroup cgroup /cgroup
MEM资源
mount -t cgroup -o memory memcg /cgroup
memory.usage_in_bytes 显示当前内存(进程内存 + 页面缓存) 的使用量
memory.memsw.usage_in_bytes 显示当前内存( 进程内存 + 页面缓存) + 交换区使用量
memory.limit_in_bytes 设置、 显示内存(进程内存 + 页面缓存) 使用量的限制值
memory.memsw.limit_in_bytes 设置、 显示内存( 进程内存 + 页面缓存) + 交换区使用量的限制值
memory.falicnt 显示内存(进程内存 + 页面缓存) 达到限制值的次数
memory.memsw.failcnt 显示内存( 进程内存 + 页面缓存) + 交换区到达限制值的次数
memory.max_usage_in_bytes 显示记录的内存(进程内存 + 页面缓存) 使用量的最大值
memory.memsw.max_usage_in_bytes 显示记录的内存( 进程内存 + 页面缓存) + 交换区使用量的最大值
memory.stat 输出统计信息, 详细内容后面叙述
memory.force_empty 强制释放分配给分组的内存
memory.use_hierarchy 设置、 显示层次结构的使用
memory.swappiness 设置、 显示针对分组的 swappiness(相当于sysctl 的 vm.swappiness)
范例:
# mkdir /cgroup/GroupA
# echo 10M > /cgroup/GroupA/memory.limit_in_bytes
# echo $$ > /cgroup/GroupA/tasks
通过 Memory Cgroup 控制的分组可以采用层次结构
echo 1 > /cgroup/memory.use_hierarchy
# mkdir /cgroup/A
# echo 100M > /cgroup/A/memory.limit_in_bytes
# mkdir /cgroup/A/{B1,B2}
# echo 70M > /cgroup/A/B1/memory.limit_in_bytes
# echo 30M > /cgroup/A/B2/memory.limit_in_bytes
# mkdir /cgroup/A/B1/{C11,C12}
# echo 40M > /cgroup/A/B1/C11/memory.limit_in_bytes
# echo 30M > /cgroup/A/B1/C12/memory.limit_in_bytes
# mkdir /cgroup/A/B2/{C21,C22}
# echo 20M > /cgroup/A/B2/C21/memory.limit_in_bytes
# echo 10M > /cgroup/A/B2/C22/memory.limit_in_bytes
显示统计信息
关于各分组内存使用量的统计信息可以从 memory.stat 文件中读取
cache 页面缓存量( 字节数)
rss 匿名页面与交换区缓存的内存量( 字节数)
mapped_file 指向进程空间的文件映射所使用的内存量( 字节数)
pgpgin 页面换入次数
pgpgout 页面换出次数
swap 交换区使用量( 字节数)
inactive_anon LRU 列表中无效的匿名页面( 字节数)
active_anon LRU 列表中有效的匿名页面( 字节数)
inactive_file LRU 列表中无效的文件缓存( 字节数)
active_file LRU 列表中有效的文件缓存( 字节数)
unevictable 不能用 mlock 等回收的内存量( 字节数)
hierarchical_memory_limit 上层分组对内存( 进程内存 + 页面缓存) 的限制值
hierarchical_memsw_limit 上层分组对内存( 进程内存 + 页面缓存) + 交换区的限制值
total_cache 本分组下所有页面缓存量( 字节数) 的合计值
total_rss 本分组下所有匿名页面与交换区缓存内存量( 字节数) 的合计值
total_mapped_files 本分组下所有指向进程空间的文件映射所使用的内存量( 字节数) 的合计值
total_pgpgin 本分组下所有页面换入次数的合计值
total_pgpgout 本分组下所有页面换出次数的合计值
total_swap 本分组下所有交换区使用量( 字节数) 的合计值
total_inactive_anon 本分组下所有 LRU 列表中无效的匿名页面( 字节数) 的合计值
total_active_anon 本分组下所有 LRU 列表中有效的匿名页面( 字节数) 的合计值
total_inactive_file 本分组下所有 LRU 列表中无效的文件缓存( 字节数) 的合计值
total_active_file 本分组下所有 LRU 列表中有效的文件缓存( 字节数) 的合计值
total_unevictable 本分组下所有不能用 molock 等回收的内存量( 字节数) 的合计值
参考文献
• Documentation/cgroup/memory.txt
Block I/O
CONFIG_BLK_CGROUP
CONFIG_CFQ_GROUP_IOSCHED
确认 Cgroup 支持
cat /proc/cgroups
subsys_name hierarchy num_cgroups enabled
blkio 1 1 1
只要 subsys_name 列显示了 blkio, 且 enabled 为 1
cgroup_disabled=blkio
确认 CFQ 支持
cat /sys/class/block/sdb/queue/scheduler
noop deadline [cfq]
eg:
blkio.weight 中写入 100~1000
# echo 1000 > /cgroup/high/blkio.weight
# echo 100 > /cgroup/low/blkio.weight
blkio.weight RW 设置分组 weight 值的文件。 weight 值可以设置为
100~1000。 weight 值越大, 优先级越高
blkio.weight_device RW 按照 < 设备主号码 >:< 设备副号码 ><weight 值 >
的格式写入, 就可以为各设备设置 weight 值。 将
<weight 值 > 设置为 0 时, 该设备的设置被清除。
这里没有进行设置的设备使用 blkio.weight 的
weight 值
blkio.io_merged R 合并的 I/O 数
blkio.io_queued R 当前保留的 I/O 数
blkio.io_service_bytes R I/O 请求总字节数
blkio.io_serviced R I/O 请求数