Repository navigation
ContainerCacheGuard v0.2.0-rc.17
Pre-releaseContainerCacheGuard 0.2.0-rc.17 候选版
新增默认关闭的memory.reclaim后端,用于在内存风险提前显现时请求一次整个容器cgroup的内核主动回收。普通文件后端和旧配置继续兼容,无Web/HTTP服务,仍提供静态amd64/arm64程序及每日详细日志。
- 真实cgroup2、叶子目标、设备/inode/启动身份和SO_PEERCRED核对;只接受已登记目标,拒绝客户端自报路径和回收量。
- 分别检查容器、有限父级和来源绑定的实际kubelet节点/allocatable信号;不把宿主MemAvailable当成kubelet驱逐信号。
- 每个压力事件至多一次尝试;先持久登记、后执行。失败、EAGAIN、EINTR、短写不自动重试;重启时未决结果UNKNOWN继续阻止重复执行。
- 固定节点锁、一个在途辅助进程、备份目标优先;30秒最短节点间隔、5分钟1GiB请求预算。文件工作线程先停让并确认,两个后端不并发操作同一目标。
- 辅助进程隔离阻塞写入,看门狗发起终止但不假定能打断内核IO;保持串行占用至真实退出。
- 1/5/30/120秒复查记录实际时间、内存类别、IO/refault/业务指标与节点信号;请求量、容器下降和驱逐余量分别核对。
- 历史OOM不因重启自动清除;默认要求禁用swap、有效PSI、真实业务覆盖和IO保护。无PSI仅有显式实验策略,单次≤128MiB且要求真实磁盘替代信号。
完整中文配置、参数、四容器接入与回退。源码中的internal-kernel-write仅供受控继承FD调用,没有作为公开绕过保护的命令。节点执行器读取宿主PID/cgroup视图,业务容器无需开放cgroup写权限;OpenShift/SCC/SELinux、具体运行时及生产schema2采集器需另行接入验证。
范围扩大必须明确接受。 memory.reclaim覆盖整个登记cgroup,文件路径和WAL排除规则不适用于这次内核操作。内核可多回收、少回收或引起业务重读/IO;不承诺主动回收anon、shmem、slab。已被kubelet扣除的inactive_file下降,未必改善驱逐余量。单次512MiB默认上限及其他门槛是候选起点,不是已标定的生产安全值。
现场验收仍未通过。 本轮只读确认94运行5.14内核/cgroup2,接口存在、PSI缺失;没有改94现有业务,没有连接或修改171。真实DBS/HISDBS四角色匹配压力、完整备份恢复、无PSI物理盘关联、Kubernetes驱逐对照和48小时长稳仍需独立完成。内置接口完成和隔离缓存下降不能写成“已保证永不驱逐”。
本次实际回归结果
源码提交:610e2d294849b6154384109564721858a450be20。已下载核对原生CI 43213092923原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 119通过,0跳过 | 45通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 119通过,0跳过 | 45通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
至少1GiB隔离对照
同一批已知低复用文件先observe再enforce;数据库不重启,OOM累计跨阶段核对。以下是隔离文件试验,不是DBS/HISDBS真实等压或完整PG备份恢复验收。开发试验配置扫描512MiB/s、建议64MiB/s、工作预算100ms/s、CCG自身CPU保护50%;不等于生产默认或推荐参数。
| 架构 | 基线末驻留GiB | 最后驻留GiB | 最后净下降GiB | 达到1GiB立即区域下降耗时s | 最后持久性检查距达到门槛s | SQL p99 ms 观察→执行 | API p99 ms 观察→执行 | 可见cgroup OOM前→后 |
|---|---|---|---|---|---|---|---|---|
| amd64 | 1.125 | 0.000 | 1.125 | 38.11 | 24.52 | 44.79→49.02 | 45.81→50.15 | 0→0 |
| arm64 | 1.125 | 0.000 | 1.125 | 37.70 | 24.51 | 38.63→48.48 | 39.82→49.78 | 0→0 |
本次执行期SQL/API采样p99与可见cgroup IO峰值均上升;回收目标通过不能写成低影响验收通过。阶段长度/样本量不同、共享可见cgroup未做逐进程归因,不能认定所有增量由CCG造成,也不能排除影响。原始IO、CPU/RSS采样、SQL/API样本量与完整候选范围诊断在TEST-RESULTS.json。采样最大值不是连续峰值;p99为有限样本统计,不是生产SLO结论。确认冷/干净页数量保持未知,不将驻留当热度,不将slab下降记收益。
真实memory.reclaim隔离实验
新建2GiB叶子cgroup,先装入1.125GiB文件缓存,内核后端请求一次;节点信号为明确标识的合成测试输入,业务探针来自PG14和本地测试API。重启执行器核对不重复调用,继续到120秒实际复查。这不等于真实kubelet驱逐或无PSI部署验收。
| 架构 | 请求MiB | 容器最终净下降MiB | 文件最终净下降MiB | SQL p99 基线→执行ms | API p99 基线→执行ms |
|---|---|---|---|---|---|
| amd64 | 256.00 | 243.31 | 250.00 | 42.20→43.00 | 54.79→44.13 |
| arm64 | 256.00 | 243.04 | 249.93 | 32.07→34.53 | 53.39→35.78 |
请求量和实际下降分别记录;普通文件后端仍保留另一次>=1GiB回收试验。节点已扣除inactive_file时,容器下降不能直接认定驱逐余量改善。没有改171,没有在94现有业务部署;94只读确认接口存在但PSI缺失,仍需真实替代信号资格和等压长稳验证。