Browse Source

Plan 9 from Bell Labs 2007-09-18

David du Colombier 16 years ago
parent
commit
d525148746

+ 6 - 5
dist/replica/_plan9.db

@@ -5521,7 +5521,7 @@ rc/bin/ipv6on - 775 sys sys 1186362803 2047
 rc/bin/iwhois - 775 sys sys 1188682646 1792
 rc/bin/juke - 775 sys sys 1105565140 1131
 rc/bin/kill - 775 sys sys 1143389260 142
-rc/bin/kmem - 775 sys sys 1141940177 468
+rc/bin/kmem - 775 sys sys 1190076660 544
 rc/bin/label - 775 sys sys 1173737765 189
 rc/bin/lc - 775 sys sys 945617207 24
 rc/bin/leak - 775 sys sys 1172760642 1921
@@ -5625,6 +5625,7 @@ rc/bin/tlsclienttunnel - 775 sys sys 1024375633 153
 rc/bin/tlssrvtunnel - 775 sys sys 1024375634 175
 rc/bin/troff2gif - 775 sys sys 1127410278 164
 rc/bin/troff2png - 775 sys sys 1138456827 228
+rc/bin/umem - 775 sys sys 1190076661 547
 rc/bin/uncompress - 775 sys sys 1158798931 30
 rc/bin/ups - 775 sys sys 1091021981 806
 rc/bin/uptime - 775 sys sys 1074730712 234
@@ -7407,7 +7408,7 @@ sys/man/1/jpg - 664 sys sys 1166760721 4841
 sys/man/1/kbmap - 664 sys sys 1159419894 846
 sys/man/1/kill - 664 sys sys 1018369246 1193
 sys/man/1/ktrace - 664 sys sys 957920006 1330
-sys/man/1/leak - 664 sys sys 1172760642 4097
+sys/man/1/leak - 664 sys sys 1190076657 4373
 sys/man/1/lens - 664 sys sys 1130425868 1272
 sys/man/1/lex - 664 sys sys 1113743328 1520
 sys/man/1/look - 664 sys sys 1113743326 1357
@@ -7484,7 +7485,7 @@ sys/man/1/uniq - 664 sys sys 944959674 995
 sys/man/1/units - 664 sys sys 1113743326 2046
 sys/man/1/uptime - 664 sys sys 1074733782 380
 sys/man/1/vac - 664 sys sys 1162102172 3244
-sys/man/1/venti - 664 sys sys 1189183078 2647
+sys/man/1/venti - 664 sys sys 1190066650 2655
 sys/man/1/vi - 664 sys sys 1101668051 2904
 sys/man/1/vnc - 664 sys sys 1158063994 4313
 sys/man/1/vt - 664 sys sys 1186695303 2424
@@ -14327,7 +14328,7 @@ sys/src/cmd/venti/srv/dcache.c - 664 sys sys 1189738448 18608
 sys/src/cmd/venti/srv/disksched.c - 664 sys sys 1142736352 2125
 sys/src/cmd/venti/srv/dump.c - 664 sys sys 1142736352 1642
 sys/src/cmd/venti/srv/findscore.c - 664 sys sys 1179863768 2195
-sys/src/cmd/venti/srv/fixarenas.c - 664 sys sys 1189738460 40533
+sys/src/cmd/venti/srv/fixarenas.c - 664 sys sys 1190076775 40524
 sys/src/cmd/venti/srv/fixarenas0.c - 664 sys sys 1142736352 36271
 sys/src/cmd/venti/srv/fmtarenas.c - 664 sys sys 1177189436 2702
 sys/src/cmd/venti/srv/fmtbloom.c - 664 sys sys 1142736352 2293
@@ -14338,7 +14339,7 @@ sys/src/cmd/venti/srv/graph.c - 664 sys sys 1177189436 4190
 sys/src/cmd/venti/srv/hdisk.c - 664 sys sys 1177189437 16510
 sys/src/cmd/venti/srv/httpd.c - 664 sys sys 1177189437 22784
 sys/src/cmd/venti/srv/icache.c - 664 sys sys 1186114652 8778
