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.