]> git.ipfire.org Git - thirdparty/bird.git/commit
Linpool flush drops all the allocated pages but one
authorMaria Matejka <mq@ucw.cz>
Wed, 22 Feb 2023 13:45:20 +0000 (14:45 +0100)
committerMaria Matejka <mq@ucw.cz>
Wed, 22 Feb 2023 13:54:09 +0000 (14:54 +0100)
commit6c058ae40cf33d6d36c0159d0c40c9925c8e60d8
tree282df74afb8e92ec083a3385b09c6848f247b09a
parent913ec57f27b06845e3698e8ea08821d39b9575cf
Linpool flush drops all the allocated pages but one

When a linpool is used to allocate a one-off big load of memory, it
makes no sense to keep that amount of memory for future use inside the
linpool. Contrary to previous implementations where the memory was
directly free()d, we now use the page allocator which has an internal
cache which keeps the released pages for us and subsequent allocations
simply get these released pages back.

And even if the page cleanup routine kicks in inbetween, the pages get
only madvise()d, not munmap()ed so performance aspects are negligible.

This may fix some memory usage peaks in extreme cases.
lib/mempool.c