§ 01.03Getting Started
Configuration
A Quicx daemon reads its entire runtime shape from a single quicx.conf file. Every number is exact — block counts, pool share, port — and is resolved before a byte of task traffic moves.
quicx.conf
# Quicx config
[server]
port = 16381
[allocator]
pool_size = 1048576
class = 32,10
class = 64,25
class = 128,25
class = 256,20
class = 512,12
class = 1024,8Default configuration
This is the built-in default. When you run
quicx start without a --config flag, the daemon uses these exact values — no file needed to get started.[server]
- port
- TCP port the daemon binds to. Producers and workers both dial the same port — routing is decided by the first message they send (
MSG_SUBMITvsMSG_READY). Default:16381.
[allocator]
The allocator block is parsed directly into the PMAD initializer. You own every byte of the pool — no hidden reserves, no growth. All arithmetic is performed at startup so the daemon either boots with the layout you asked for or refuses to start.
- pool_size
- Total bytes reserved via a single
mmapcall. Default is1048576(1 MiB). The allocator never grows past this number — if you exhaust it, newMSG_SUBMITframes are rejected withMSG_ERROR 0x01 (queue full). - class = SIZE,PCT
- Declares one size class: SIZE is the block size in bytes, PCT is the percentage of the pool that belongs to that class. Declare the classes in ascending SIZE order. The percentages must sum to
100; if they don’t, the daemon refuses to start.
How the example pool is carved up
pool_size = 1 MiB with the six classes above resolves to exactly 3 276 · 32B + 4 096 · 64B + 2 048 · 128B + 819 · 256B + 245 · 512B + 82 · 1024B — all computed before the daemon accepts its first connection.Tuning rules of thumb
| Workload | Recommended shape | Why |
|---|---|---|
| Short JSON payloads (webhooks, emails) | 32, 64, 128 | Most MSG_SUBMIT frames land between 40–120 bytes; three tight classes eat the long tail with <5 % slack. |
| Mixed media (thumbnails, ML prompts) | 128, 512, 2048 | Two orders of magnitude spread — weight the biggest class heaviest. |
| Uniform binary blobs | one class at 100 % | Zero internal fragmentation. Highest throughput — see the PMAD benchmarks. |
Validation is strict on purpose
If
pool_sizeis not a multiple of every declared class size, or if the percentages don’t sum to 100, the daemon exits with a precise error pointing at the offending line. This is deliberate — Quicx refuses to start in a “mostly-correct” state.