cgroup 笔记随笔

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 请求数
blkio.io_service_time R I/O 请求设备到完成所花费的总时间 单位为纳秒
blkio.io_wait_time R I/O 请求到达设备之前保留在等待队列的总时间单位为纳秒
blkio.reset_stats W 写入后 统计信息被清除
blkio.sectors R I/O 请求的总扇区数
blkio.time R 目前为止分配给分组的时间片的长度 单位为纳秒

group_isolation RW 用来设置在 I/O 性能和分组间优先级控制二者中优先切换到哪一个 0 为了实现 I/O 性能
                      最大化 会适度降低一些分组优先级的兼容性

Note:不支持非同步 I/O;不支持分组层次化
     /cgroup # 根分组
     /cgroup/gr1 # 第一层 可以创建
     /cgroup/gr1/gr2 # 第二层 不可以创建

• Documentation/cgroups/blkio-controller.txt













 

 














 

猜你喜欢

转载自blog.csdn.net/hypatia2015/article/details/45498591