1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:14:47 -07:00
go/test
Russ Cox d324f2143b runtime: parallelize garbage collector mark + sweep
Running test/garbage/parser.out.

On a 4-core Lenovo X201s (Linux):
31.12u 0.60s 31.74r 	 1 cpu, no atomics
32.27u 0.58s 32.86r 	 1 cpu, atomic instructions
33.04u 0.83s 27.47r 	 2 cpu

On a 16-core Xeon (Linux):
33.08u 0.65s 33.80r 	 1 cpu, no atomics
34.87u 1.12s 29.60r 	 2 cpu
36.00u 1.87s 28.43r 	 3 cpu
36.46u 2.34s 27.10r 	 4 cpu
38.28u 3.85s 26.92r 	 5 cpu
37.72u 5.25s 26.73r	 6 cpu
39.63u 7.11s 26.95r	 7 cpu
39.67u 8.10s 26.68r	 8 cpu

On a 2-core MacBook Pro Core 2 Duo 2.26 (circa 2009, MacBookPro5,5):
39.43u 1.45s 41.27r 	 1 cpu, no atomics
43.98u 2.95s 38.69r 	 2 cpu

On a 2-core Mac Mini Core 2 Duo 1.83 (circa 2008; Macmini2,1):
48.81u 2.12s 51.76r 	 1 cpu, no atomics
57.15u 4.72s 51.54r 	 2 cpu

The handoff algorithm is really only good for two cores.
Beyond that we will need to so something more sophisticated,
like have each core hand off to the next one, around a circle.
Even so, the code is a good checkpoint; for now we'll limit the
number of gc procs to at most 2.

