Lines Matching refs:s
185 static void set_obj(struct slabinfo *s, const char *name, int n) in set_obj() argument
190 snprintf(x, 100, "%s/%s", s->name, name); in set_obj()
199 static unsigned long read_slab_obj(struct slabinfo *s, const char *name) in read_slab_obj() argument
205 snprintf(x, 100, "%s/%s", s->name, name); in read_slab_obj()
279 static void slab_validate(struct slabinfo *s) in slab_validate() argument
281 if (strcmp(s->name, "*") == 0) in slab_validate()
284 set_obj(s, "validate", 1); in slab_validate()
287 static void slab_shrink(struct slabinfo *s) in slab_shrink() argument
289 if (strcmp(s->name, "*") == 0) in slab_shrink()
292 set_obj(s, "shrink", 1); in slab_shrink()
325 static unsigned long slab_size(struct slabinfo *s) in slab_size() argument
327 return s->slabs * (page_size << s->order); in slab_size()
330 static unsigned long slab_activity(struct slabinfo *s) in slab_activity() argument
332 return s->alloc_fastpath + s->free_fastpath + in slab_activity()
333 s->alloc_slowpath + s->free_slowpath; in slab_activity()
336 static void slab_numa(struct slabinfo *s, int mode) in slab_numa() argument
340 if (strcmp(s->name, "*") == 0) in slab_numa()
344 printf("\n%s: No NUMA information available.\n", s->name); in slab_numa()
348 if (skip_zero && !s->slabs) in slab_numa()
360 printf("%-21s ", mode ? "All slabs" : s->name); in slab_numa()
364 store_size(b, s->numa[node]); in slab_numa()
373 store_size(b, s->numa_partial[node]); in slab_numa()
381 static void show_tracking(struct slabinfo *s) in show_tracking() argument
383 printf("\n%s: Kernel object allocation\n", s->name); in show_tracking()
385 if (read_slab_obj(s, "alloc_calls")) in show_tracking()
390 printf("\n%s: Kernel object freeing\n", s->name); in show_tracking()
392 if (read_slab_obj(s, "free_calls")) in show_tracking()
399 static void ops(struct slabinfo *s) in ops() argument
401 if (strcmp(s->name, "*") == 0) in ops()
404 if (read_slab_obj(s, "ops")) { in ops()
405 printf("\n%s: kmem_cache operations\n", s->name); in ops()
409 printf("\n%s has no kmem_cache operations\n", s->name); in ops()
419 static void slab_stats(struct slabinfo *s) in slab_stats() argument
425 if (!s->alloc_slab) in slab_stats()
428 total_alloc = s->alloc_fastpath + s->alloc_slowpath; in slab_stats()
429 total_free = s->free_fastpath + s->free_slowpath; in slab_stats()
438 s->alloc_fastpath, s->free_fastpath, in slab_stats()
439 s->alloc_fastpath * 100 / total_alloc, in slab_stats()
440 total_free ? s->free_fastpath * 100 / total_free : 0); in slab_stats()
442 total_alloc - s->alloc_fastpath, s->free_slowpath, in slab_stats()
443 (total_alloc - s->alloc_fastpath) * 100 / total_alloc, in slab_stats()
444 total_free ? s->free_slowpath * 100 / total_free : 0); in slab_stats()
446 s->alloc_slab, s->free_slab, in slab_stats()
447 s->alloc_slab * 100 / total_alloc, in slab_stats()
448 total_free ? s->free_slab * 100 / total_free : 0); in slab_stats()
450 s->deactivate_to_head + s->deactivate_to_tail, in slab_stats()
451 s->free_add_partial, in slab_stats()
452 (s->deactivate_to_head + s->deactivate_to_tail) * 100 / total_alloc, in slab_stats()
453 total_free ? s->free_add_partial * 100 / total_free : 0); in slab_stats()
455 s->alloc_from_partial, s->free_remove_partial, in slab_stats()
456 s->alloc_from_partial * 100 / total_alloc, in slab_stats()
457 total_free ? s->free_remove_partial * 100 / total_free : 0); in slab_stats()
460 s->cpu_partial_alloc, s->cpu_partial_free, in slab_stats()
461 s->cpu_partial_alloc * 100 / total_alloc, in slab_stats()
462 total_free ? s->cpu_partial_free * 100 / total_free : 0); in slab_stats()
465 s->deactivate_remote_frees, s->free_frozen, in slab_stats()
466 s->deactivate_remote_frees * 100 / total_alloc, in slab_stats()
467 total_free ? s->free_frozen * 100 / total_free : 0); in slab_stats()
471 if (s->cpuslab_flush) in slab_stats()
472 printf("Flushes %8lu\n", s->cpuslab_flush); in slab_stats()
474 total = s->deactivate_full + s->deactivate_empty + in slab_stats()
475 s->deactivate_to_head + s->deactivate_to_tail + s->deactivate_bypass; in slab_stats()
481 s->deactivate_full, (s->deactivate_full * 100) / total); in slab_stats()
483 s->deactivate_empty, (s->deactivate_empty * 100) / total); in slab_stats()
485 s->deactivate_to_head, (s->deactivate_to_head * 100) / total); in slab_stats()
487 s->deactivate_to_tail, (s->deactivate_to_tail * 100) / total); in slab_stats()
489 s->deactivate_bypass, (s->deactivate_bypass * 100) / total); in slab_stats()
491 s->alloc_refill, (s->alloc_refill * 100) / total); in slab_stats()
493 s->alloc_node_mismatch, (s->alloc_node_mismatch * 100) / total); in slab_stats()
496 if (s->cmpxchg_double_fail || s->cmpxchg_double_cpu_fail) in slab_stats()
499 s->cmpxchg_double_fail, s->cmpxchg_double_cpu_fail); in slab_stats()
502 static void report(struct slabinfo *s) in report() argument
504 if (strcmp(s->name, "*") == 0) in report()
508 s->name, s->aliases, s->order, s->objects); in report()
509 if (s->hwcache_align) in report()
511 if (s->cache_dma) in report()
513 if (s->destroy_by_rcu) in report()
515 if (s->reclaim_account) in report()
521 s->object_size, s->slabs, onoff(s->sanity_checks), in report()
522 s->slabs * (page_size << s->order)); in report()
524 s->slab_size, s->slabs - s->partial - s->cpu_slabs, in report()
525 onoff(s->red_zone), s->objects * s->object_size); in report()
527 page_size << s->order, s->partial, onoff(s->poison), in report()
528 s->slabs * (page_size << s->order) - s->objects * s->object_size); in report()
530 s->slab_size - s->object_size, s->cpu_slabs, onoff(s->store_user), in report()
531 (s->slab_size - s->object_size) * s->objects); in report()
533 s->align, s->objs_per_slab, onoff(s->trace), in report()
534 ((page_size << s->order) - s->objs_per_slab * s->slab_size) * in report()
535 s->slabs); in report()
537 ops(s); in report()
538 show_tracking(s); in report()
539 slab_numa(s, 1); in report()
540 slab_stats(s); in report()
543 static void slabcache(struct slabinfo *s) in slabcache() argument
550 if (strcmp(s->name, "*") == 0) in slabcache()
554 report(s); in slabcache()
558 if (skip_zero && !show_empty && !s->slabs) in slabcache()
561 if (show_empty && s->slabs) in slabcache()
564 store_size(size_str, slab_size(s)); in slabcache()
565 snprintf(dist_str, 40, "%lu/%lu/%d", s->slabs - s->cpu_slabs, in slabcache()
566 s->partial, s->cpu_slabs); in slabcache()
571 if (s->aliases) in slabcache()
573 if (s->cache_dma) in slabcache()
575 if (s->hwcache_align) in slabcache()
577 if (s->poison) in slabcache()
579 if (s->reclaim_account) in slabcache()
581 if (s->red_zone) in slabcache()
583 if (s->sanity_checks) in slabcache()
585 if (s->store_user) in slabcache()
587 if (s->trace) in slabcache()
595 total_alloc = s->alloc_fastpath + s->alloc_slowpath; in slabcache()
596 total_free = s->free_fastpath + s->free_slowpath; in slabcache()
599 s->name, s->objects, in slabcache()
601 total_alloc ? (s->alloc_fastpath * 100 / total_alloc) : 0, in slabcache()
602 total_free ? (s->free_fastpath * 100 / total_free) : 0, in slabcache()
603 s->order_fallback, s->order, s->cmpxchg_double_fail, in slabcache()
604 s->cmpxchg_double_cpu_fail); in slabcache()
608 s->name, s->objects, s->object_size, size_str, dist_str, in slabcache()
609 s->objs_per_slab, s->order, in slabcache()
610 s->slabs ? (s->partial * 100) / s->slabs : 100, in slabcache()
611 s->slabs ? (s->objects * s->object_size * 100) / in slabcache()
612 (s->slabs * (page_size << s->order)) : 100, in slabcache()
668 static int slab_empty(struct slabinfo *s) in slab_empty() argument
670 if (s->objects > 0) in slab_empty()
677 if (s->slabs != 0) in slab_empty()
678 set_obj(s, "shrink", 1); in slab_empty()
683 static void slab_debug(struct slabinfo *s) in slab_debug() argument
685 if (strcmp(s->name, "*") == 0) in slab_debug()
688 if (sanity && !s->sanity_checks) { in slab_debug()
689 set_obj(s, "sanity", 1); in slab_debug()
691 if (!sanity && s->sanity_checks) { in slab_debug()
692 if (slab_empty(s)) in slab_debug()
693 set_obj(s, "sanity", 0); in slab_debug()
695 fprintf(stderr, "%s not empty cannot disable sanity checks\n", s->name); in slab_debug()
697 if (redzone && !s->red_zone) { in slab_debug()
698 if (slab_empty(s)) in slab_debug()
699 set_obj(s, "red_zone", 1); in slab_debug()
701 fprintf(stderr, "%s not empty cannot enable redzoning\n", s->name); in slab_debug()
703 if (!redzone && s->red_zone) { in slab_debug()
704 if (slab_empty(s)) in slab_debug()
705 set_obj(s, "red_zone", 0); in slab_debug()
707 fprintf(stderr, "%s not empty cannot disable redzoning\n", s->name); in slab_debug()
709 if (poison && !s->poison) { in slab_debug()
710 if (slab_empty(s)) in slab_debug()
711 set_obj(s, "poison", 1); in slab_debug()
713 fprintf(stderr, "%s not empty cannot enable poisoning\n", s->name); in slab_debug()
715 if (!poison && s->poison) { in slab_debug()
716 if (slab_empty(s)) in slab_debug()
717 set_obj(s, "poison", 0); in slab_debug()
719 fprintf(stderr, "%s not empty cannot disable poisoning\n", s->name); in slab_debug()
721 if (tracking && !s->store_user) { in slab_debug()
722 if (slab_empty(s)) in slab_debug()
723 set_obj(s, "store_user", 1); in slab_debug()
725 fprintf(stderr, "%s not empty cannot enable tracking\n", s->name); in slab_debug()
727 if (!tracking && s->store_user) { in slab_debug()
728 if (slab_empty(s)) in slab_debug()
729 set_obj(s, "store_user", 0); in slab_debug()
731 fprintf(stderr, "%s not empty cannot disable tracking\n", s->name); in slab_debug()
733 if (tracing && !s->trace) { in slab_debug()
735 set_obj(s, "trace", 1); in slab_debug()
737 fprintf(stderr, "%s can only enable trace for one slab at a time\n", s->name); in slab_debug()
739 if (!tracing && s->trace) in slab_debug()
740 set_obj(s, "trace", 1); in slab_debug()
745 struct slabinfo *s; in totals() local
799 for (s = slabinfo; s < slabinfo + slabs; s++) { in totals()
807 if (!s->slabs || !s->objects) in totals()
812 size = slab_size(s); in totals()
813 used = s->objects * s->object_size; in totals()
815 objwaste = s->slab_size - s->object_size; in totals()
817 percentage_partial_slabs = s->partial * 100 / s->slabs; in totals()
821 percentage_partial_objs = s->objects_partial * 100 in totals()
822 / s->objects; in totals()
827 if (s->object_size < min_objsize) in totals()
828 min_objsize = s->object_size; in totals()
829 if (s->partial < min_partial) in totals()
830 min_partial = s->partial; in totals()
831 if (s->slabs < min_slabs) in totals()
832 min_slabs = s->slabs; in totals()
839 if (s->objects < min_objects) in totals()
840 min_objects = s->objects; in totals()
843 if (s->objects_partial < min_partobj) in totals()
844 min_partobj = s->objects_partial; in totals()
849 if (s->slab_size < min_memobj) in totals()
850 min_memobj = s->slab_size; in totals()
852 if (s->object_size > max_objsize) in totals()
853 max_objsize = s->object_size; in totals()
854 if (s->partial > max_partial) in totals()
855 max_partial = s->partial; in totals()
856 if (s->slabs > max_slabs) in totals()
857 max_slabs = s->slabs; in totals()
864 if (s->objects > max_objects) in totals()
865 max_objects = s->objects; in totals()
868 if (s->objects_partial > max_partobj) in totals()
869 max_partobj = s->objects_partial; in totals()
874 if (s->slab_size > max_memobj) in totals()
875 max_memobj = s->slab_size; in totals()
877 total_partial += s->partial; in totals()
878 total_slabs += s->slabs; in totals()
882 total_objects += s->objects; in totals()
884 total_partobj += s->objects_partial; in totals()
888 total_objwaste += s->objects * objwaste; in totals()
889 total_objsize += s->objects * s->slab_size; in totals()
1059 struct slabinfo *s; in link_slabs() local
1063 for (s = slabinfo; s < slabinfo + slabs; s++) in link_slabs()
1064 if (strcmp(a->ref, s->name) == 0) { in link_slabs()
1065 a->slab = s; in link_slabs()
1066 s->refs++; in link_slabs()
1069 if (s == slabinfo + slabs) in link_slabs()
1107 struct slabinfo *s; in rename_slabs() local
1110 for (s = slabinfo; s < slabinfo + slabs; s++) { in rename_slabs()
1111 if (*s->name != ':') in rename_slabs()
1114 if (s->refs > 1 && !show_first_alias) in rename_slabs()
1117 a = find_one_alias(s); in rename_slabs()
1120 s->name = a->name; in rename_slabs()
1122 s->name = "*"; in rename_slabs()