]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MINOR: stats-file: introduce shm-stats-file directive
authorAurelien DARRAGON <adarragon@haproxy.com>
Wed, 27 Aug 2025 13:51:08 +0000 (15:51 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Wed, 3 Sep 2025 13:59:22 +0000 (15:59 +0200)
commitc91d93ed1c03d2b50d65c83de3d2d9b87657de08
tree00549dbd9485cad5ffef384b13c45ec3d83f08ff
parentcb08bcb9d6192a3e9c7923ae0dc38400c6cf4b02
MINOR: stats-file: introduce shm-stats-file directive

add initial support for the "shm-stats-file" directive and
associated "shm-stats-file-max-objects" directive. For now they are
flagged as experimental directives.

The shared memory file is automatically created by the first process.
The file is created using open() so it is up to the user to provide
relevant path (either on regular filesystem or ramfs for performance
reasons). The directive takes only one argument which is path of the
shared memory file. It is passed as-is to open().

The maximum number of objects per thread-group (hard limit) that can be
stored in the shm is defined by "shm-stats-file-max-objects" directive,

Upon initial creation, the main shm stats file header is provisioned with
the version which must remains the same to be compatible between processes
and defaults to 2k. which means approximately 1mb max per thread group
and should cover most setups. When the limit is reached (during startup)
an error is reported by haproxy which invites the user to increase the
"shm-stats-file-max-objects" if desired, but this means more memory will
be allocated. Actual memory usage is low at start, because only the mmap
(mapping) is provisionned with the maximum number of objects to avoid
relocating the memory area during runtime, but the actual shared memory
file is dynamically resized when objects are added (resized by following
half power of 2 curve when new objects are added, see upcoming commits)

For now only the file is created, further logic will be implemented in
upcoming commits.
include/haproxy/defaults.h
include/haproxy/global-t.h
include/haproxy/stats-file-t.h
include/haproxy/stats-file.h
src/cfgparse-global.c
src/haproxy.c
src/stats-file.c