Skip to main content

CLI & Config Reference

CLI Flags​

hyper-derp [OPTIONS]

--config <path> YAML config file path
--port <N> Listen port (default: 3340)
--workers <N> Worker threads, 0=auto (default: 0)
--pin-workers <list> Pin workers to CPUs (e.g. "0,2,4,6")
--sockbuf <bytes> Per-socket send/recv buffer (0=OS default)
--max-accept-rate <N> Max accepts/sec (0=unlimited)
--tls-cert <path> TLS certificate file
--tls-key <path> TLS private key file
--metrics-port <N> Metrics HTTP port (0=disabled)
--sqpoll Enable io_uring SQPOLL mode
--debug-endpoints Enable /debug/* metrics endpoints
--log-level <level> debug, info, warn, or error
--version Print version and exit
--help Print help and exit

CLI flags override config file values.

Config File Options​

YAML format, parsed with rapidyaml. Pass with --config <path>.

port​

DERP relay listen port.

CLI--port <N>
YAMLport
Default3340
Range1–65535

workers​

Number of io_uring worker threads. Each worker owns a disjoint set of peer connections and runs its own event loop.

CLI--workers <N>
YAMLworkers
Default0 (auto: one per CPU)
Range0–32

pin_cores​

Pin each worker thread to a specific CPU core.

CLI--pin-workers "0,2,4,6"
YAMLpin_cores: [0, 2, 4, 6] or pin_cores: "0,2,4,6"
Defaultnot pinned
Rangecore IDs 0–1023

The number of cores listed must match the worker count.

sockbuf​

Per-socket send and recv buffer size. Sets both SO_RCVBUF and SO_SNDBUF.

CLI--sockbuf <bytes>
YAMLsockbuf
Default0 (OS default, typically 128–256 KB)
Range0–268435456 (256 MB)

max_accept_rate​

Rate limit on new connection accepts per second.

CLI--max-accept-rate <N>
YAMLmax_accept_rate
Default0 (unlimited)
Range0–1000000

tls_cert / tls_key​

TLS certificate and private key for DERP connections. Both must be set to enable TLS.

CLI--tls-cert <path> / --tls-key <path>
YAMLtls_cert / tls_key
Defaultempty (no TLS)

sqpoll​

Enable io_uring SQPOLL mode.

CLI--sqpoll
YAMLsqpoll: true
Defaultfalse

Requires CAP_SYS_NICE or root.

log_level​

Controls log verbosity.

CLI--log-level <level>
YAMLlog_level
Defaultinfo
Valuesdebug, info, warn, error

metrics.port​

Prometheus metrics HTTP server port.

CLI--metrics-port <N>
YAMLmetrics.port
Default0 (disabled)

metrics.tls_cert / metrics.tls_key​

Separate TLS certificate for the metrics endpoint.

YAMLmetrics.tls_cert / metrics.tls_key
Defaultempty (plain HTTP)

metrics.debug_endpoints​

Expose /debug/* endpoints on the metrics server. These show per-peer state including public keys.

CLI--debug-endpoints
YAMLmetrics.debug_endpoints: true
Defaultfalse

Compile-Time Constants​

These values are set in include/hyper_derp/types.h and cannot be changed at runtime.

io_uring​

ConstantValuePurpose
kUringQueueDepth4096Submission queue depth per worker
kMaxCqeBatch256Max CQEs processed per iteration
kBusySpinDefault256Spin iterations before blocking (>2 workers)
kBusySpinLowWorker64Spin iterations for 1–2 workers

Memory​

ConstantValuePurpose
kSlabSize65536Slab allocator pool size per worker
kPbufCount512Provided buffers per worker
kPbufSize~65541Provided buffer size (frame header + max payload)
kFramePoolCount16384Frame pool buffers per worker (32 MiB)
kFramePoolBufSize2048Frame pool buffer size

Networking​

ConstantValuePurpose
kMaxFd65536Maximum tracked file descriptors
kHtCapacity4096Peer hash table capacity (power of 2)
kMaxSendsInflight16Max concurrent sends per peer
kMaxSendQueueDepth2048Max queued sends per peer
kPollWriteBatch16Sends submitted per POLLOUT

Backpressure​

ConstantValuePurpose
kSendPressureMax32768Absolute send pressure cap
kPressurePerPeer512Per-peer pressure contribution
kRecvPauseMinBatches8Min batches recv stays paused
kRecvBudget512Max concurrent recv SQEs per worker
kRecvDeferSize4096Deferred recv ring size
kXferSpscSize16384Cross-worker SPSC ring size
kCmdRingSize1024Command ring size

The adaptive send pressure threshold is computed from peer count:

  • SendPressureHigh(peers) = peers * 512 (clamped to 32768)
  • SendPressureLow(peers) = High / N where N is 8 for 1–2 workers, 6 for 3–4 workers, 4 for 5+ workers

See troubleshooting: 4 vCPU stall for details on the backpressure mechanism.