Thank you! Disabling atomic queues brought down the memory usage a lot to ~10M. Wonder why atomic queues take up so much additional memory (~30M)? Reducing the max_queue_size doesn't seem to help either. #ifdef HAVE_STDATOMIC_H thread_pool.queue[i] = fr_atomic_queue_alloc(autofree, thread_pool.max_queue_size); if (!thread_pool.queue[i]) { ERROR("FATAL: Failed to set up request fifo"); return -1; } #else ________________________________ From: Alan DeKok <aland@deployingradius.com> Sent: Monday, May 27, 2024 7:49 AM To: FreeRadius users mailing list <freeradius-users@lists.freeradius.org> Cc: Peter Thomas (pethoma2) <pethoma2@cisco.com> Subject: Re: Tuning freeradius memory usage for small footprint machines On May 24, 2024, at 9:46 PM, Peter Thomas (pethoma2) via Freeradius-Users <freeradius-users@lists.freeradius.org> wrote:
Thanks for the responses. I did some digging around and this is what I found.
While running by disabling threads (-t) freeradius uses around 5MB while the normal mode uses about 43MB. In normal mode, freeradius seems to use a min of 9 threads even if I use extremely conservative server settings like start_servers = 1 max_servers = 1 min_spare_servers = 0 max_spare_servers = 0
The large memory block is due to the atomic queues. You can disable that by editing src/main/threads.c: ... // add the next line #undef HAVE_STDATOMIC_H #ifdef HAVE_STDATOMIC_H #include <freeradius-devel/atomic_queue.h> #endif ... That should lower memory usage. As for starting 9 threads, nope. That might be an OS / libc thing. FreeRADIUS only starts the number of threads you tell it to. Alan DeKok.