xref: /plan9-contrib/rc/bin/kmem (revision a6b1725ca7b1e042260a543522a1c4d8d669625a)
1824682f6SDavid du Colombier#!/bin/rc
2*a6b1725cSDavid du Colombier# kmem [kernel] - print summary of allocate blocks in running kernel
3*a6b1725cSDavid du Colombierrfork e
4824682f6SDavid du Colombierif(! ~ $#* 0 1){
5824682f6SDavid du Colombier	echo 'usage: kmem [kernel]' >[1=2]
6824682f6SDavid du Colombier	exit usage
7824682f6SDavid du Colombier}
8824682f6SDavid du Colombier
9824682f6SDavid du Colombierif(~ $#* 1)
10824682f6SDavid du Colombier	binary=$1
11824682f6SDavid du Colombier
12824682f6SDavid du Colombierecho 'kinit(); blocksummary()' | acid -k -lkernel -lpool -lleak $pid $binary | awk '
13824682f6SDavid du Colombier	$1 == "block" {
14824682f6SDavid du Colombier		addr=$6
15824682f6SDavid du Colombier		size=$3
16824682f6SDavid du Colombier		alloc=$4
17824682f6SDavid du Colombier		total[alloc] += size
18824682f6SDavid du Colombier		count[alloc]++
19824682f6SDavid du Colombier	}
20824682f6SDavid du Colombier	$1 == "summary" {
21824682f6SDavid du Colombier		alloc=$2
22824682f6SDavid du Colombier		cnt=$3
23824682f6SDavid du Colombier		size=$4
24824682f6SDavid du Colombier		total[alloc] += size
25824682f6SDavid du Colombier		count[alloc] += cnt
26824682f6SDavid du Colombier	}
27824682f6SDavid du Colombier	END{
28824682f6SDavid du Colombier		for(i in count)
29824682f6SDavid du Colombier			printf("%6d %11d %s\n", count[i], total[i], i);
30824682f6SDavid du Colombier	}
31824682f6SDavid du Colombier' | sort -nr
32