malloc: retire MALLOC_PROFILE
The global array has prohibitive performance impact on multicore systems. The same data (and more) can be obtained with dtrace. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D27199
This commit is contained in:
parent
b013518a0c
commit
9b9bb9ffa5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=367650
@ -223,12 +223,6 @@ SYSCTL_PROC(_vm_malloc, OID_AUTO, zone_sizes,
|
||||
*/
|
||||
struct mtx malloc_mtx;
|
||||
|
||||
#ifdef MALLOC_PROFILE
|
||||
uint64_t krequests[KMEM_ZSIZE + 1];
|
||||
|
||||
static int sysctl_kern_mprof(SYSCTL_HANDLER_ARGS);
|
||||
#endif
|
||||
|
||||
static int sysctl_kern_malloc_stats(SYSCTL_HANDLER_ARGS);
|
||||
|
||||
#if defined(MALLOC_MAKE_FAILURES) || (MALLOC_DEBUG_MAXZONES > 1)
|
||||
@ -635,9 +629,6 @@ void *
|
||||
size = (size & ~KMEM_ZMASK) + KMEM_ZBASE;
|
||||
indx = kmemsize[size >> KMEM_ZSHIFT];
|
||||
zone = kmemzones[indx].kz_zone[mtp_get_subzone(mtp)];
|
||||
#ifdef MALLOC_PROFILE
|
||||
krequests[size >> KMEM_ZSHIFT]++;
|
||||
#endif
|
||||
va = uma_zalloc(zone, flags);
|
||||
if (va != NULL)
|
||||
size = zone->uz_size;
|
||||
@ -673,9 +664,6 @@ malloc_domain(size_t *sizep, int *indxp, struct malloc_type *mtp, int domain,
|
||||
size = (size & ~KMEM_ZMASK) + KMEM_ZBASE;
|
||||
indx = kmemsize[size >> KMEM_ZSHIFT];
|
||||
zone = kmemzones[indx].kz_zone[mtp_get_subzone(mtp)];
|
||||
#ifdef MALLOC_PROFILE
|
||||
krequests[size >> KMEM_ZSHIFT]++;
|
||||
#endif
|
||||
va = uma_zalloc_domain(zone, NULL, domain, flags);
|
||||
if (va != NULL)
|
||||
*sizep = zone->uz_size;
|
||||
@ -1495,52 +1483,3 @@ DB_SHOW_COMMAND(multizone_matches, db_show_multizone_matches)
|
||||
}
|
||||
#endif /* MALLOC_DEBUG_MAXZONES > 1 */
|
||||
#endif /* DDB */
|
||||
|
||||
#ifdef MALLOC_PROFILE
|
||||
|
||||
static int
|
||||
sysctl_kern_mprof(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
struct sbuf sbuf;
|
||||
uint64_t count;
|
||||
uint64_t waste;
|
||||
uint64_t mem;
|
||||
int error;
|
||||
int rsize;
|
||||
int size;
|
||||
int i;
|
||||
|
||||
waste = 0;
|
||||
mem = 0;
|
||||
|
||||
error = sysctl_wire_old_buffer(req, 0);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
sbuf_new_for_sysctl(&sbuf, NULL, 128, req);
|
||||
sbuf_printf(&sbuf,
|
||||
"\n Size Requests Real Size\n");
|
||||
for (i = 0; i < KMEM_ZSIZE; i++) {
|
||||
size = i << KMEM_ZSHIFT;
|
||||
rsize = kmemzones[kmemsize[i]].kz_size;
|
||||
count = (long long unsigned)krequests[i];
|
||||
|
||||
sbuf_printf(&sbuf, "%6d%28llu%11d\n", size,
|
||||
(unsigned long long)count, rsize);
|
||||
|
||||
if ((rsize * count) > (size * count))
|
||||
waste += (rsize * count) - (size * count);
|
||||
mem += (rsize * count);
|
||||
}
|
||||
sbuf_printf(&sbuf,
|
||||
"\nTotal memory used:\t%30llu\nTotal Memory wasted:\t%30llu\n",
|
||||
(unsigned long long)mem, (unsigned long long)waste);
|
||||
error = sbuf_finish(&sbuf);
|
||||
sbuf_delete(&sbuf);
|
||||
return (error);
|
||||
}
|
||||
|
||||
SYSCTL_OID(_kern, OID_AUTO, mprof,
|
||||
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, NULL, 0,
|
||||
sysctl_kern_mprof, "A",
|
||||
"Malloc Profiling");
|
||||
#endif /* MALLOC_PROFILE */
|
||||
|
Loading…
Reference in New Issue
Block a user