-sys/src/cmd/venti/srv/icachewrite.c - 664 sys sys 1189738523 7785
+sys/src/cmd/venti/srv/icachewrite.c - 664 sys sys 1190076776 7787
 sys/src/cmd/venti/srv/ifile.c - 664 sys sys 1189307036 2592
 sys/src/cmd/venti/srv/index.c - 664 sys sys 1178160304 17239
 sys/src/cmd/venti/srv/index2.c - 664 sys sys 1142736354 21620

+ 6 - 5
dist/replica/plan9.db

@@ -5521,7 +5521,7 @@ rc/bin/ipv6on - 775 sys sys 1186362803 2047
 rc/bin/iwhois - 775 sys sys 1188682646 1792
 rc/bin/juke - 775 sys sys 1105565140 1131
 rc/bin/kill - 775 sys sys 1143389260 142
-rc/bin/kmem - 775 sys sys 1141940177 468
+rc/bin/kmem - 775 sys sys 1190076660 544
 rc/bin/label - 775 sys sys 1173737765 189
 rc/bin/lc - 775 sys sys 945617207 24
 rc/bin/leak - 775 sys sys 1172760642 1921
@@ -5625,6 +5625,7 @@ rc/bin/tlsclienttunnel - 775 sys sys 1024375633 153
 rc/bin/tlssrvtunnel - 775 sys sys 1024375634 175
 rc/bin/troff2gif - 775 sys sys 1127410278 164
 rc/bin/troff2png - 775 sys sys 1138456827 228
+rc/bin/umem - 775 sys sys 1190076661 547
 rc/bin/uncompress - 775 sys sys 1158798931 30
 rc/bin/ups - 775 sys sys 1091021981 806
 rc/bin/uptime - 775 sys sys 1074730712 234
@@ -7407,7 +7408,7 @@ sys/man/1/jpg - 664 sys sys 1166760721 4841
 sys/man/1/kbmap - 664 sys sys 1159419894 846
 sys/man/1/kill - 664 sys sys 1018369246 1193
 sys/man/1/ktrace - 664 sys sys 957920006 1330
-sys/man/1/leak - 664 sys sys 1172760642 4097
+sys/man/1/leak - 664 sys sys 1190076657 4373
 sys/man/1/lens - 664 sys sys 1130425868 1272
 sys/man/1/lex - 664 sys sys 1113743328 1520
 sys/man/1/look - 664 sys sys 1113743326 1357
@@ -7484,7 +7485,7 @@ sys/man/1/uniq - 664 sys sys 944959674 995
 sys/man/1/units - 664 sys sys 1113743326 2046
 sys/man/1/uptime - 664 sys sys 1074733782 380
 sys/man/1/vac - 664 sys sys 1162102172 3244
-sys/man/1/venti - 664 sys sys 1189183078 2647
+sys/man/1/venti - 664 sys sys 1190066650 2655
 sys/man/1/vi - 664 sys sys 1101668051 2904
 sys/man/1/vnc - 664 sys sys 1158063994 4313
 sys/man/1/vt - 664 sys sys 1186695303 2424
@@ -14327,7 +14328,7 @@ sys/src/cmd/venti/srv/dcache.c - 664 sys sys 1189738448 18608
 sys/src/cmd/venti/srv/disksched.c - 664 sys sys 1142736352 2125
 sys/src/cmd/venti/srv/dump.c - 664 sys sys 1142736352 1642
 sys/src/cmd/venti/srv/findscore.c - 664 sys sys 1179863768 2195
-sys/src/cmd/venti/srv/fixarenas.c - 664 sys sys 1189738460 40533
+sys/src/cmd/venti/srv/fixarenas.c - 664 sys sys 1190076775 40524
 sys/src/cmd/venti/srv/fixarenas0.c - 664 sys sys 1142736352 36271
 sys/src/cmd/venti/srv/fmtarenas.c - 664 sys sys 1177189436 2702
 sys/src/cmd/venti/srv/fmtbloom.c - 664 sys sys 1142736352 2293
@@ -14338,7 +14339,7 @@ sys/src/cmd/venti/srv/graph.c - 664 sys sys 1177189436 4190
 sys/src/cmd/venti/srv/hdisk.c - 664 sys sys 1177189437 16510
 sys/src/cmd/venti/srv/httpd.c - 664 sys sys 1177189437 22784
 sys/src/cmd/venti/srv/icache.c - 664 sys sys 1186114652 8778
