page cache是按cgroup(单容器)单独管理还是全局统一管理?
关于cgroup/容器的page cache管理逻辑解答
问题1:page cache的管理模式
- Linux内核版本低于4.19、使用cgroup v1时,page cache采用全局统一管理模式,没有针对单个cgroup的独立page cache统计、隔离、回写管控能力,所有容器的page cache资源统一由内核全局调度。
- Linux内核版本≥4.19、使用cgroup v2时,支持按cgroup单独管理page cache,可实现单个容器的page cache限额、独立脏页回写策略配置,是目前主流容器运行时(Docker 20.10+、Kubernetes 1.25+默认启用)的标准实现。
问题2:容器对vm脏页相关参数的使用逻辑
默认情况下,vm.dirty_background_ratio、vm.dirty_writeback_interval等sysctl参数属于全局配置,没有对应的命名空间隔离,所有容器默认共用宿主机的全局参数值,不会单独生效。
如果是cgroup v2环境,可以通过对应cgroup目录下的专属控制文件,为单个容器配置独立的脏页回写规则:
- 对应
vm.dirty_background_ratio的cgroup配置为memory.dirty_background_bytes - 对应
vm.dirty_ratio的cgroup配置为memory.dirty_bytes - 对应
vm.dirty_writeback_interval的cgroup配置为memory.dirty_writeback_interval
配置完成后,该容器的page cache脏页回写逻辑会优先采用自身cgroup的配置,不再遵循全局vm参数。
内容的提问来源于stack exchange,提问作者김민우
相关产品推荐
相关产品推荐

