Repository navigation
Releases
ContainerCacheGuard v0.2.0-rc.5
ContainerCacheGuard 0.2.0-rc.5(实验预发布)
- 为缓存驻留扫描和释放前后复查分别保留采样预算,避免低预算时持续扫描耗尽复查令牌。
- 对已完成扫描的文件执行 rescan_seconds 节流,减少重复 mincore 调用。
- 94 的 PG14 DBS 容器与只读挂载 PGDATA 的独立备份 Pod 实测:64 MiB 临时文件在数据库容器内全部驻留,备份 Pod 的 CCG 建议后驻留页为 0;25 秒累计采样 512 MiB,自报 CPU 约 0.73% 单核、RSS 约 9 MiB。
- Linux/amd64 完整 Go 测试集在 94 通过,amd64 二进制在 94 确认为静态 ELF;arm64 仅交叉编译,尚无 ARM 实机验证。
这是单文件跨容器机制测试,不代表百万文件规模、真实备份并发、48 小时压力或 Kubernetes 不驱逐验收已经通过。94 上另外确认了 PUCBDM 大型查询引发的 PostgreSQL 匿名内存尖峰;文件缓存建议不能清理这部分内存。详细限制和配置见仓库文档。
ContainerCacheGuard v0.2.0-rc.4
ContainerCacheGuard v0.2.0-rc.4 is an experimental build for PostgreSQL 14 cache-pressure validation.
Changes: safely discover mode-0700 PostgreSQL relation files in explicit paths mode; speed up metadata traversal using a parent directory FD; delay the next large-tree sweep until after the prior sweep completes.
Verification: Linux/amd64 unit tests passed on the authorized AlmaLinux 9 test host. One real mode-0700 PG14 backup file was indexed in observe mode. The amd64 executable is a statically linked ELF. Arm64 was cross-compiled but has not been run on arm64 hardware.
Not yet established: full million-file coverage with this build, cache residency reduction under an active full backup, business latency impact, or Kubernetes eviction prevention. Do not treat this prerelease as production acceptance.
ContainerCacheGuard v0.2.0-rc.3
ContainerCacheGuard v0.2.0-rc.3(实验候选版)
本版继续针对 PostgreSQL 14 / Kubernetes 的真实数据量做验证,尚未完成四容器部署、备份恢复链和持续业务压力验收。请先以 action=observe 运行,不要把它视为生产环境“不驱逐”的保证。
主要变化:
- 对有上限的文件索引轮换,避免目录超过
max_files后后续文件永久得不到采样。 - 配对读取 Kubernetes 可见父 cgroup 的
memory.current与memory.max,把共享父组压力纳入高水位判断。 - 显式观察模式使用配置的扫描预算;强制回收被安全门阻止时仍低速扫描。
- 备份输出端的示例独立配置 WAL 排除策略;数据库源端仍保护 WAL。
- 增加 PostgreSQL 14 实验负载辅助程序和中文四容器设计说明。
构建:Go 静态链接,CGO_ENABLED=0,Linux x86_64 与 arm64。x86_64 的完整 Linux 单元测试已在实验节点通过;arm64 目前只完成交叉编译,尚未在 ARM 实机运行。源码远端 main 提交 965112aacacb21ee845eb08d8d6bda8089d80765,对应本地内容提交 6a9e8fa9f7e3ea85b009a2fe734c8440cb45f77e。
SHA256:
containercacheguard-linux-amd64 0377e6847519e724881ae996b31f3c0b066ef48e441c755ffd89e5fecd6659d8
containercacheguard-linux-arm64 fbd66f53f1993b4327fcc64fae9c0ca2447a9810be93d22de51531ba6906bfcf
ContainerCacheGuard v0.2.0-rc.2
ContainerCacheGuard v0.2.0-rc.2(预发布)
修正 Web 页面在浏览器时钟与容器主机时钟不一致时将新采样误判为“已过期”的问题。页面现在使用控制器响应中的 X-CCG-Server-Time 判断采样新鲜度;曲线图图例改为中文。缓存治理引擎及配置不变。
Linux x86_64 和 ARM64 原生 GitHub runner 均通过 go vet、go test -race、CLI 集成测试与静态 ELF 检查。详情见 CI 42278872066。用 SHA256SUMS 核对下载文件。
94 的 PostgreSQL 18 四 Pod 48 小时压力实验仍在进行,当前长期运行中的最初二进制为 rc.1,同一缓存治理引擎;本版的 Web 时钟修正会在不重启数据库的策略切换阶段部署。尚未完成 48 小时、两轮备份校验及真实生产驱逐验收。
请阅读 中文使用说明、四容器部署和配置说明。默认 observe,只有显式配置 enforce 才会发出文件缓存释放建议;匿名内存和共享内存可观察但不由文件回收接口清理。
ContainerCacheGuard v0.2.0-rc.1
ContainerCacheGuard v0.2.0-rc.1(预发布)
这一版增加只读实时 Web 页面、四容器部署说明,以及原生 x86_64 / ARM64 静态二进制。Web 展示 cgroup 的文件缓存、活跃与非活跃文件页、匿名内存、共享内存、slab、dirty/writeback、IO、OOM 与控制器决策;默认仅监听容器内回环地址,非回环监听必须配置 token 文件。
两架构 GitHub 原生 runner 均通过 go vet、go test -race、CLI 集成测试和静态 ELF 检查。集成测试验证了资源治理、暂停恢复、重复实例拒绝、排除文件、文件内容不变等。94 的隔离 K3s 四 Pod 已运行 PG18.6、两份原 DBS 二进制及此版本控制器;其 48 小时持续备份/同步压力测试尚在运行,本预发布不代表生产驱逐问题已经验收解决。
使用前请阅读 中文使用说明、四容器部署、配置说明。默认 observe,需要显式配置 enforce 才会发出缓存释放建议。SHA256SUMS 用于校验两个下载文件。
当前限制:94 的节点只有约 30 GiB 内存,和 171 的 PG14、128 GiB 容器限额及生产外围服务不等价;真实 OpenShift 权限和 48 小时零驱逐仍待验证。缓存释放建议不能替代合理的 requests/limits、节点余量和 IO 预算。
ContainerCacheGuard v0.1.0-rc.9:通用容器文件缓存治理候选版
ContainerCacheGuard 已从 PostgreSQL 专用备份原型转为独立的容器文件缓存治理常驻程序。当前产品树、说明和二进制均属于新项目,旧 Git 历史保留。
这是 v0.1.0-rc.9 候选版,尚未通过全部业务与真实集群验收。
功能与交付
- auto 自动发现范围、paths 指定路径;observe/enforce 单独配置。
- 普通磁盘文件缓存的有界发现、驻留观察、分段释放建议、复查和退让;其它内存类型只监测解释。
- 45项严格配置、JSON状态、暂停/恢复、只读共享卷部署说明。
- Linux x86_64/amd64 与 ARM64 静态程序,无需PG客户端、Python、vmtouch或nocache运行依赖。
- 中文说明、全部参数、容器/DBS/Kubernetes/OpenShift部署、设计、排障、测试及长期方案。
- 约5分钟和10分钟普通话讲解视频,内嵌中文字幕,另附SRT和逐字稿。
实测结果与限制
约198GiB、1428业务模式、10217物理表/分块、642157127行的已迁移PG18.6副本;containerd、Linux5.14、cgroup v2。全量备份限速96MiB/s。
| 指标 | 无治理 | 最终实验配置 |
|---|---|---|
| 源cgroup file峰值GiB(含shmem) | 11.924 | 2.070 |
| 输出file峰值GiB | 5.958 | 3.193 |
| 备份耗时秒 | 2671.72 | 2656.11 |
| 原生完整性校验 | 通过 | 通过 |
最终备份另建恢复副本并实际启动,模式目录、关系目录和探针结果比对通过,正常关闭。
普通文件峰值增量源端下降84.87%,输出下降46.42%,输出未达此前≥70%目标。控制器源/输出平均占单核10.38%/19.47%,RSS采样峰40.4/41.4MiB,使用的是公开记录的高吞吐实验配置。
以下问题未解决,不能据此宣称不再驱逐:
- 不限速校验仍使输出file升至约5.76GiB,未建立全过程缓存硬上限。
- 高强度重复读回收使读盘约翻倍,热点p99由约0.038ms升至2.823/4.686ms。明确排除热点后约0.048ms,有改善但仍未证明≤5%相对延迟目标。
- 未完成真实Kubernetes/OpenShift驱逐、72小时长稳、ARM64 64KiB页内核和完整DBS自动任务接入验收。
- 当前只复用hisdbs真实副本并模拟访问,没有独立迁移另一份DBS库;不是1.5TB验证。
建议先observe,优先明确低复用产物,指定热点排除;不将高吞吐实验配置直接用于全PGDATA自动执行。完整报告保留未达标与失败试验。
下载与校验
选对应架构tar.gz可同时取得程序、许可证、中文文档和配置例子;也可下载单独二进制。根据SHA256SUMS核对下载文件,赋予执行权限后先运行help、init-config和doctor。
BUILD-PROVENANCE.json记录源代码提交、工具链、构建方式和二进制SHA。核心代码f021485;原生双架构CI已核对unit/race/CLI原日志,早期CI错误亦在报告中保留。