[LTP] [PATCH v1 2/3] syscalls/mallinfo02: Add a basic test to check use mmap or sbrk

Yang Xu
2021-02-03T10:46:15Z

Hi Cyril
> Hi Cyril
>> Hi!
>>> "The number of bytes in blocks currently allocated using mmap(2).".
>>> For allocations greater than or equal to 128K and that can't be
>>> satisfied from
>>> the free list, the memory-allocation functions employ mmap(2) instead
>>> of increasing
>>> the program break using sbrk(2).
>>>
>>> In this case, we test 20k size to use sbrk and 128k size to use mmap.
>>
>> The size when glibc uses mmap() instead of heap is libc implementation
>> detail. I'm not sure that we want to have that value hardcoded in a
>> LTP test.
> Here has some wrong description, I use "MAX(info.fordblks, 131072) +
> reuse_size" size to test instead of 128K.
>>
>> Also glibc documentation says:
>>
>> The default value is set to `131072' bytes and the threshold is adjusted
>> dynamically to suit the allocation patterns of the program.
>
> IMO, the threshold is adjusted dynamically because of two things if we
> don't use mallopt with M_MMAP_THRESHOLD
> 1) fordblks; /* Total free space (bytes) */
> 2) the previous mmap regin space
>
>
> From mallopt man-page for M_MMAP_THRESHOLD option, it said
> " For allocations greater than or equal to the limit specified (in
> bytes) by M_MMAP_THRESHOLD that can't be satisfied from the free list,
> the memory-allocation functions employ mmap(2) instead of increasing the
> program break using sbrk(2)."
>
> So I use this code "MAX(info.fordblks, 131072)" to get the right value
> to trigger mmap.
>
> mallopt man-page for M_MMAP_THRESHOLD option also said "On the
> other hand, there are some disadvantages to the use of mmap(2):
> deallocated space is not placed on the free list for reuse by later
> allocations; " .
>
> I guess it means mmap area is not counted int info.fordblks(free list )
> and can be used for the next sbrk(increase the heap). That is why I add
> reuse_size when I get the corrcet mmap size. Or, I miss something?
>
> If we can't ensure it , I will remove this patch. Or, other advise?
For glibc malloc mmap dynamic threshhold , here[1] has a detailed
description.

[1]https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=1f4bbd8edf8b97701b779f183475565c7d0a6762;hb=d5c8f98c5e6de207790d3e9edadf5bda4aa2521f#l1043
>
>
> Best Regards
> Yang Xu
>
>>
>
>
>
>