Repository navigation
Releases
ContainerCacheGuard v0.2.0-rc.17
ContainerCacheGuard 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缺失,仍需真实替代信号资格和等压长稳验证。
ContainerCacheGuard v0.2.0-rc.16
ContainerCacheGuard 0.2.0-rc.16 候选版
针对“累计查询很大、驻留命中很少、可见普通缓存仍大”的证据缺口增加覆盖归因,并支持明确授权的数据文件覆盖与受保护的压力加速。
coverage_audit:按根目录和文件名类型统计元数据/打开/跳过/初查/复查/驻留/合格范围/建议及区域变化;展示PGDATA环境线索、根设备/inode/UID/权限和挂载位置。- auto增加
executable_data_paths,只对显式数据根下的授权路径放开执行位规则;不增加根、不追链接、不取消排除与库文件规则。大文件改为按区域轮转。 - 扫描历史有界,区分窗口内新查询和重复查询,淘汰明确计数。累计查询不是唯一全量覆盖,驻留与策略合格均不等于证明冷页或干净页。
- 候选ID关联创建、建议、立即/延迟复查、重新驻留保护、重试、退避和终态;额外复查可配置为建议后30/120秒等时点。事件环有界,覆盖掉的事件计数,不假装保存全部逐候选历史。
pressure_boost显式启用,在已有真实保护允许时于自身/父级高水位或节点预警带加速至配置建议上限。复用critical_mode=bounded和持续健康恢复;新OOM、脏页、IO/PSI、refault、业务或节点停止线仍优先暂停,不无上限强刷。guard_transition记录每次采样到的决策变化,不受周期状态日志一秒节流;它不补造采样间瞬态。
不修改CPU、DBS/HISDBS内存或IO配额,不清理anon/shmem/slab,不重启归零或全局drop_caches。没有证据将slab下降记为CCG收益。用户06:14—07:13的rc.12结论保留为外部证据,现场原因仍需原始日志、实际PGDATA/权限与记账对照确认。
计划与完整参数见开发计划和使用手册。发布前需原生双架构回归与>=1GiB隔离对照;实际结果由发布附件和最终交付单记录,不能将隔离PG14探针替代DBS/HISDBS真实备份恢复和48小时验收。
本次实际回归结果
源码提交:e70a71d0a4d2f96cfb039754585d33d22c608c59。已下载核对原生CI 43125852933原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 104通过,0跳过 | 45通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 104通过,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 | 37.90 | 24.56 | 41.03→49.01 | 41.98→50.04 | 0→0 |
| arm64 | 1.125 | 0.000 | 1.125 | 37.90 | 24.51 | 33.32→52.04 | 34.72→53.39 | 0→0 |
本次执行期SQL/API采样p99与可见cgroup IO峰值均上升;回收目标通过不能写成低影响验收通过。阶段长度/样本量不同、共享可见cgroup未做逐进程归因,不能认定所有增量由CCG造成,也不能排除影响。原始IO、CPU/RSS采样、SQL/API样本量与完整候选范围诊断在TEST-RESULTS.json。采样最大值不是连续峰值;p99为有限样本统计,不是生产SLO结论。确认冷/干净页数量保持未知,不将驻留当热度,不将slab下降记收益。
ContainerCacheGuard v0.2.0-rc.15
ContainerCacheGuard 0.2.0-rc.15
新增schema_version=2离线报告:普通文件缓存字节×秒、时间加权均值、CPU时间均值、业务p99采样最大值、节点/探针来源及有效覆盖。小时拆分、重启/缺样和未知值有明确处理。
新增compare按实例对照observe/enforce,先检查窗口、身份和五类覆盖,再判断缓存改善与IO、尾延迟和CCG自身开销门槛。提供JSON/Markdown、可配置阈值及require-thresholds退出检查;证据不足不伪造通过。详细手册。
完整保留rc.14信号加固、许可有效期、离线配置检查和无Web/30天1GB日志。amd64/arm64静态候选的实际结果见发布TEST-RESULTS.json。本轮不连接或修改171/94;PG14真实配对、完整备份恢复、业务48小时尚未通过。telemetry_thresholds_met仅为遥测筛查,不能称为生产验收通过。
本次实际回归结果
源码提交:c8523d6d2000c0c2b110b6679a59a851afadb4c7。已下载核对原生CI 43056936817原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 93通过,0跳过 | 43通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 93通过,0跳过 | 43通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
ContainerCacheGuard v0.2.0-rc.14
ContainerCacheGuard 0.2.0-rc.14
新增check-config离线参数检查;状态、日志和doctor输出信号年龄/有效期与节点停止线/余量。指标与节点、业务信号按最早有效期收回许可,保留连续健康恢复。
统一有界信号读取,拒绝符号链接/FIFO/超长/重复字段/过深JSON;业务附加字段仍兼容。详细升级注意事项见使用手册,开发计划见rc.14/15计划。
严格默认、无Web、静态amd64/arm64和每日30天/1GB日志保留。本轮不连接或修改171/94。受限输出策略实验性不变,PG14真实配对备份及48小时验收未完成;原生回归和附件以发布TEST-RESULTS.json为准,不能据此宣称不会驱逐。
本次实际回归结果
源码提交:243cacaa07c5aa8de6c8bd13f9e04a5c03b0956d。已下载核对原生CI 43054188767原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 86通过,0跳过 | 39通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 86通过,0跳过 | 39通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
ContainerCacheGuard v0.2.0-rc.13
ContainerCacheGuard 0.2.0-rc.13
本版补齐缺PSI环境的显式实验策略和可信报告基础。仍为候选版本,不能宣称解决所有Kubernetes驱逐。
- 默认strict保持,新增受限
limited-output只允许cgroup v2和声明的低复用备份产物;替代保护缺失/过期/来源不符或风险超限暂停新建议,恢复需连续健康。 - 接入来源绑定的kubelet Summary实际memory.available、configz有效内存驱逐阈值和MemoryPressure;附独立只读采集脚本,核心静态程序无Python/Kubernetes客户端依赖,不创建RBAC。
- 可选instance_id、每次启动随机run_id及可见cgroup设备/inode贯穿状态、日志、预检和报告;计数不跨运行/身份变化衔接。
- 多实例来源清单和离线SVG图片,继续支持Markdown/JSON,无Web、不监听端口;缺样、observe和暂停不伪造健康。
- 两备份角色保守示例、四容器接入、信号格式和回退说明;保留每日一文件、30天/1GB清理。
详细使用说明和交付证据/未验收项。原生双架构race/CLI及静态附件以本次发布附TEST-RESULTS.json为准。
94本轮只读确认Kubelet1.26.12、cgroup v2、约30GiB且PSI仍不可用;实际hard memory.available=1Gi。没有修改171,没有在94替换程序/启用PSI/重启数据库/恢复旧压力。完整匹配的真实PG14输出端对照、两库完整备份校验恢复和48小时仍未通过。能力发布与业务验收分开,实验策略不覆盖源PGDATA、匿名内存尖峰及磁盘/PID压力,不自动停止外部备份。
本次实际回归结果
源码提交:462ebd1e5c891931095ade18d3ede830f66a9e55。已下载核对原生CI 42956004282原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 82通过,0跳过 | 37通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 82通过,0跳过 | 37通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
ContainerCacheGuard v0.2.0-rc.9
v0.2.0-rc.9:低开销标准监控与监测就绪
候选版;PG14真实业务48小时、业务SLO和零驱逐验收仍未完成。本轮未修改171或替换94运行实例。
已实现
复用既有只读Web监听、Basic认证、并发和超时,新增GET/HEAD的/healthz、/readyz及/metrics,不新增扫描线程或目录遍历。进程能响应、监测数据就绪、允许回收分开表达;observe、人工暂停和正常退让仍可监测就绪。指标错误、尚无样本、过期、关键当前内存缺失或异常时间时监测不就绪;错误/过期的资源与工作值不输出为零。所有HTTP接口只读取有界快照,不查询业务。
Prometheus文本含HELP/TYPE及固定枚举标签,记录内存分类、IO、refault、建议/净下降/重新驻留、发现积压、恢复窗口和进程成本。建议范围不是实际释放,IO累计可能因堆叠设备重复计量,refault不能单独归因于CCG,host MemAvailable不是kubelet驱逐信号。指标不包含路径、SQL、容器ID或原始错误标签;版本限定为短构建标识。
metrics.available_metrics与已有读取结果同时构建,无新增内核探测来补造字段;v1缺失类型、省略的OOM/速率和首次差分基线显式可用性为false。只缺少可选字段时已知值仍可查看;缺少file/shmem无法可靠分解时诊断说明不作普通文件总量推断。页面缺失字段显示未知、对应曲线断线,指标时间过旧/异常时整组实时卡片标记未知。
状态新增实际web_address,端口0由系统分配时可以定位监听;不会自动配置容器或节点网络转发。Web关闭时新接口也关闭。
运维接入
完整中文说明包含指标含义、时间窗口、认证、TLS代理、四目标Prometheus例子及告警表达式。不把CCG健康绑定到数据库业务容器liveness;sidecar的readiness也可能影响整个数据库Pod服务就绪,需避免故障耦合。没有自动改任何Pod探针、安装Prometheus或写cgroup。
验证边界
新增原生Linux测试覆盖空样本、已知零/未知字段、采样错误、过期与未来时间、固定标签/格式/隐私、HTTP认证/只读方法、抓取不改变工作计数。CLI从真实daemon和实际cgroup获取三个接口,核对人工暂停仍监测就绪及真实内存值。网页回归覆盖字段缺失与字段级断线。
CI另记录1000次固定快照编码微基准的ns/op、B/op和allocs/op;它只衡量编码,不是HTTP并发压力或整个CCG/数据库资源代价验收。原生两架构最终结果见发布记录;两架构页大小若为4KiB,不能外推64KiB页。
保留rc.8程序及原配置可回退。旧配置可直接读取;新增状态字段和HTTP路径为追加。监测缺失不应当成零,接入方需要同时读取就绪和可用性。
本次实际回归结果
源码提交:e5f24595f60c8f0969cbe7824396cbf60357a966。已下载核对原生CI 42738942714原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 44通过,0跳过 | 15通过 | 12通过 | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 44通过,0跳过 | 15通过 | 12通过 | 4096 B | 无INTERP/DYNAMIC段 |
| 架构 | 固定快照编码ns/op | B/op | allocs/op | 次数 |
|---|---|---|---|---|
| amd64 | 21690.0 | 17333 | 325 | 1000 |
| arm64 | 24318.0 | 17333 | 325 | 1000 |
该微基准只测内存快照编码,不包含HTTP传输、认证、目录扫描或实际业务,不能据此认定整个守护进程成本或生产SLO通过。
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
ContainerCacheGuard v0.2.0-rc.8
v0.2.0-rc.8:安全退让后的连续健康恢复
当前为候选版,不是PG14真实业务48小时稳定性验收结果。171未修改,本轮未替换94运行实例。
行为变化
新增recovery_healthy_seconds,默认10秒,0可关闭。enforce一旦出现IO、脏页、业务信号、指标错误、资源预算或其它安全退让,原始保护立即拒绝新释放;恢复正常后,从首个健康样本起累计连续时间。中途异常、人工暂停、时间逆行或采样空窗超过3倍采样周期会重新计时。首次健康启动保持原有warmup和策略,不额外等待。
所有原始保护先执行,恢复门只会拒绝本来允许的动作,绝不会把拒绝改为允许。正常低于目标的IDLE可贡献健康样本,但不会被强制改成回收。临界区显式bounded仍按原策略判断;“健康”仅表示没有触发当前配置的保护,并非证明页冷、业务安全或K8s不会驱逐。
恢复等待也可能增加备份窗口和缓存控制滞后;应在相同负载下评估,而不是无条件把等待调为0。等待期间保留有预算的慢速观察,不承诺完全无CPU或元数据开销。
更可靠的异常解释
新增recovery状态及页面恢复进度,记录风险阶段进入与健康窗口完成次数。恢复期间原因为waiting_healthy_recovery。原始安全判断全部完成后才一次性更新worker授权,避免临时打开后又撤销。
业务信号必须是普通文件,内容为最多16KiB的单个JSON对象,拒绝负p99、多余对象、超大输入、过期和无效数据;FIFO等非普通文件以非阻塞方式打开后立即拒绝,避免等待写入方卡住采样循环。信号写入建议使用原子替换。doctor在实际指标采集失败时返回非零,并保留JSON错误细节,避免检查结果被当成健康。
版本号由源码VERSION统一提供给构建脚本与CI,官方产物仍核对静态ELF、提交号、干净工作区和SHA256。
回归和升级
新增模拟时钟回归覆盖首次启动、连续健康、再次异常、采样空窗、人工暂停、时间逆行、IDLE和原始保护不可绕过。真实Linux文件CLI增加业务信号故障/恢复/再次故障的测试,要求等待期建议量不增加、最终连续健康后恢复且文件SHA256不变。原生amd64/arm64结果见对应发布页和CI。
旧配置会采用默认10秒恢复等待;如需保持原先无等待行为,可显式设0,但应先评估业务代价。保留rc.7程序和配置回退;同一范围不要同时运行两份enforce。新增字段为追加,采集端需允许读取新字段。
本次实际回归结果
源码提交:cd2e350b0dad8ae8328459cfb64308a956de1835。已下载核对原生CI 42735032258原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 40通过,0跳过 | 12通过 | 7通过 | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 40通过,0跳过 | 12通过 | 7通过 | 4096 B | 无INTERP/DYNAMIC段 |
首轮CI 42734662425单元测试后在版本格式校验处失败,原因为Windows生成VERSION带CRLF;已规范LF并增加.gitattributes,上表以修正后完整运行结果为准,未将首轮记为全套通过。
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
ContainerCacheGuard v0.2.0-rc.12
ContainerCacheGuard 0.2.0-rc.12
2026-11-11。基于rc.11,保留静态amd64/arm64、无Web、详细中文日志、一天一文件/30天/1GB和保护输入缺失暂停。
- doctor增加--require-ready双样本严格部署预检与中文能力原因,区分PSI权限、无效内容、可见接口缺失和明确关闭启动参数。不修改内核、不关闭保护。
- 已等待重扫的文件索引跨时间片累计一轮最早唤醒时间,全量等待期间跳过反复索引遍历;新文件/已发现身份变化使缓存失效。新增发现历时、调度与跳过原因计数。
- 重复无即时净下降的区域按1/2/4/8倍冷却退避,三次后保留有界历史再等待;再次驻留和所有原保护仍优先。
- 新增report离线小时JSON/Markdown统计,无HTTP,不访问PGDATA或cgroup。区分观察、暂停、缺样、重启、回退、建议量、复查下降和重新驻留,拒绝不完整/超限日志及特殊文件。
- 增加四角色observe模板、详细参数、预检/持久挂载/输出端与源端验证说明。
使用与边界见rc.12手册。回归、微基准与发布附件核验见交付记录。程序回归不代表实际数据库压力验收,索引等待微基准不代表完整扫描/磁盘IO成本。没有启用94 PSI或替换运行实例,没有操作171;PG14真实业务48小时、YsP正式服务和ARM64 64KiB页验收仍未完成。
本次实际回归结果
源码提交:f9808175914466d5162cef77a803b89a5be5955c。已下载核对原生CI 42860228580原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 71通过,0跳过 | 32通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 71通过,0跳过 | 32通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
最终核验补充
同PID重启通过daemon_started/daemon_stopped断开基线,已有实际守护进程日志CLI回归。缺少生命周期事件的旧日志仍有身份识别限制。每次report仅输入同一实例日志,不混合四容器;cgroup路径不能跨容器唯一识别。
等待索引微基准
以下每项50次,只比较全部等待时的索引遍历与已缓存唤醒分支。基线索引共享同一文件记录以减少额外缓存变量;不包含首次遍历、缓存失效、发现、mincore、实际磁盘IO、完整进程或业务。不能据此宣称整体性能提升相同比例。
| 架构 | 索引条目 | 遍历ns/op | 缓存等待ns/op | 两者B/op / allocs/op |
|---|---|---|---|---|
| amd64 | 1000 | 3860.0 | 16.82 | 0/0;0/0 |
| amd64 | 100000 | 315847.0 | 7.4 | 0/0;0/0 |
| amd64 | 1000000 | 3020919.0 | 11.22 | 0/0;0/0 |
| arm64 | 1000 | 2170.0 | 5.28 | 0/0;0/0 |
| arm64 | 100000 | 221264.0 | 7.84 | 0/0;0/0 |
| arm64 | 1000000 | 2232634.0 | 12.8 | 0/0;0/0 |
失败与重测记录
首轮CI 42858263700未通过:旧到期测试只修改NextScan,不能同时模拟新增唤醒缓存的时间流逝。已改为真实等待到期,并补充提示身份变化唤醒和超大冷却时间饱和测试。后续两轮通过后,最终复核又补充同PID生命周期事件断开基线的修正和回归;仅上表最终CI用于本次发布。未将失败轮计为通过,也未发布中间构建。
ContainerCacheGuard v0.2.0-rc.11
v0.2.0-rc.11:取消Web服务,提供详细日志
按用户最新需求,取消整个内置Web服务:移除页面、HTTP API、Prometheus、healthz/readyz,不再监听端口、读取页面令牌或分配页面历史缓冲。旧Web配置和CLI开关只兼容读取并一次提示已停用;新生成配置省略这些字段,不能通过旧参数重新开启HTTP。
状态文件继续提供完整机器可读快照,新增web_service_enabled=false,不再生成web_address。详细日志保留原顶层字段,增加中文原因、INFO/WARN/ERROR、可读MiB摘要和自上次记录的扫描/建议/驻留复查/错误增量。未知摘要为null,首次/重启/计数回退不伪造增量;普通文件页差值不冒充CCG回收效果。
默认10秒完整状态,决策变化提前记录但最多每秒一条状态;生命周期和清理独立记录。每天一个文件,30天和1GB双条件清理继续保留,先删最旧历史,当天独占触顶时截断当天旧内容。文件日志和控制台同源,不逐文件输出,不增加额外目录扫描。
升级与回退
停止旧CCG再启动新程序,不需重启数据库。升级前将旧HTTP采集/探针切换成独立进程看护和状态文件;不得把CCG故障设置为业务数据库的重启条件。持久采集和小时图表仍需外部采集器,程序没有新增网络服务。旧运行进程不会因GitHub发布自动取消监听。
回退时恢复旧程序和旧配置,旧版不认识新日志字段;旧版本可能重新提供其原有Web服务,应按实际需要删除或关闭旧Web参数。不要把停止CCG当作已恢复被释放的缓存。
验证边界
本版将用原生amd64/arm64 race和CLI回归验证真实进程无TCP监听、旧参数不打开令牌FIFO、状态及详细日志、危险路径与写失败、保护缺项及恢复、内容不变和静态构建。旧网页测试已取消,不能记成新版本通过。编码微基准不等于实际日志IO或数据库影响。
171不改;没有因开发本版替换94原常驻程序。真实PG14等压、业务SLO、完整工作流及48小时验收仍未完成,功能回归不提供所有场景零驱逐保证。详细使用见日志手册、监控、参数和四容器。
本次实际回归结果
源码提交:b5b65db8ead1d5b4304047835c4150e8c96028de。已下载核对原生CI 42784631786原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 56通过,0跳过 | 24通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 56通过,0跳过 | 24通过 | 已取消(不适用) | 4096 B | 无INTERP/DYNAMIC段 |
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。
ContainerCacheGuard v0.2.0-rc.10
v0.2.0-rc.10:每日有界日志与保护输入检查
候选版,最终原生测试及发布结果以本版发行附件为准。本轮不修改171,不把功能测试视为真实业务48小时验收。
每天一个日志文件
run默认同时输出控制台和每日JSON行文件。最多30个日历日、受管总量1GB,先删最旧历史;当天独自触顶时原地截断旧内容并记录清理事件。新增可配置目录、天数、总量和时区;静态程序内置时区数据。重启追加同一天文件,维护只扫描专用目录,有条目上限,不压缩或复制大日志。文件权限0600、目录0700,拒绝符号链接、硬链接、FIFO和多写进程。日志目录自动排除缓存治理。
正常运行每分钟检查保留期,写入前检查容量;日志失败停止CCG并错误退出。控制台被运行时另存的日志不由此1GB策略删除。文件名时区与原始状态时间偏移的说明、四实例挂载示例及清理可见性见日志手册。
缺失保护数据时暂停
新增protection状态和固定标签指标。enforce所需的内存分类、自身预算及已启用的IO/PSI/refault等保护输入缺失时暂停新回收,不把默认零解释为健康。可继续观察已知内存,监控就绪不等于保护齐全或允许回收。采样空窗、计数回退和范围变化使差分重新建基线;严格解析IO及PSI。业务p99保护需显式信号路径。
先用回归复现了旧版对11类缺项仍Allow=true的代码行为,再实施修复;不能据此认定该缺陷造成此前现场驱逐。IO/CPU/refault速率遇到超过3倍周期的空窗,重新建基线。首次可用OOM计数建立基线,不把此前历史计数误认为新事件。
采样、状态和日志IO前先撤销旧许可,成功返回后只有仍新鲜的允许决策才能重新授权;失去关键保护时也不分派新的enforce扫描任务。不新增cgroup修改、全机清缓存或业务进程接管。
升级注意
旧配置加载时得到日志默认值,因此需要可写的状态/日志挂载。默认启用的IO PSI在缺失环境会使enforce暂停;显式设置0才表示接受禁用。v1的OOM计数限制单独报告。回退需保留旧程序及旧配置;旧版不识别新增字段,不能直接读取加入这些字段的新配置。数据库无需随CCG重启。
验证范围
原生双架构race、CLI和网页回归覆盖30天边界、时区跨日、重启追加、1GB稀疏文件大小边界、当天截断、危险文件、写失败、保护缺项、速率空窗及恢复。稀疏文件不代表实际写入1GB,也不是日志IO性能验收。完整日志、数量、静态ELF和构建提交核验附于发布。
参考:内核cgroup接口、PSI接口。缺项暂停是CCG的保守策略选择,不是内核自动替CCG实施的行为。
首轮原生CI 42776612907的单元测试通过,但CLI新增夹具被真实cgroup文件系统校验拒绝,导致集成测试未完成。保持生产校验不变,改由原生单元测试内部注入读数驱动实际daemon/文件建议;CLI另外验证伪造目录继续被拒绝。此失败不计为完整通过,最终结果以修正后CI为准。
第二轮CI 42777396486中amd64实际daemon故障注入测试触发了默认RSS保护:race测试进程约134MiB,超过128MiB产品默认值,恢复被正确阻止。该测试单独采用512MiB仪器化预算并保留失败诊断;产品默认RSS和自身预算回归不放宽。两轮都不计为完整成功。
本次实际回归结果
源码提交:fc0455a450c85d8b1bccd312aaee2198af3763d5。已下载核对原生CI 42778598596原始日志与构建产物。
| 架构 | 原生race顶层单测 | CLI检查 | 网页检查 | 页大小 | 静态ELF |
|---|---|---|---|---|---|
| amd64 | 58通过,0跳过 | 18通过 | 14通过 | 4096 B | 无INTERP/DYNAMIC段 |
| arm64 | 58通过,0跳过 | 18通过 | 14通过 | 4096 B | 无INTERP/DYNAMIC段 |
| 架构 | 固定快照编码ns/op | B/op | allocs/op | 次数 |
|---|---|---|---|---|
| amd64 | 32734.0 | 17973 | 366 | 1000 |
| arm64 | 29065.0 | 17973 | 366 | 1000 |
该微基准只测内存快照编码,不包含HTTP传输、认证、目录扫描或实际业务,不能据此认定整个守护进程成本或生产SLO通过。
产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。