Enforce absolute Wasm invocation deadlines
This commit is contained in:
@@ -199,6 +199,7 @@ WASM_CORE_PATH=<UCE_REPO_ROOT>/bin/wasm/core.wasm
|
||||
WASM_MEMORY_LIMIT_BYTES=536870912
|
||||
WASM_EPOCH_DEADLINE_TICKS=200
|
||||
WASM_EPOCH_PERIOD_MS=50
|
||||
WASM_INVOCATION_TIMEOUT_MS=30000
|
||||
MYSQL_PERSISTENT_POOL_SIZE=8
|
||||
|
||||
WORKER_COUNT=4
|
||||
@@ -227,6 +228,16 @@ Important settings:
|
||||
- `WASM_COMPILE_SCRIPT` must point to `scripts/compile_wasm_unit` unless you provide an equivalent compiler. Relative paths are resolved from the runtime root/`COMPILER_SYS_PATH`. That script calls `scripts/check_unit_wasm.py` after linking each unit and uses the pinned WASI SDK on every deployment host.
|
||||
- `PROACTIVE_COMPILE_JOBS` selects 1–16 low-priority full-site scanner processes (default `2`). Each canonical unit path has one scanner owner. The separate higher-priority demand compiler remains reserved for stale units requested over HTTP, so total background compile concurrency can reach this value plus one.
|
||||
- `WASM_CORE_PATH` must point at the built `core.wasm` file.
|
||||
- `WASM_EPOCH_DEADLINE_TICKS` and `WASM_EPOCH_PERIOD_MS` bound one
|
||||
uninterrupted guest CPU segment. `WASM_INVOCATION_TIMEOUT_MS` is the
|
||||
separate absolute wall-clock bound for app-owned unit loading,
|
||||
initialization, the selected handler, and all nested component/unit calls.
|
||||
The three values must be positive integers; the ticker period is capped at
|
||||
`1000` ms and the invocation timeout at `86400000` ms. Invalid values prevent
|
||||
the Wasm backend from starting. The invocation timeout defaults to `30000` and is
|
||||
enforced to the epoch ticker's period resolution. Blocking host helpers
|
||||
retain their own shorter limits and are capped to the remaining invocation
|
||||
budget where the underlying operation is cancellable.
|
||||
|
||||
After editing settings, restart UCE:
|
||||
|
||||
|
||||
@@ -200,11 +200,16 @@ The graceful signal handler belongs to the parent and render workers. Generic
|
||||
`task()` children restore default termination signals after fork so
|
||||
`task_kill()` and `server_stop()` retain their immediate stop contract.
|
||||
|
||||
Epoch interruption measures uninterrupted guest CPU segments. The common
|
||||
hostcall membrane re-arms the store deadline after every native call, excluding
|
||||
blocking I/O, process waits, hashing, and other host work without weakening a
|
||||
guest loop that makes no hostcalls. Keeping this at the membrane also covers new
|
||||
hostcalls without per-import timeout bookkeeping.
|
||||
Epoch interruption measures uninterrupted guest CPU segments. A separate
|
||||
absolute workspace invocation deadline starts before app-owned entry-unit
|
||||
loading and initialization and remains unchanged through the selected handler,
|
||||
ONCE, and every nested component/unit call. The common hostcall membrane checks
|
||||
that deadline before and after every native call and re-arms the store with the
|
||||
smaller of the remaining absolute budget and the CPU-segment budget. A cheap
|
||||
hostcall loop therefore cannot renew an invocation indefinitely. Blocking host
|
||||
helpers retain operation-specific limits and cap them to the remaining
|
||||
invocation budget where the underlying operation is cancellable. Forked task
|
||||
callbacks receive a fresh invocation deadline capped by the task lifetime.
|
||||
|
||||
`request_perf()` reports worker module-cache hits and misses and divides a miss
|
||||
into artifact lookup, wasm read, custom-section parse, serialized-module
|
||||
@@ -506,6 +511,9 @@ header free-functions are `inline`. The wasm backend exposes only declarations
|
||||
| Key | Default | Meaning |
|
||||
|---|---|---|
|
||||
| `WASM_BACKEND_VERBOSE` | `0` | Emit `X-UCE-Wasm-*` workspace timing headers (benchmark only). |
|
||||
| `WASM_EPOCH_DEADLINE_TICKS` | `200` | Maximum uninterrupted guest CPU segment in epoch ticks; must be positive. |
|
||||
| `WASM_EPOCH_PERIOD_MS` | `50` | Worker epoch-ticker period and timeout resolution; range `1`–`1000` ms. |
|
||||
| `WASM_INVOCATION_TIMEOUT_MS` | `30000` | Absolute app-owned unit load/init/handler/nested-call deadline; range `1`–`86400000` ms and nested calls cannot renew it. |
|
||||
| `FCGI_SOCKET_PATH` | runtime-configured (`/run/uce/fastcgi.sock` in this doc) | Worker pool FastCGI socket (brokers forward here). |
|
||||
| `CLI_SOCKET_PATH` | `/run/uce/cli.sock` | Worker CLI/admin socket. Keep private; reference `CLI_SOCKET_MODE` is `0600`. |
|
||||
| `FCGI_SOCKET_MODE` | `0666` | Permission mode applied to `FCGI_SOCKET_PATH` after bind; set tighter if nginx/Apache can use a trusted group. |
|
||||
|
||||
Reference in New Issue
Block a user