Lines Matching refs:memman

50 MALLOC_DEFINE(M_MEMMAN, "memman", "Generic and Simple Memory Management");
55 static int manage_block(struct memman *memman, unsigned int id,
58 static int blockman_init(struct memman *memman, unsigned int id);
59 static void memman_flexsize_add_histogram(struct memman *memman,
64 static void memman_sort_histogram_by_size(struct memman *memman);
65 static unsigned int memman_guess_memid(struct memman *memman, void *chunk);
66 static void memman_statistics_fixedsize(struct memman *memman);
67 static void memman_statistics_flexsize(struct memman *memman);
70 manage_block(struct memman *memman, unsigned int id, void *block,
80 bmp = &memman->blockman[id];
93 memman->allocated_mem += alloc_size;
94 memman->salloc_called++;
121 blockman_init(struct memman *memman, unsigned int id)
126 bmp = &memman->blockman[id];
131 status = manage_block(memman, id, bmp->initial_block,
137 memman_alloc(struct memman *memman, unsigned int id)
144 if (memman->max_memid <= id) {
148 bmp = &memman->blockman[id];
150 if (blockman_init(memman, id)) {
154 memman->alloc_called++;
163 memman->required_mem += bmp->size * MEMMAN_INCR_SIZE;
164 memman->allocated_mem += alloc_size;
165 memman->salloc_called++;
167 if (manage_block(memman, id, block, 0, MEMMAN_INCR_SIZE)) {
186 memman_flexsize_add_histogram(struct memman *memman, size_t size,
195 for (i = 0; i < memman->flex_mem_histogram_ptr; i++) {
196 gap = memman->flex_mem_histogram[i].mem_size - size;
198 memman->flex_mem_histogram[i].count++;
199 if (memman->flex_mem_histogram[i].mem_size < size) {
200 memman->flex_mem_histogram[i].mem_size = size;
206 if (memman->flex_mem_histogram_ptr == MEMMAN_HISTOGRAM_SIZE) {
207 memman_flexsize_add_histogram(memman, size, tolerance + 1);
210 i = memman->flex_mem_histogram_ptr;
211 memman->flex_mem_histogram[i].mem_size = size;
212 memman->flex_mem_histogram[i].count = 1;
213 memman->flex_mem_histogram_ptr++;
227 memman_sort_histogram_by_size(struct memman *memman)
229 qsort(memman->flex_mem_histogram, memman->flex_mem_histogram_ptr,
234 memman_alloc_flexsize(struct memman *memman, size_t size)
246 if (!memman->flex_mem_initialized) {
247 LIST_INIT(&memman->flexmem_info_list);
248 bzero(memman->flex_mem_histogram,
250 memman->flex_mem_initialized = 1;
254 LIST_INSERT_HEAD(&memman->flexmem_info_list, info, links);
256 memman->flex_alloc_called++;
257 memman->flex_salloc_called++;
258 memman->flex_required_mem += size;
259 memman->flex_allocated_mem += size;
260 if (memman->flex_mem_size_min == 0 ||
261 memman->flex_mem_size_min > size) {
262 memman->flex_mem_size_min = size;
264 if (memman->flex_mem_size_max < size) {
265 memman->flex_mem_size_max = size;
267 if (memman->flex_peak_mem_usage <
268 (memman->flex_allocated_mem - memman->flex_reclaimed_mem)) {
269 memman->flex_peak_mem_usage =
270 (memman->flex_allocated_mem - memman->flex_reclaimed_mem);
272 memman_flexsize_add_histogram(memman, size,
273 memman->flex_mem_histogram_initial_tolerance);
279 memman_guess_memid(struct memman *memman, void *chunk)
285 for (id = 0; id < memman->max_memid; id++) {
286 bmp = &memman->blockman[id];
288 if (blockman_init(memman, id)) {
302 memman_free(struct memman *memman, unsigned int memid, void *chunk)
313 id = memman_guess_memid(memman, chunk);
315 if (memman->max_memid <= id) {
320 bmp = &memman->blockman[id];
322 if (blockman_init(memman, id)) {
337 memman->free_called++;
356 memman->sfree_called++;
359 memman->sfree_called++;
360 memman->reclaimed_mem += memblock->allocated_mem;
366 memman_free_flexsize(struct memman *memman, void *chunk)
370 LIST_FOREACH(info, &memman->flexmem_info_list, links) {
372 memman->flex_reclaimed_mem += info->mem_size;
379 memman->flex_free_called++;
380 memman->flex_sfree_called++;
385 memman_freeall(struct memman *memman)
394 for (id = 0; id < memman->max_memid; id++) {
395 bmp = &memman->blockman[id];
400 memman_free(memman, id, chunk);
405 memman->sfree_called++;
406 memman->reclaimed_mem += memblock->allocated_mem;
413 LIST_FOREACH(info, &memman->flexmem_info_list, links) {
416 memman_free_flexsize(memman, info->addr);
421 memman_statistics_fixedsize(struct memman *memman)
424 printf(" alloc(): %d times\n", memman->alloc_called);
425 printf(" system malloc(): %d times\n", memman->salloc_called);
426 printf(" free(): %d times\n", memman->free_called);
427 printf(" system free(): %d times\n", memman->sfree_called);
428 printf(" required memory: %zd bytes\n", memman->required_mem);
429 printf(" allocated memory: %zd bytes\n", memman->allocated_mem);
430 printf(" reclaimed memory: %zd bytes\n", memman->reclaimed_mem);
434 memman_statistics_flexsize(struct memman *memman)
439 printf(" alloc(): %d times\n", memman->flex_alloc_called);
440 printf(" system malloc(): %d times\n", memman->flex_salloc_called);
441 printf(" free(): %d times\n", memman->flex_free_called);
442 printf(" system free(): %d times\n", memman->flex_sfree_called);
443 printf(" required memory: %zd bytes\n", memman->flex_required_mem);
444 printf(" allocated memory: %zd bytes\n", memman->flex_allocated_mem);
445 printf(" reclaimed memory: %zd bytes\n", memman->flex_reclaimed_mem);
446 printf(" peak memory usage: %zd bytes\n", memman->flex_peak_mem_usage);
447 printf(" min memory size: %zd bytes\n", memman->flex_mem_size_min);
448 printf(" max memory size: %zd bytes\n", memman->flex_mem_size_max);
450 (memman->flex_alloc_called) ?
451 memman->flex_allocated_mem / memman->flex_alloc_called : 0);
454 memman->flex_mem_histogram_ptr);
456 memman_sort_histogram_by_size(memman);
457 for (i = 0; i < memman->flex_mem_histogram_ptr; i++) {
459 memman->flex_mem_histogram[i].mem_size,
460 memman->flex_mem_histogram[i].count);
465 memman_statistics(struct memman *memman)
467 printf("memman: reporting statistics\n");
468 memman_statistics_fixedsize(memman);
469 memman_statistics_flexsize(memman);
473 memman_memid2size(struct memman *memman, unsigned int id)
475 if (memman->max_memid <= id) {
479 return (memman->blockman[id].size);