-sys/src/cmd/venti/srv/icachewrite.c - 664 sys sys 1189738523 7785
+sys/src/cmd/venti/srv/icachewrite.c - 664 sys sys 1190076776 7787
 sys/src/cmd/venti/srv/ifile.c - 664 sys sys 1189307036 2592
 sys/src/cmd/venti/srv/index.c - 664 sys sys 1178160304 17239
 sys/src/cmd/venti/srv/index2.c - 664 sys sys 1142736354 21620

+ 6 - 0
dist/replica/plan9.log

@@ -52777,3 +52777,9 @@
 1189738804 2 c sys/src/cmd/venti/srv/icachewrite.c - 664 sys sys 1189738523 7785
 1189810805 0 c dist/replica/network - 775 sys sys 1189810597 1038
 1189904404 0 c dist/replica/network - 775 sys sys 1189903604 1075
+1190066599 0 c sys/man/1/venti - 664 sys sys 1190066650 2655
+1190077204 0 c rc/bin/kmem - 775 sys sys 1190076660 544
+1190077204 1 a rc/bin/umem - 775 sys sys 1190076661 547
+1190077204 2 c sys/man/1/leak - 664 sys sys 1190076657 4373
+1190077204 3 c sys/src/cmd/venti/srv/fixarenas.c - 664 sys sys 1190076775 40524
+1190077204 4 c sys/src/cmd/venti/srv/icachewrite.c - 664 sys sys 1190076776 7787

+ 2 - 1
rc/bin/kmem

@@ -1,5 +1,6 @@
 #!/bin/rc
