move the c0re host options to deploy.hive-controller
This commit is contained in:
parent
525cbe0355
commit
74f463c40e
8 changed files with 257 additions and 94 deletions
|
|
@ -521,7 +521,7 @@ leftover `.git` here; `migrate::run` deletes it at startup. Contents:
|
|||
the capped party never sets them. It sees only the resulting memory cap,
|
||||
as a byte count or `infinity` in its runtime dir (below). Fallback is per
|
||||
*field*: an absent file, absent agent, or absent field falls back to the
|
||||
hive-wide `services.hyperhive.c0re.agentCpuQuota` / `agentMemoryMax`,
|
||||
hive-wide `services.hyperhive.deploy.hive-controller.agentCpuQuota` / `agentMemoryMax`,
|
||||
so an agent can have only its memory capped and still track the hive
|
||||
default for CPU. Every value passes the validators first, and one bad
|
||||
value makes the worker change nothing here. The `CPUWeight=` / `IOWeight=`
|
||||
|
|
|
|||
|
|
@ -324,7 +324,7 @@ c0re process never leaves a partial or unparseable file behind.
|
|||
### Per-agent static frontend split
|
||||
|
||||
hive-c0re's environment sets `HIVE_AGENT_FRONTEND_DIR` to the `agent/`
|
||||
subdirectory of `services.hyperhive.c0re.servedFrontend`.
|
||||
subdirectory of `services.hyperhive.deploy.hive-controller.servedFrontend`.
|
||||
The nginx include generator (`gateway_nginx::write`) reads
|
||||
this variable and, when set, emits split location blocks per agent
|
||||
instead of a single proxy block.
|
||||
|
|
@ -386,7 +386,7 @@ agent gets a single proxy block and nginx forwards all traffic to the
|
|||
agent daemon.
|
||||
|
||||
**`extraFiles`**: per-agent `services.hyperhive.agent.frontend.extraFiles` sit in
|
||||
`mergedDist`, not in the base `services.hyperhive.c0re.frontend` dist. They're not under
|
||||
`mergedDist`, not in the base `services.hyperhive.deploy.hive-controller.frontend` dist. They're not under
|
||||
the nix-store `alias` path, so requests for them fall through
|
||||
`try_files` to `@<name>_dynamic`, and the agent daemon serves them.
|
||||
|
||||
|
|
|
|||
|
|
@ -537,7 +537,7 @@ The fix (`nix/docs/default.nix`):
|
|||
file contents only. Docs drvs only change when a `.nix` file changes.
|
||||
|
||||
2. The package options the modules consume (`services.hyperhive.agent.packages.*`,
|
||||
`services.hyperhive.c0re.*`) carry no in-module defaults and every
|
||||
`services.hyperhive.deploy.hive-controller.*`) carry no in-module defaults and every
|
||||
default that references them has a `defaultText`, so the doc walk
|
||||
never forces a package — no stubs needed, and the Rust/frontend
|
||||
build closure stays out of the eval.
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ resources are free. Resources:
|
|||
|
||||
<!-- vale write-good.Passive = YES -->
|
||||
|
||||
1. **Build slots** — `services.hyperhive.c0re.buildSlots` permits (default 1),
|
||||
1. **Build slots** — `services.hyperhive.deploy.hive-controller.buildSlots` permits (default 1),
|
||||
held by nix-heavy nodes for the node's duration.
|
||||
2. **Per-agent lifecycle lease** — keyed on the **node's** agent (agent is
|
||||
per-node; a DAG can span agents) and globally exclusive per agent across
|
||||
|
|
@ -391,7 +391,7 @@ or the flake root directly — none of which exist in the rendered meta flake.
|
|||
|
||||
## Host-level resource + performance options
|
||||
|
||||
A handful of `services.hyperhive.c0re.*` options tune container resource
|
||||
A handful of `services.hyperhive.deploy.hive-controller.*` options tune container resource
|
||||
limits, build parallelism, and first-spawn latency.
|
||||
|
||||
### Build slots
|
||||
|
|
@ -498,12 +498,12 @@ v2 **relative shares** that only decide who yields _under contention_.
|
|||
A low-weight container still gets the whole machine when nothing else
|
||||
wants it.
|
||||
|
||||
| Option | Default | Description |
|
||||
| ---------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `services.hyperhive.c0re.agentCpuQuota` | `"200%"` | CPU cap per agent, as a percentage of one core (`"200%"` = 2 cores). Raise if agents hit CPU limits during builds or heavy tool use. |
|
||||
| `services.hyperhive.c0re.agentMemoryMax` | `"4G"` | Memory cap per agent. Raise for agents that run large nix builds or hold big in-memory data. |
|
||||
| `services.hyperhive.c0re.agentCpuWeight` | `80` | `cpu.weight` share per agent, `1`–`10000` or `null` to omit the setting. Kernel default is `100`, so `80` makes agents yield. |
|
||||
| `services.hyperhive.c0re.agentIoWeight` | `80` | `io.weight` share per agent, same range and `null` handling. See the caveat below — it's a no-op on many hosts. |
|
||||
| Option | Default | Description |
|
||||
| ---------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `services.hyperhive.deploy.hive-controller.agentCpuQuota` | `"200%"` | CPU cap per agent, as a percentage of one core (`"200%"` = 2 cores). Raise if agents hit CPU limits during builds or heavy tool use. |
|
||||
| `services.hyperhive.deploy.hive-controller.agentMemoryMax` | `"4G"` | Memory cap per agent. Raise for agents that run large nix builds or hold big in-memory data. |
|
||||
| `services.hyperhive.deploy.hive-controller.agentCpuWeight` | `80` | `cpu.weight` share per agent, `1`–`10000` or `null` to omit the setting. Kernel default is `100`, so `80` makes agents yield. |
|
||||
| `services.hyperhive.deploy.hive-controller.agentIoWeight` | `80` | `io.weight` share per agent, same range and `null` handling. See the caveat below — it's a no-op on many hosts. |
|
||||
|
||||
Two things to know about the weights:
|
||||
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ with the `hive-meta-flake` renderer, all over `https`.
|
|||
Each custom agent that a hive places pins to its `agent-configs/<agent>`
|
||||
`main`; the controller omits and logs one whose repo has no commit on `main`, so it
|
||||
doesn't block the rest. Hyperhive pins to one rev, a ratchet on the controller's own
|
||||
running rev (`services.hyperhive.c0re.hyperhiveRev`, from `self.rev`):
|
||||
running rev (`services.hyperhive.deploy.hive-controller.hyperhiveRev`, from `self.rev`):
|
||||
|
||||
- the first commit pins hyperhive's forge `main`;
|
||||
- later, the pin moves to the controller's rev only when the forge's compare
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
host (not inside any container). It talks to `hive-c0re` over the host
|
||||
admin socket `/run/hyperhive/host.sock`, which is root-only by default —
|
||||
so it needs `sudo` unless you grant sudoless access by listing your
|
||||
login user in `services.hyperhive.c0re.adminUsers` (adds you to the
|
||||
login user in `services.hyperhive.deploy.hive-controller.adminUsers` (adds you to the
|
||||
`hive-admin` group that owns the socket; see
|
||||
[`docs/trust-boundary/boundary.md`](../trust-boundary/boundary.md#host-admin-socket-access-hivectl)).
|
||||
Available via the `hive-c0re` package in the host NixOS config.
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ boundary.
|
|||
By default the socket is `0660` group-owned by **`hive-admin`**, an
|
||||
empty group — so it's effectively **root-only** until an operator is
|
||||
explicitly granted access. Grant sudoless `hivectl` by listing login
|
||||
users in `services.hyperhive.c0re.adminUsers`; the option adds each to
|
||||
users in `services.hyperhive.deploy.hive-controller.adminUsers`; the option adds each to
|
||||
`hive-admin`, and members connect without `sudo`. The runtime dir
|
||||
`/run/hyperhive` is `0751` (traverse-only, no listing) so the group can
|
||||
reach the socket path; the socket's own `0660 hive-admin` mode gates
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ library.
|
|||
The cost figure is a deliberately rough estimate from a per-model
|
||||
price table (`est_cost_usd`); it drifts with list pricing and the page
|
||||
labels it accordingly. The table is operator-tunable via the
|
||||
`services.hyperhive.c0re.modelPrices` nix option — each key is a
|
||||
`services.hyperhive.deploy.hive-controller.modelPrices` nix option — each key is a
|
||||
model-family short name (matched case-insensitively as a substring of
|
||||
the model id, longest match wins) mapping to
|
||||
`{ input, output, cache_read, cache_write }` USD-per-million-token
|
||||
|
|
|
|||
Loading…
Reference in a new issue