|
Serene Runtime 1.0.0-dev
C runtime for the Serene programming language
|
The single place that holds every runtime knob. More...
#include <stddef.h>Go to the source code of this file.
Data Structures | |
| struct | srn_mm_config_t |
| struct | srn_fiber_config_t |
| struct | srn_reactor_config_t |
| struct | srn_limits_config_t |
| Size and length limits the runtime enforces. More... | |
| struct | srn_configuration_t |
| Every runtime knob, in one place. More... | |
Macros | |
| #define | SRN_CONFIG_DEFAULT_BLOCK_SIZE_MAGNITUDE 17U |
| Magnitude of one memory-manager block. | |
| #define | SRN_CONFIG_DEFAULT_BLOCK_SIZE ((size_t)1 << SRN_CONFIG_DEFAULT_BLOCK_SIZE_MAGNITUDE) |
| The default block size in bytes, derived from the magnitude. | |
| #define | SRN_CONFIG_DEFAULT_FIBER_STACK_SIZE ((size_t)128 * 1024) |
| Size of every fiber stack, in bytes. | |
| #define | SRN_CONFIG_DEFAULT_WORKERS 1U |
| Worker count a run uses when the caller does not specify one. | |
| #define | SRN_CONFIG_DEFAULT_MAX_WORKERS 256U |
| Upper bound a requested worker count is clamped to. | |
| #define | SRN_MAX_WORKERS 256U |
| The absolute worker ceiling. | |
| #define | SRN_CONFIG_DEFAULT_REACTOR_RING_MAGNITUDE 8U |
| Magnitude of each reactor channel's SQ/CQ rings, capacity is 1 << magnitude slots, which also bounds a channel's in-flight operations. | |
| #define | SRN_CONFIG_DEFAULT_REACTOR_REAP_BATCH 64U |
| Most completions a worker drains from a channel in one pass. | |
| #define | SRN_CONFIG_DEFAULT_STRING_MAX_LEN ((size_t)1U << 20U) |
| Largest string the runtime accepts, in bytes. | |
| #define | SRN_CONFIG_DEFAULT_NS_NAME_MAX_LEN 4096U |
| Longest namespace name the runtime accepts, in bytes. | |
| #define | SRN_CONFIG_DEFAULT_MAX_VALUE_DEPTH 512U |
| Deepest value nesting the recursive value protocols accept. | |
| #define | SRN_CONFIG_DEFAULTS |
Typedefs | |
| typedef struct srn_mm_config_t | srn_mm_config_t |
| typedef struct srn_fiber_config_t | srn_fiber_config_t |
| typedef enum srn_reactor_backend_e | srn_reactor_backend_e |
| typedef struct srn_reactor_config_t | srn_reactor_config_t |
| typedef struct srn_limits_config_t | srn_limits_config_t |
| Size and length limits the runtime enforces. | |
| typedef struct srn_configuration_t | srn_configuration_t |
| Every runtime knob, in one place. | |
Enumerations | |
| enum | srn_reactor_backend_e { SRN_REACTOR_EPOLL , SRN_REACTOR_IO_URING , SRN_REACTOR_KQUEUE , SRN_REACTOR_IOCP } |
Functions | |
| void | srn_config_validate (const srn_configuration_t *config) |
| A configuration with every field set to its default. | |
The single place that holds every runtime knob.
srn_configuration_t gathers the tunable values the runtime offers into one struct, grouped by subsystem (memory manager, fibers, reactor, limits). Code that needs a configurable value reads it from here rather than from a scattered #define, so there is one source of truth and one place to override.
What lives here is policy: values that could reasonably differ between runs. What does NOT live here is structure or protocol – types, memory-layout constants, and constants that size fixed C arrays or feed a static_assert (the seq branching factor, the value payload size, reserved id ranges). Those stay compile-time macros because the code cannot express them as a runtime field without being restructured.
The configuration is read-only once the runtime is up, and it must exist before the memory manager is created (the MM needs mm.block_size_magnitude at init), so it is the first thing constructed.
Definition in file configuration.h.
| #define SRN_CONFIG_DEFAULT_BLOCK_SIZE ((size_t)1 << SRN_CONFIG_DEFAULT_BLOCK_SIZE_MAGNITUDE) |
The default block size in bytes, derived from the magnitude.
Definition at line 59 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_BLOCK_SIZE_MAGNITUDE 17U |
Magnitude of one memory-manager block.
The block size is 1 << block_size_magnitude bytes, so 17 is 128 KiB.
Definition at line 54 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_FIBER_STACK_SIZE ((size_t)128 * 1024) |
Size of every fiber stack, in bytes.
All fiber stacks share one size.
Definition at line 64 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_MAX_VALUE_DEPTH 512U |
Deepest value nesting the recursive value protocols accept.
Definition at line 106 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_MAX_WORKERS 256U |
Upper bound a requested worker count is clamped to.
Definition at line 74 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_NS_NAME_MAX_LEN 4096U |
Longest namespace name the runtime accepts, in bytes.
Definition at line 101 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_REACTOR_REAP_BATCH 64U |
Most completions a worker drains from a channel in one pass.
Definition at line 91 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_REACTOR_RING_MAGNITUDE 8U |
Magnitude of each reactor channel's SQ/CQ rings, capacity is 1 << magnitude slots, which also bounds a channel's in-flight operations.
Definition at line 86 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_STRING_MAX_LEN ((size_t)1U << 20U) |
Largest string the runtime accepts, in bytes.
Definition at line 96 of file configuration.h.
| #define SRN_CONFIG_DEFAULT_WORKERS 1U |
Worker count a run uses when the caller does not specify one.
Definition at line 69 of file configuration.h.
| #define SRN_CONFIG_DEFAULTS |
Definition at line 221 of file configuration.h.
| #define SRN_MAX_WORKERS 256U |
The absolute worker ceiling.
fiber.max_workers may not exceed it, and the scheduler clamps every run to it regardless of the configuration.
Definition at line 80 of file configuration.h.
| typedef struct srn_configuration_t srn_configuration_t |
Every runtime knob, in one place.
Constructed before the memory manager and read-only thereafter.
| typedef struct srn_fiber_config_t srn_fiber_config_t |
| typedef struct srn_limits_config_t srn_limits_config_t |
Size and length limits the runtime enforces.
| typedef struct srn_mm_config_t srn_mm_config_t |
| typedef enum srn_reactor_backend_e srn_reactor_backend_e |
| typedef struct srn_reactor_config_t srn_reactor_config_t |
| Enumerator | |
|---|---|
| SRN_REACTOR_EPOLL | |
| SRN_REACTOR_IO_URING | |
| SRN_REACTOR_KQUEUE | |
| SRN_REACTOR_IOCP | |
Definition at line 137 of file configuration.h.
| void srn_config_validate | ( | const srn_configuration_t * | config | ) |
A configuration with every field set to its default.
Use as an initializer: srn_configuration_t cfg = SRN_CONFIG_DEFAULTS;. Panic unless every knob in config is usable. Called by srn_mm_init and srn_engine_make on the configuration they are given, so a bad value fails loudly at startup, naming the knob, instead of corrupting whatever is sized or bounded by it later.
Definition at line 26 of file configuration.c.