R=dvyukov
CC=golang-dev
https://golang.org/cl/4641082
2011-09-30 09:40:01 -04:00
..
bench timing.log: significant improvements after custom algorithms 2011-08-10 15:45:37 +10:00
bugs test: Add test for inheriting private method from anonymous field. 2011-09-14 10:31:51 -07:00
chan runtime: check for nil value pointer in select syncsend case 2011-09-26 20:46:37 -07:00
dwarf ld: grow dwarf includestack on demand. 2011-09-09 15:08:57 +02:00
fixedbugs 5g: fix -f() 2011-09-29 12:09:46 -04:00
garbage runtime: parallelize garbage collector mark + sweep 2011-09-30 09:40:01 -04:00
interface test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
ken gc: handle complex CONVNOP 2011-09-19 11:50:53 -04:00
syntax gc: clean up if grammar 2011-09-12 15:52:29 -04:00
64bit.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
235.go single argument panic 2010-03-30 10:34:57 -07:00
append.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
args.go move things out of sys into os and runtime 2009-05-08 15:21:41 -07:00
assign1.go test: Match gccgo error messages. 2010-09-10 19:12:10 -07:00
assign.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
bigalg.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
bigmap.go runtime: allow large map values 2010-05-19 12:57:47 -07:00
blank1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
blank.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
chancap.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
char_lit1.go test: Match gccgo error messages. 2010-08-31 11:43:52 -07:00
char_lit.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
closedchan.go go code: replace closed(c) with x, ok := <-c 2011-03-11 14:47:44 -05:00
closure.go gc: issue 1231 2010-12-13 16:51:19 -05:00
cmp6.go test: match gccgo error messages for cmp6.go 2011-03-25 17:51:02 -07:00
cmp.go test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
cmplx.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide.c delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide.go more soft float support. passes several basic tests 2010-07-20 15:53:16 +03:00
complit.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
compos.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
const1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
const2.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
const3.go gc: another shift bug 2010-12-13 13:42:51 -05:00
const.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
convert3.go test: don't assign address of array to slice. 2010-08-31 07:34:01 -07:00
convert.go fix tree for reflect rename 2011-04-25 13:39:36 -04:00
convlit1.go more 6g reorg; checkpoint. 2009-08-03 11:58:52 -07:00
convlit.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
copy.go test copy([]byte, string) 2010-10-26 08:36:23 -07:00
ddd1.go gc: disallow [...][...]int{{1,2,3}} 2011-07-26 00:52:02 -04:00
ddd2.go gc: add ... T, rework plain ... 2010-02-01 00:25:59 -08:00
ddd3.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
ddd.go gc: ... bug 2010-10-06 11:12:30 -04:00
decl.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
declbad.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
defer.go ... changes 2010-09-24 11:55:48 -04:00
deferprint.go gc: implement defer print/println/panic/panicln 2010-01-27 15:37:08 -08:00
divide.go 6g, 8g: divide corner case 2011-07-28 14:18:22 -04:00
empty.go test of new empty productions 2008-10-08 15:33:18 -07:00
env.go test: don't require specific GOARCH values. 2011-03-30 14:24:32 -07:00
eof1.go gc: line comments may end in EOF 2010-11-04 16:04:04 -04:00
eof.go gc: insert semicolon at EOF if needed 2010-09-28 10:35:02 -04:00
errchk errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
escape2.go gc: treat DOTMETH like DOT in escape analysis. 2011-09-07 19:03:11 +02:00
escape3.go gc: zero stack-allocated slice backing arrays 2011-09-02 15:11:28 -04:00
escape.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
float_lit.go arm: enable all tests 2010-10-25 21:25:13 -07:00
floatcmp.go more soft float support. passes several basic tests 2010-07-20 15:53:16 +03:00
for.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
func1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
func2.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
func3.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
func4.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
func5.go single argument panic 2010-03-30 10:34:57 -07:00
func6.go gc: fix func syntax error 2011-04-13 22:48:21 -04:00
func7.go gc: fix order of operations for f() < g(). 2011-04-26 00:57:03 -04:00
func.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
gc1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
gc2.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
gc.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
golden.out test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
goprint.go gc: handle go print() and go println() 2011-06-13 22:50:51 +10:00
goto.go test: match gccgo error messages for goto.go and bug344.go 2011-09-20 14:45:54 -07:00
hashmap.go build: clear execute bit from Go files 2011-09-05 07:48:42 -04:00
helloworld.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
if.go go: require { } around else block 2011-07-14 17:15:52 -04:00
import1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
import2.go gc: fix chan <- chan precedence. 2010-01-26 10:40:28 -08:00
import3.go gc: fix chan <- chan precedence. 2010-01-26 10:40:28 -08:00
import4.go gc: fix imported and not used message - show path 2010-03-03 17:23:47 -08:00
import.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
index.go test: fix NaCl build 2010-09-19 23:28:32 -04:00
indirect1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
indirect.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
init.go test: match gccgo error messages for init.go 2011-03-26 11:24:02 -07:00
initcomma.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
initialize.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
initializerr.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
initsyscall.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
int_lit.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
intcvt.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
iota.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
label1.go test: match gccgo error messages for label.go and label1.go. 2011-03-25 10:36:46 -07:00
label.go test: match gccgo error messages for label.go and label1.go. 2011-03-25 10:36:46 -07:00
literal.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
malloc1.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
mallocfin.go single argument panic 2010-03-30 10:34:57 -07:00
mallocrand.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
mallocrep1.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
mallocrep.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
map1.go gc: disallow invalid map keys 2011-09-19 13:11:24 -04:00
map.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
method1.go test: s/float/float64/ 2011-01-21 08:37:58 -08:00
method2.go test: match gccgo error messages 2011-09-21 17:25:48 -07:00
method3.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
method.go gc, spec, tests: no auto-indirect of pointer to interface value 2010-09-30 14:59:41 -04:00
named1.go go code: replace closed(c) with x, ok := <-c 2011-03-11 14:47:44 -05:00
named.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
nil.go test: new nil semantics 2011-08-17 15:55:06 -04:00
nilptr.go test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
nul1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
parentype.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
peano.go test/peano: use directly recursive type def 2010-08-06 15:07:54 -07:00
printbig.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
range.go gc: implement new len spec, range bug fix, optimization 2010-07-01 18:04:25 -07:00
recover1.go test for panic and recover 2010-03-31 11:47:09 -07:00
recover2.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
recover3.go remove nacl 2010-12-15 11:49:23 -05:00
recover.go runtime: turn run time errors checks into panics 2010-04-01 22:31:27 -07:00
rename1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
rename.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
run test: merge nilptr/* into one test 2011-09-26 13:59:01 -04:00
runtime.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
shift1.go test: match gccgo error messages 2011-09-21 17:25:48 -07:00
shift2.go gc: implement new shift rules 2011-05-31 15:05:40 -04:00
sieve.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
sigchld.go test: fix windows build 2011-09-27 09:13:00 -04:00
simassign.go single argument panic 2010-03-30 10:34:57 -07:00
sinit.go gc: make static initialization more static 2011-08-31 07:37:14 -04:00
sizeof.go gc: unsafe.Alignof, unsafe.Offsetof, unsafe.Sizeof now return uintptr 2011-06-17 16:12:14 -04:00
solitaire.go solitaire: an exercise in backtracking and string conversions 2010-09-03 10:52:45 -07:00
stack.go 5l, 8l: pass stack frame size to morestack when needed 2011-02-01 18:34:41 -05:00
string_lit.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
stringrange.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
struct0.go gc: fix zero-length struct eval 2011-09-05 15:31:22 -04:00
switch1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
switch.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
test0.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
turing.go test/turing: refactor 2010-09-04 10:40:00 +10:00
typeswitch1.go single argument panic 2010-03-30 10:34:57 -07:00
typeswitch2.go type switches: test for pathological case 2011-08-19 09:31:50 -07:00
typeswitch.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
undef.go test: Match gccgo error messages. 2010-09-10 12:44:37 -07:00
utf.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
varerr.go test: Match gccgo error messages. 2010-09-10 12:45:46 -07:00
varinit.go single argument panic 2010-03-30 10:34:57 -07:00
vectors.go single argument panic 2010-03-30 10:34:57 -07:00
zerodivide.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00