mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-08 18:30:18 +00:00
For [BZ #208], accumulate malloc stats over all arenas.
This commit is contained in:
parent
30b99d798f
commit
bedee953d8
@ -1,3 +1,11 @@
|
||||
2012-05-16 Paul Pluzhnikov <ppluzhnikov@google.com>
|
||||
|
||||
[BZ #208]
|
||||
* malloc.c (int_mallinfo): Add parameter to accumulate statistics
|
||||
in instead of returning them. Return void.
|
||||
(__libc_mallinfo): Accumulate over all arenas.
|
||||
(__malloc_stats): Adjust for change in int_mallinfo interface.
|
||||
|
||||
2012-05-16 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
[BZ #10375]
|
||||
|
38
NEWS
38
NEWS
@ -9,25 +9,25 @@ Version 2.16
|
||||
|
||||
* The following bugs are resolved with this release:
|
||||
|
||||
174, 350, 369, 411, 706, 766, 887, 2074, 2541, 2547, 2548, 2550, 2551,
|
||||
2552, 2553, 2554, 2562, 2563, 2565, 2566, 2570, 2576, 2636, 2678, 3335,
|
||||
3440, 3748, 3768, 3866, 3868, 3906, 3976, 3992, 4026, 4108, 4596, 4822,
|
||||
5077, 5461, 5805, 5993, 6471, 6486, 6578, 6649, 6730, 6770, 6794, 6884,
|
||||
6890, 6894, 6895, 6907, 6911, 6959, 7064, 9739, 9902, 10110, 10135, 10140,
|
||||
10153, 10210, 10254, 10346, 10375 10545, 10716, 11174, 11322, 11365,
|
||||
11451, 11494, 11521, 11677, 11837, 11959, 12047, 12097, 12193, 12297,
|
||||
12298, 12301, 12340, 12354, 13058, 13361, 13525, 13526, 13527, 13528,
|
||||
13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553, 13555,
|
||||
13556, 13559, 13563, 13566, 13583, 13592, 13594, 13613, 13618, 13637,
|
||||
13656, 13658, 13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738,
|
||||
13739, 13750, 13758, 13760, 13761, 13775, 13786, 13787, 13792, 13806,
|
||||
13824, 13840, 13841, 13844, 13846, 13851, 13852, 13854, 13871, 13872,
|
||||
13873, 13879, 13883, 13884, 13885, 13886, 13892, 13895, 13908, 13910,
|
||||
13911, 13912, 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920,
|
||||
13921, 13922, 13923, 13924, 13926, 13927, 13928, 13938, 13941, 13942,
|
||||
13954, 13955, 13956, 13963, 13967, 13970, 13973, 13979, 13983, 13986,
|
||||
14012, 14027, 14033, 14034, 14040, 14043, 14044, 14049, 14053, 14055,
|
||||
14064, 14080, 14083, 14103, 14104, 14109
|
||||
174, 208, 350, 369, 411, 706, 766, 887, 2074, 2541, 2547, 2548, 2550,
|
||||
2551, 2552, 2553, 2554, 2562, 2563, 2565, 2566, 2570, 2576, 2636, 2678,
|
||||
3335, 3440, 3748, 3768, 3866, 3868, 3906, 3976, 3992, 4026, 4108, 4596,
|
||||
4822, 5077, 5461, 5805, 5993, 6471, 6486, 6578, 6649, 6730, 6770, 6794,
|
||||
6884, 6890, 6894, 6895, 6907, 6911, 6959, 7064, 9739, 9902, 10110,
|
||||
10135, 10140, 10153, 10210, 10254, 10346, 10375 10545, 10716, 11174,
|
||||
11322, 11365, 11451, 11494, 11521, 11677, 11837, 11959, 12047, 12097,
|
||||
12193, 12297, 12298, 12301, 12340, 12354, 13058, 13361, 13525, 13526,
|
||||
13527, 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552,
|
||||
13553, 13555, 13556, 13559, 13563, 13566, 13583, 13592, 13594, 13613,
|
||||
13618, 13637, 13656, 13658, 13673, 13691, 13695, 13704, 13705, 13706,
|
||||
13726, 13738, 13739, 13750, 13758, 13760, 13761, 13775, 13786, 13787,
|
||||
13792, 13806, 13824, 13840, 13841, 13844, 13846, 13851, 13852, 13854,
|
||||
13871, 13872, 13873, 13879, 13883, 13884, 13885, 13886, 13892, 13895,
|
||||
13908, 13910, 13911, 13912, 13913, 13914, 13915, 13916, 13917, 13918,
|
||||
13919, 13920, 13921, 13922, 13923, 13924, 13926, 13927, 13928, 13938,
|
||||
13941, 13942, 13954, 13955, 13956, 13963, 13967, 13970, 13973, 13979,
|
||||
13983, 13986, 14012, 14027, 14033, 14034, 14040, 14043, 14044, 14049,
|
||||
14053, 14055, 14064, 14080, 14083, 14103, 14104, 14109
|
||||
|
||||
* ISO C11 support:
|
||||
|
||||
|
@ -4513,12 +4513,12 @@ __malloc_usable_size(void* m)
|
||||
|
||||
/*
|
||||
------------------------------ mallinfo ------------------------------
|
||||
Accumulate malloc statistics for arena AV into M.
|
||||
*/
|
||||
|
||||
static struct mallinfo
|
||||
int_mallinfo(mstate av)
|
||||
static void
|
||||
int_mallinfo(mstate av, struct mallinfo *m)
|
||||
{
|
||||
struct mallinfo mi;
|
||||
size_t i;
|
||||
mbinptr b;
|
||||
mchunkptr p;
|
||||
@ -4558,29 +4558,40 @@ int_mallinfo(mstate av)
|
||||
}
|
||||
}
|
||||
|
||||
mi.smblks = nfastblocks;
|
||||
mi.ordblks = nblocks;
|
||||
mi.fordblks = avail;
|
||||
mi.uordblks = av->system_mem - avail;
|
||||
mi.arena = av->system_mem;
|
||||
mi.hblks = mp_.n_mmaps;
|
||||
mi.hblkhd = mp_.mmapped_mem;
|
||||
mi.fsmblks = fastavail;
|
||||
mi.keepcost = chunksize(av->top);
|
||||
mi.usmblks = mp_.max_total_mem;
|
||||
return mi;
|
||||
m->smblks += nfastblocks;
|
||||
m->ordblks += nblocks;
|
||||
m->fordblks += avail;
|
||||
m->uordblks += av->system_mem - avail;
|
||||
m->arena += av->system_mem;
|
||||
m->fsmblks += fastavail;
|
||||
if (av == &main_arena)
|
||||
{
|
||||
m->hblks = mp_.n_mmaps;
|
||||
m->hblkhd = mp_.mmapped_mem;
|
||||
m->usmblks = mp_.max_total_mem;
|
||||
m->keepcost = chunksize(av->top);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct mallinfo __libc_mallinfo()
|
||||
{
|
||||
struct mallinfo m;
|
||||
mstate ar_ptr;
|
||||
|
||||
if(__malloc_initialized < 0)
|
||||
ptmalloc_init ();
|
||||
(void)mutex_lock(&main_arena.mutex);
|
||||
m = int_mallinfo(&main_arena);
|
||||
(void)mutex_unlock(&main_arena.mutex);
|
||||
|
||||
memset(&m, 0, sizeof (m));
|
||||
ar_ptr = &main_arena;
|
||||
do {
|
||||
(void)mutex_lock(&ar_ptr->mutex);
|
||||
int_mallinfo(ar_ptr, &m);
|
||||
(void)mutex_unlock(&ar_ptr->mutex);
|
||||
|
||||
ar_ptr = ar_ptr->next;
|
||||
} while (ar_ptr != &main_arena);
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
@ -4593,7 +4604,6 @@ __malloc_stats()
|
||||
{
|
||||
int i;
|
||||
mstate ar_ptr;
|
||||
struct mallinfo mi;
|
||||
unsigned int in_use_b = mp_.mmapped_mem, system_b = in_use_b;
|
||||
#if THREAD_STATS
|
||||
long stat_lock_direct = 0, stat_lock_loop = 0, stat_lock_wait = 0;
|
||||
@ -4605,8 +4615,11 @@ __malloc_stats()
|
||||
int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
|
||||
((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
|
||||
for (i=0, ar_ptr = &main_arena;; i++) {
|
||||
struct mallinfo mi;
|
||||
|
||||
memset(&mi, 0, sizeof(mi));
|
||||
(void)mutex_lock(&ar_ptr->mutex);
|
||||
mi = int_mallinfo(ar_ptr);
|
||||
int_mallinfo(ar_ptr, &mi);
|
||||
fprintf(stderr, "Arena %d:\n", i);
|
||||
fprintf(stderr, "system bytes = %10u\n", (unsigned int)mi.arena);
|
||||
fprintf(stderr, "in use bytes = %10u\n", (unsigned int)mi.uordblks);
|
||||
|
Loading…
Reference in New Issue
Block a user