-
+# kmem [kernel] - print summary of allocate blocks in running kernel
+rfork e
 if(! ~ $#* 0 1){
 	echo 'usage: kmem [kernel]' >[1=2]
 	exit usage

+ 33 - 0
rc/bin/umem

@@ -0,0 +1,33 @@
+#!/bin/rc
+# umem pid [binary] - print summary of allocate blocks in a running process
+rfork e
+if(! ~ $#* 1 2){
+	echo 'usage: umem pid [binary]' >[1=2]
+	exit usage
+}
+
+p=$1
+binary=()
+if(~ $#* 2)
+	binary=$2
+
+echo 'blocksummary()' | acid -lpool -lleak $p $binary | awk '
+	$1 == "block" {
+		addr=$6
+		size=$3
+		alloc=$4
+		total[alloc] += size
+		count[alloc]++
+	}
+	$1 == "summary" { 
+		alloc=$2
+		cnt=$3
+		size=$4
+		total[alloc] += size
+		count[alloc] += cnt
+	}
+	END{
+		for(i in count)
+			printf("%6d %11d %s\n", count[i], total[i], i);
+	}
+' | sort -nr

+ 25 - 6
sys/man/1/leak

@@ -1,6 +1,6 @@
 .TH LEAK 1
 .SH NAME
-leak, kmem \- help find memory leaks
+leak, kmem, umem \- help find memory leaks
 .SH SYNOPSIS
 .B leak
 [
@@ -24,6 +24,12 @@ leak, kmem \- help find memory leaks
 [
 .I kernel
 ]
+.PP
+.B umem
+.I pid
+[
+.I textfile
+]
 .SH DESCRIPTION
 .I Leak
 examines the named processes, which
@@ -143,11 +149,21 @@ processes, and is only necessary
 when inspecting processes started
 from stripped binaries.
 .PP
-.I Kmem
-prints a summary of all allocated blocks in the running kernel.
-Each line of the summary gives
-the count and total size of blocks allocated at an allocation point.
+.I Umem
+prints a summary of all allocated blocks in the process with id
+.IR pid .
+Each line of the summary gives the count and total size of 
+blocks allocated at an allocation point.
 The list is sorted by count in decreasing order.
+.I Umem
+prints summarizes all allocations, not just 
+memory leaks, but it is faster and requires less memory than 
+.I leak .
+.PP
+.I Kmem
+is like
+.I umem
+but prints a summary for the running kernel.
 .SH EXAMPLES
 List lost blocks in 
 .IR 8.out .
@@ -189,6 +205,8 @@ first by count and then by total size:
 .B /rc/bin/leak
 .br
 .B /rc/bin/kmem
+.br
+.B /rc/bin/umem
 .SH SEE ALSO
 .IR getcallerpc (2),
 .I setmalloctag
@@ -206,6 +224,7 @@ allocator,
 .I leak
 will not work on APE programs.
 .PP
-It's not speedy, and
+.I Leak
+is not speedy, and
 .I acidleak
 can consume more memory than the process(es) being examined.

+ 2 - 2
sys/man/1/venti

@@ -148,7 +148,7 @@ It writes the new root score to standard output.
 .SH SOURCE
 .B /sys/src/cmd/venti
 .br
-.B /sys/src/cmd/oventi
+.B /sys/src/cmd/oventi/copy.c
 .SH SEE ALSO
 .IR vac (1),
 .IR venti (2),
@@ -159,7 +159,7 @@ It writes the new root score to standard output.
 .IR venti-fmt (8)
 .SH BUGS
 Currently
-.I nventi 's
+.IR nventi 's
 .I copy
 doesn't seem to copy the block corresponding to
 .IR score

+ 4 - 3
sys/src/cmd/venti/srv/fixarenas.c

@@ -15,6 +15,8 @@
 #include "fns.h"
 #include "whack.h"
 
+#define ROUNDUP(x,n)		(((x)+(n)-1)&~((n)-1))
+
 #pragma varargck type "z" uvlong
 #pragma varargck type "z" vlong
 #pragma varargck type "t" uint
@@ -794,7 +796,7 @@ guessgeometry(void)
 		ap.arenabase = bestdiff;
 	}
 
-	ap.tabbase = (PartBlank+HeadSize+ap.blocksize-1) & ~(ap.blocksize-1);
+	ap.tabbase = ROUNDUP(PartBlank+HeadSize, ap.blocksize);
 	/*
 	 * XXX pick up table, check arenabase.
 	 * XXX pick up table, record base name.
@@ -806,8 +808,7 @@ guessgeometry(void)
 	 */
 	if(ap.arenabase == 0){
 		for(i=0; i<nelem(tabsizes); i++){
-			ap.arenabase = (PartBlank + HeadSize + tabsizes[i] + 
-				ap.blocksize - 1) & ~(ap.blocksize - 1);
+			ap.arenabase = ROUNDUP(PartBlank+HeadSize, ap.blocksize);
 			p = pagein(ap.arenabase, Block);
 			if(u32(p) == ArenaHeadMagic)
 				break;

+ 13 - 6
sys/src/cmd/venti/srv/icachewrite.c

@@ -45,6 +45,16 @@ initicachewrite(void)
 	vtproc(delaykickroundproc, &iwrite.round);
 }
 
+static u64int
+ie2diskaddr(Index *ix, ISect *is, IEntry *ie)
+{
+	u64int bucket, addr;
+
+	bucket = hashbits(ie->score, 32)/ix->div;
+	addr = is->blockbase + ((bucket - is->start) << is->blocklog);
+	return addr;
+}
+
 static IEntry*
 nextchunk(Index *ix, ISect *is, IEntry **pie, u64int *paddr, uint *pnbuf)
 {
@@ -55,12 +65,10 @@ nextchunk(Index *ix, ISect *is, IEntry **pie, u64int *paddr, uint *pnbuf)
 
 	bsize = 1<<is->blocklog;
 	iefirst = *pie;
-	addr = is->blockbase + ((u64int)(hashbits(iefirst->score, 32) /
-		ix->div - is->start) << is->blocklog);
+	addr = ie2diskaddr(ix, is, iefirst);
 	nbuf = 0;
 	for(l = &iefirst->nextdirty; (ie = *l) != nil; l = &(*l)->nextdirty){
-		naddr = is->blockbase + ((u64int)(hashbits(ie->score, 32) /
-			ix->div - is->start) << is->blocklog);
+		naddr = ie2diskaddr(ix, is, ie);
 		if(naddr - addr >= Bufsize)
 			break;
 		nbuf = naddr - addr;
@@ -125,8 +133,7 @@ icachewritesect(Index *ix, ISect *is, u8int *buf)
 
 		for(l=&chunk; (ie=*l)!=nil; l=&ie->nextdirty){
 again:
-			naddr = is->blockbase + ((u64int)(hashbits(ie->score,
-				32) / ix->div - is->start) << is->blocklog);
+			naddr = ie2diskaddr(ix, is, ie);
 			off = naddr - addr;
 			if(off+bsize > nbuf){
 				fprint(2, "%s: whoops! addr=0x%llux nbuf=%ud "