Thank you very much for instant reply..
Yes sir it is wasting memory for each shared library. But memory wastage even worse when program
requesting memory with size more than 224KB(threshold value).
->If a program requests 1GB per request, it can use 45GB at the most.
->If a program requests 512MB per request, it can use 41.5GB at the most.
->If a program requests 225KB per request, it can use about 167MB at the most.
As we ported musl-1.1.14 for our architecture, we are bounded to make change in same base code.
we have increased
MMAP_THRESHOLD to 1GB and also changes the calculation for bin index .
after that observed improvement in memory utilization. i.e for size 225KB memory used is 47.6 GB.
But now facing problem in multi threaded application. As we haven't changed the function pretrim()
because there are some hard coded values like '40' and '3' used and unable to understand how
these values are decided ..?
static int pretrim(struct chunk *self, size_t n, int i, int j)
{
size_t n1;
struct chunk *next, *split;
/* We cannot pretrim if it would require re-binning. */
if (j < 40) return 0;
if (j < i+3) {
if (j != 63) return 0;
n1 = CHUNK_SIZE(self);
if (n1-n <= MMAP_THRESHOLD) return 0;
} else {
n1 = CHUNK_SIZE(self);
}
.....
.....
......
}
can we get any clue how these value are decided, it will be very helpful for us.
Best Regard,
Ritesh Sonawane