option( 'userspace_rcu', type: 'boolean', value: false, description: 'Allow EMPER fibers to use userspace RCU', ) option( 'log_level', type: 'combo', choices: ['automatic', 'Error', 'Warning', 'Info', 'Debug', 'FineDebug', 'FinerDebug', 'FinestDebug', 'ALL'], value: 'automatic', ) option( 'blocked_context_set', type: 'boolean', value: false, description: 'Store all currently blocked contexts for debugging in the set Blockable<LogLevel>::blocked' ) option( 'log_timestamp', type: 'combo', choices: ['utc', 'local', 'none'], value: 'local', description: 'Add a %H%M.%ns timestamp to the EMPER log messages', ) option( 'worker_sleep', type: 'boolean', value: true, description: 'Enable sleeping worker support', ) option( 'worker_wakeup_strategy', type: 'combo', description: 'The strategy used to wakeup sleeping workers (only effective if worker_sleep is enabled)', choices: ['one', 'throttle', 'all'], value: 'one', ) option( 'worker_sleep_strategy', type: 'combo', description: 'The used algorithm to suspend and wakeup workers', choices: ['semaphore', 'pipe'], value: 'semaphore', ) option( 'wakeup_semaphore_implementation', type: 'combo', choices: [ 'posix', 'locked', 'futex', ], value: 'posix', description: 'Semaphore implementation to suspend/wakeup workers', ) option( 'locked_ws_queue', type: 'boolean', value: false, description: 'Use a fully locked queue for work-stealing', ) option( 'locked_mpsc_queue', type: 'boolean', value: false, description: 'Use the locked variant for the MPSC queue' ) option( 'locked_unbounded_queue_implementation', type: 'combo', choices: [ 'mutex', 'rwlock', 'shared_mutex', 'boost_shared_mutex', ], value: 'mutex', description: 'LockedUnboundedQueue implementation', ) option( 'stats', type: 'boolean', value: false, description: 'Collect stats and print them at the end of the execution' ) option( 'default_scheduling_strategy', type: 'combo', choices: [ 'work_stealing', 'locality_aware_work_stealing', ], value: 'work_stealing', ) option( 'waitfree_work_stealing', type: 'boolean', value: false, description: 'Do not retry stealing when the popTop race was lost' ) option( 'work_stealing_victim_count', type: 'integer', value: 0, description: 'Absolute count of victims tried in the work-stealing' ) option( 'work_stealing_victim_denominator', type: 'integer', value: 0, description: 'Fraction of all workers to steal work from' ) option( 'overflow_queue', type: 'boolean', value: true, description: 'Use an overflow queue in case scheduling queues become full', ) option( 'check_anywhere_queue_while_stealing', type: 'combo', choices: ['auto', 'true', 'false'], value: 'auto', description: 'Check the anywhere queue after some failed stealed attempts', ) option( 'io', type: 'boolean', value: true, description: 'Add support for asynchronous IO using io_uring' ) option( 'io_single_uring', type: 'boolean', value: false, description: 'Use only a single io_uring' ) option( 'io_try_syscall', type: 'boolean', value: false, description: 'Try non blocking syscalls before submitting the request to io_uring' ) option( 'io_worker_uring_entries', type: 'integer', value: 16, description: 'Number of entries in each worker io_uring' ) option( 'io_uring_sq_poller', type: 'combo', value: 'off', choices: ['each', 'numa', 'one', 'off'], description: 'Use one or multiple kernel threads to poll the SQs' ) option( 'io_completer_behavior', type: 'combo', description: 'The behaviour of the IO completer thread', choices: ['schedule', 'maybe_wakeup', 'none'], value: 'schedule', ) option( 'set_affinity_on_block', type: 'boolean', value: false, description: 'Set the affinity when blocking', ) option( 'io_completer_sched_param', type: 'combo', description: 'The scheduling parmaters used for the completer thread', choices: ['unchanged', 'normal', 'nice_10', 'nice_19', 'idle'], value: 'unchanged', ) option( 'io_stealing', type: 'boolean', description: 'Work-Stealing workers will also try to steal IO from other workers', value: false, ) option( 'io_waitfree_stealing', type: 'boolean', description: 'Work-Stealing workers will also try to steal waitfree IO from other workers', value: false, ) option( 'io_lockless_cq', type: 'boolean', description: 'Synchronize the concurrent access to CQs with a lockless algorithm', value: false, ) option( 'io_lockless_memory_order', type: 'combo', choices: ['weak', 'strong'], description: 'Memory ordering used for the lockless CQ algorithm', value: 'weak', )