From c268ea00bc5c8ae62ab4f8956a89e65af202e572 Mon Sep 17 00:00:00 2001 From: pikastech Date: Tue, 21 Jul 2026 17:23:00 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=8D=E6=A0=B8=20cgroup=20=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E4=BC=98=E5=85=88=E7=BA=A7=E6=BC=82=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/src/gc-remote-memory-pressure.test.ts | 18 +++++++++++++++++- scripts/src/gc-remote-web-observe.py | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/scripts/src/gc-remote-memory-pressure.test.ts b/scripts/src/gc-remote-memory-pressure.test.ts index 538a3e72..d5251d65 100644 --- a/scripts/src/gc-remote-memory-pressure.test.ts +++ b/scripts/src/gc-remote-memory-pressure.test.ts @@ -166,18 +166,34 @@ process_start_ticks = lambda pid: 987654 read_cgroup_integer = lambda path, name: 6 * 1024 * 1024 * 1024 read_cgroup_memory_stat = lambda path: {"inactive_anon": 2 * 1024 * 1024 * 1024} candidates = collect_memory_reclaim_candidates() +memory_reclaim_write_attempts = [] +original_open = open +def tracked_open(path, *args, **kwargs): + if str(path).endswith("/memory.reclaim"): + memory_reclaim_write_attempts.append(path) + return original_open(path, *args, **kwargs) +open = tracked_open +MEMORY_CONFIG["cgroupReclaim"]["targets"][0]["priority"] = 11 +try: + execute_cgroup_reclaim_candidate(candidates[0]) + priority_revalidation_error = None +except RuntimeError as error: + priority_revalidation_error = str(error) +MEMORY_CONFIG["cgroupReclaim"]["targets"][0]["priority"] = 10 process_start_ticks = lambda pid: 987655 try: execute_cgroup_reclaim_candidate(candidates[0]) revalidation_error = None except RuntimeError as error: revalidation_error = str(error) -print(json.dumps({"ids": [item["id"] for item in candidates], "swappiness": [item["swappiness"] for item in candidates], "systemd": [item["resolvedSystemdUnit"] for item in candidates], "revalidationError": revalidation_error, "diagnostics": memory_reclaim_scan_diagnostics()})) +print(json.dumps({"ids": [item["id"] for item in candidates], "swappiness": [item["swappiness"] for item in candidates], "systemd": [item["resolvedSystemdUnit"] for item in candidates], "priorityRevalidationError": priority_revalidation_error, "memoryReclaimWriteAttempts": memory_reclaim_write_attempts, "revalidationError": revalidation_error, "diagnostics": memory_reclaim_scan_diagnostics()})) `); assert.deepEqual(result.ids, ["cgroup-memory-reclaim:file-pages", "cgroup-memory-reclaim:inactive-anon"]); assert.deepEqual(result.swappiness, [0, 100]); assert.deepEqual((result.systemd as Array>).map((item) => item.unit), ["k3s.service", "k3s.service"]); assert.deepEqual((result.systemd as Array>).map((item) => item.startTicks), [987654, 987654]); + assert.equal(result.priorityRevalidationError, "cgroup reclaim candidate no longer matches YAML: priority"); + assert.deepEqual(result.memoryReclaimWriteAttempts, []); assert.equal(result.revalidationError, "cgroup reclaim candidate identity changed before execution"); assert.equal(((result.diagnostics as Record).cgroupReclaim as Record).eligibleCount, 2); assert.match(webObserveSource, /minimum SwapFree reserve/u); diff --git a/scripts/src/gc-remote-web-observe.py b/scripts/src/gc-remote-web-observe.py index 72695061..aa8d926a 100644 --- a/scripts/src/gc-remote-web-observe.py +++ b/scripts/src/gc-remote-web-observe.py @@ -869,7 +869,7 @@ def execute_cgroup_reclaim_candidate(candidate): configured = next((item for item in configured_cgroup_reclaim_targets() if item.get("id") == config_id), None) if configured is None: raise RuntimeError("cgroup reclaim candidate is no longer present in YAML allowlist") - for key in ["workloadSelector", "systemdUnitSelector", "reclaimBytes", "swappiness", "minimumInactiveAnonBytes", "targetMemAvailableBytes", "minimumSwapFreeBytesAfterReclaim"]: + for key in ["workloadSelector", "systemdUnitSelector", "reclaimBytes", "swappiness", "minimumInactiveAnonBytes", "targetMemAvailableBytes", "minimumSwapFreeBytesAfterReclaim", "priority"]: if configured.get(key) != candidate.get(key): raise RuntimeError("cgroup reclaim candidate no longer matches YAML: %s" % key) _CGROUP_RECLAIM_RUNTIME_INVENTORY = None