Skip to content

Releases

ContainerCacheGuard v0.2.0-rc.5

Pre-release

Choose a tag to compare

@cuipengdba cuipengdba released this 08 Nov 12:54

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

Pre-release

Choose a tag to compare

@cuipengdba cuipengdba released this 08 Nov 01:39

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

Pre-release

Choose a tag to compare

@cuipengdba cuipengdba released this 07 Nov 22:08

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

Pre-release

Choose a tag to compare

@cuipengdba cuipengdba released this 06 Nov 19:43

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

Pre-release

Choose a tag to compare

@cuipengdba cuipengdba released this 06 Nov 18:48

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:通用容器文件缓存治理候选版

Choose a tag to compare

@cuipengdba cuipengdba released this 06 Nov 11:57

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错误亦在报告中保留。