chadtmiller.com/knotless
git that lives in your Atmosphere account
1
10
The runner host runs three jobs, on a dedicated AX41
.knotless/workflows/deploy.yml+2−2
| @@ -80,9 +80,9 @@ env: | ||
KNOTLESS_RUNNER_HOST: root@runner.knotless.dev | ||
KNOTLESS_RUNNER_DOMAIN: runner.knotless.dev | ||
KNOTLESS_RUNNER_DID: did:plc:4bocpkn5zkwe4wuu4plrj5kt | ||
KNOTLESS_RUNNER_ARGS: --queue --pulls-only chadtmiller.com/knotless --unmetered did:plc:bcgltzqazw5tb6k2g3ttenbj --unmetered did:plc:e7rftrdyz5e2rw4y6ocszew2 --trust did:plc:bcgltzqazw5tb6k2g3ttenbj --trust did:plc:e7rftrdyz5e2rw4y6ocszew2 --pull-jobs 2 | ||
KNOTLESS_RUNNER_ARGS: --queue --pulls-only chadtmiller.com/knotless --unmetered did:plc:bcgltzqazw5tb6k2g3ttenbj --unmetered did:plc:e7rftrdyz5e2rw4y6ocszew2 --trust did:plc:bcgltzqazw5tb6k2g3ttenbj --trust did:plc:e7rftrdyz5e2rw4y6ocszew2 --pull-jobs 3 | ||
KNOTLESS_RUNNER_CPUS: "4" | ||
KNOTLESS_RUNNER_JOBS: "2" | ||
KNOTLESS_RUNNER_JOBS: "3" | ||
KNOTLESS_RUNNER_MEMORY: "7" | ||
# The oldest client this asks for: 0.6.0 deletes a deleted ref's record | ||
# and starts a new ref at the time, and an older client making a branch | ||
deploy/runner-host/README.md+10−8
| @@ -162,8 +162,8 @@ CPU from serve. Its pushes, its merge queue's batches and its deploy stay | ||
on the main host, where the deploy's key is. In `deploy/local.env`: | ||
| ||
```sh | ||
KNOTLESS_RUNNER_ARGS="--queue --pulls-only chadtmiller.com/knotless --unmetered did:plc:bcgltzqazw5tb6k2g3ttenbj --trust did:plc:bcgltzqazw5tb6k2g3ttenbj --pull-jobs 2" | ||
KNOTLESS_RUNNER_JOBS=2 | ||
KNOTLESS_RUNNER_ARGS="--queue --pulls-only chadtmiller.com/knotless --unmetered did:plc:bcgltzqazw5tb6k2g3ttenbj --trust did:plc:bcgltzqazw5tb6k2g3ttenbj --pull-jobs 3" | ||
KNOTLESS_RUNNER_JOBS=3 | ||
KNOTLESS_RUNNER_MEMORY=7 | ||
KNOTLESS_RUNNER_CPUS=4 | ||
``` | ||
| @@ -176,12 +176,12 @@ not gVisor: under gVisor its `test` took 18 minutes to the main host's | ||
sandbox anyway. Anyone else's pull, run once the owner asks, is under | ||
gVisor as on any repository here. They count | ||
against no allowance and may take every job, past `--owner-jobs`. | ||
`--pull-jobs 2` lets pulls take both jobs, not half: here nearly | ||
`--pull-jobs 3` lets pulls take every job, not half: here nearly | ||
everything is a pull. Its `test` workflow builds every test binary with | ||
coverage and starts PDSes, which takes more than the default 3 GiB a run: | ||
past it the sandbox is killed (`containerManager.WaitPID failed: EOF` in | ||
the log, an OOM kill of `gvisor_sentry` in `dmesg`). So two jobs of 7 GiB and 4 CPUs | ||
each, on an 8-core, 16 GB host, rather than four that each fail. Within | ||
the log, an OOM kill of `gvisor_sentry` in `dmesg`). So three jobs of 7 GiB and 4 CPUs | ||
each, on a dedicated 6-core, 12-thread, 64 GB host (an AX41), rather than more that each fail. Within | ||
them, cargo would still start a rustc for each of the host's 8 cores, and | ||
knotless-serve's takes near 3 GiB under coverage: `harness/cov.mjs` builds | ||
as many crates at once as the cgroup's CPUs, and one for each 2.5 GiB of | ||
| @@ -238,9 +238,11 @@ KNOTLESS_RUNNER_DEPLOY_FROM="178.104.222.99,2a01:4f8:c015:4df4::/64" \ | ||
host. Tenants' secrets are not offered yet. | ||
- **Disk:** images unused for a week are pruned daily; caches are bounded | ||
by `--cache-max` (16 GiB); checkouts go as their runs end. | ||
- **Grow:** when checks wait long for a job on most days, rescale the | ||
server to a CX53 (16 vCPU, 32 GB) in the Hetzner console: a reboot, the | ||
disk kept. Then raise `KNOTLESS_RUNNER_JOBS` to 8 and deploy again. | ||
- **Move:** run `setup.sh` on the new host, with the deploy key. Point | ||
`runner.knotless.dev` at it, stop the old runner, copy `/etc/knotless/run.env`, | ||
`run-secrets.json` and `paused.json`, `/var/lib/knotless-run`'s `state.json`, | ||
`secrets-key.json`, `bots` and `config`, and `/var/lib/knotless-serve`, then | ||
run `deploy.sh`. Caches build again on the first pull. | ||
| ||
## Not yet | ||