diff --git a/README.md b/README.md index 55e0c87..04d6668 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ runs-on: [self-hosted, vm] - `controller`:接收 Gitea `workflow_job` webhook,将指定 label 的 queued job 发布到 NATS JetStream。 - `worker`:领取任务、限制并发,并通过 Pod 或 microVM backend 创建一次性环境。 -- `microvm-runner-launch`:为每个任务复制 flat qcow2 root disk(支持时使用 reflink)、创建 NoCloud seed 和 TAP,运行 +- `microvm-runner-launch`:为每个任务以 direct I/O 转换出 flat qcow2 root disk、创建 NoCloud seed 和 TAP,运行 Cloud Hypervisor,退出后完整清理。 - `guest-runner`:在 guest 中领取一次性 runner registration token,注册 ephemeral runner,执行一个 job 后关机。 diff --git a/scripts/microvm-runner-launch b/scripts/microvm-runner-launch index ff3865b..64e3a5c 100755 --- a/scripts/microvm-runner-launch +++ b/scripts/microvm-runner-launch @@ -45,8 +45,9 @@ test -r "$base_image" test -r "$firmware" install -d -m 0700 "$state_root/instances" "$vm_dir" # Cloud Hypervisor cannot open qcow2 backing chains. Keep each disposable -# root disk flat; reflink-capable storage still makes this copy cheap. -cp --reflink=auto --sparse=always "$base_image" "$overlay" +# root disk flat and bypass the LXC page cache: caching both a 5 GiB copy and +# guest RAM can otherwise trigger the container memory limit. +qemu-img convert -q -T none -t none -f qcow2 -O qcow2 "$base_image" "$overlay" cat >"$vm_dir/meta-data" <