3 ms·
I think you're pretty much right. E.g. https://github.com/thestinger/allocator/tree/f42a6c2dffb63d5aec3c9d7f6a387ee1c7b1857a#current-implementation https://git
by nh2 6y ago
I think you're pretty much right.
E.g. https://github.com/thestinger/allocator/tree/f42a6c2dffb63d5aec3c9d7f6a387ee1c7b1857a#current-implementation https://github.com/thestinger/allocator/tree/f42a6c2dffb63d5... (found via Google) explains:
> The Linux kernel also lacks an ordering by size, so it has to use an ugly heuristic for allocation rather than best-fit. It allocates below the lowest mapping so far if there and room and then falls back to an O(n) scan. This leaves behind gaps when anything but the lowest mapping is freed, increasing the rate of TLB misses.
So the libc should be able to do a better job than the kernel here.
And yes, I think it should probably work via MADV_DONTNEED to give mapped pages back to the kernel (and perhaps PROT_NONE to also reduce commit charge when overcommit is disabled, see https://github.com/thestinger/allocator/issues/18 https://github.com/thestinger/allocator/issues/18).
I'm using `MALLOC_MMAP_THRESHOLD_` because it has a positive effect, but as written on https://news.ycombinator.com/item?id=24244271 https://news.ycombinator.com/item?id=24244271, I'm not sure why automatic trimming (which should do all of the discussed above) does not work.