Jan Ziak
6e69df6102
cmd/gc: support channel types in the garbage collector
...
R=golang-dev, dvyukov, rsc
CC=golang-dev
https://golang.org/cl/7473044
2013-03-19 19:51:03 +01:00
Jan Ziak
92c153d5f4
runtime: scan the type of an interface value
...
R=golang-dev, rsc, bradfitz
CC=golang-dev
https://golang.org/cl/7744047
2013-03-15 16:07:52 -04:00
Jan Ziak
ee3c88482b
runtime: remove struct BitTarget
...
R=golang-dev
CC=dvyukov, golang-dev, rsc
https://golang.org/cl/7845043
2013-03-15 12:37:40 -04:00
Jan Ziak
2924638d26
runtime: replace lock() with casp() in the GC
...
Note: BitTarget will be removed by a forthcoming changeset.
R=golang-dev, dvyukov
CC=golang-dev, rsc
https://golang.org/cl/7837044
2013-03-15 09:02:36 +01:00
Dmitriy Vyukov
433824d808
runtime: fix misaligned 64-bit atomic
...
Fixes #4869 .
Fixes #5007 .
Update #5005 .
R=golang-dev, 0xe2.0x9a.0x9b, bradfitz
CC=golang-dev
https://golang.org/cl/7534044
2013-03-10 20:46:11 +04:00
Russ Cox
e0deb2ef7f
undo CL 7301062 / 9742f722b558
...
broke arm garbage collector
traceback_arm fails with a missing pc. It needs CL 7494043.
But that only makes the build break later, this time with
"invalid freelist". Roll back until it can be fixed correctly.
««« original CL description
runtime: restrict stack root scan to locals and arguments
R=rsc
CC=golang-dev
https://golang.org/cl/7301062
»»»
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/7493044
2013-03-05 15:36:40 -05:00
Carl Shapiro
db018bf77c
runtime: restrict stack root scan to locals and arguments
...
R=rsc
CC=golang-dev
https://golang.org/cl/7301062
2013-03-04 19:48:50 -08:00
Jan Ziak
cea46387b9
runtime: add garbage collector statistics
...
If the constant CollectStats is non-zero and GOGCTRACE=1
the garbage collector will print basic statistics about executed
GC instructions.
R=golang-dev, dvyukov
CC=golang-dev, rsc
https://golang.org/cl/7413049
2013-03-04 16:54:37 +01:00
Dmitriy Vyukov
779c45a507
runtime: improved scheduler
...
Distribute runnable queues, memory cache
and cache of dead G's per processor.
Faster non-blocking syscall enter/exit.
More conservative worker thread blocking/unblocking.
R=dave, bradfitz, remyoudompheng, rsc
CC=golang-dev
https://golang.org/cl/7314062
2013-03-01 13:49:16 +02:00
Jan Ziak
94955f9b40
runtime: check the value returned by runtime·SysAlloc
...
R=golang-dev, rsc
CC=golang-dev, minux.ma
https://golang.org/cl/7424047
2013-03-01 00:21:08 -05:00
Jan Ziak
01ab9a012a
runtime: improve precision of GC_REGION
...
R=rsc
CC=golang-dev
https://golang.org/cl/7383054
2013-02-27 08:28:53 -08:00
Russ Cox
56a06db360
cmd/ld: change GC_CALL to 32-bit relative address
...
The current code uses 64-bit pc-relative on 64-bit systems,
but in ELF linkers there is no such thing, so we cannot
express this in a .o file. Change to 32-bit.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/7383055
2013-02-26 19:42:56 -08:00
Jan Ziak
a656f82071
runtime: precise garbage collection of channels
...
This changeset adds a mostly-precise garbage collection of channels.
The garbage collection support code in the linker isn't recognizing
channel types yet.
Fixes issue http://stackoverflow.com/questions/14712586/memory-consumption-skyrocket
R=dvyukov, rsc, bradfitz
CC=dave, golang-dev, minux.ma, remyoudompheng
https://golang.org/cl/7307086
2013-02-25 15:58:23 -05:00
Russ Cox
1903ad7189
cmd/gc, reflect, runtime: switch to indirect func value representation
...
Step 1 of http://golang.org/s/go11func .
R=golang-dev, r, daniel.morsing, remyoudompheng
CC=golang-dev
https://golang.org/cl/7393045
2013-02-21 17:01:13 -05:00
Russ Cox
8a6ff3ab34
runtime: allocate heap metadata at run time
...
Before, the mheap structure was in the bss,
but it's quite large (today, 256 MB, much of
which is never actually paged in), and it makes
Go binaries run afoul of exec-time bss size
limits on some BSD systems.
Fixes #4447 .
R=golang-dev, dave, minux.ma, remyoudompheng, iant
CC=golang-dev
https://golang.org/cl/7307122
2013-02-15 14:27:03 -05:00
Russ Cox
e5dae3baaa
runtime: tweak addfinroots to preserve original pointer
...
Use local variable so that stack trace will show value of v.
Fixes #4790 .
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/7300106
2013-02-13 22:31:45 -05:00
Jan Ziak
1e01fba2fc
runtime: precise garbage collection of hashmaps
...
R=golang-dev, rsc
CC=dave, dvyukov, golang-dev, minux.ma, remyoudompheng
https://golang.org/cl/7252047
2013-02-08 16:00:33 -05:00
Russ Cox
472354f81e
runtime/debug: add controls for garbage collector
...
Fixes #4090 .
R=golang-dev, iant, bradfitz, dsymonds
CC=golang-dev
https://golang.org/cl/7229070
2013-02-04 00:00:55 -05:00
Elias Naur
44cf814d50
runtime, cmd/ld: make code more position-independent
...
Change the stack unwinding code to compensate for the dynamic
relocation of symbols.
Change the gc instruction GC_CALL to use a relative offset instead of
an absolute address.
R=golang-dev
CC=golang-dev
https://golang.org/cl/7248048
2013-02-01 11:24:49 -08:00
Sébastien Paolacci
09ea3b518e
runtime: earlier detection of unused spans.
...
Mark candidate spans one GC pass earlier.
Move scavenger's code out from mgc0 and constrain it into mheap (where it belongs).
R=rsc, dvyukov, minux.ma
CC=golang-dev
https://golang.org/cl/7002049
2013-01-28 12:53:35 -05:00
Dmitriy Vyukov
fd32ac4bae
runtime: account stop-the-world time in the "other" GOGCTRACE section
...
Currently it's summed to mark phase.
The change makes it easier to diagnose long stop-the-world phases.
R=golang-dev, bradfitz, dave
CC=golang-dev
https://golang.org/cl/7182043
2013-01-22 13:44:49 +04:00
Jan Ziak
059fed3dfb
runtime: try to determine the actual type during garbage collection
...
If the scanned block has no typeinfo the garbage collector will attempt
to get the actual type of the block.
R=golang-dev, bradfitz, rsc
CC=golang-dev
https://golang.org/cl/7093045
2013-01-18 16:56:17 -05:00
Rémy Oudompheng
c13866db7f
cmd/5c: fix handling of side effects when assigning a struct literal.
...
Also undo revision a5b96b602690 used to workaround the bug.
Fixes #4643 .
R=rsc, golang-dev, dave, minux.ma, lucio.dere, bradfitz
CC=golang-dev
https://golang.org/cl/7090043
2013-01-12 09:16:50 +01:00
Rémy Oudompheng
6e981c181c
runtime: work around 5c bug in GC code.
...
5c miscompiles *p++ = struct_literal.
R=dave, golang-dev
CC=golang-dev
https://golang.org/cl/7065069
2013-01-11 00:59:44 +01:00
Jan Ziak
9204eb4d3c
runtime: interpret type information during garbage collection
...
R=rsc, dvyukov, remyoudompheng, dave, minux.ma, bradfitz
CC=golang-dev
https://golang.org/cl/6945069
2013-01-10 15:45:46 -05:00
Dmitriy Vyukov
f82db7d9e4
runtime: less aggressive per-thread stack segment caching
...
Introduce global stack segment cache and limit per-thread cache size.
This greatly reduces StackSys memory on workloads that create lots of threads.
benchmark old ns/op new ns/op delta
BenchmarkStackGrowth 665 656 -1.35%
BenchmarkStackGrowth-2 333 328 -1.50%
BenchmarkStackGrowth-4 224 172 -23.21%
BenchmarkStackGrowth-8 124 91 -26.13%
BenchmarkStackGrowth-16 82 47 -41.94%
BenchmarkStackGrowth-32 73 40 -44.79%
BenchmarkStackGrowthDeep 97231 94391 -2.92%
BenchmarkStackGrowthDeep-2 47230 58562 +23.99%
BenchmarkStackGrowthDeep-4 24993 49356 +97.48%
BenchmarkStackGrowthDeep-8 15105 30072 +99.09%
BenchmarkStackGrowthDeep-16 10005 15623 +56.15%
BenchmarkStackGrowthDeep-32 12517 13069 +4.41%
TestStackMem#1,MB 310 12 -96.13%
TestStackMem#2,MB 296 14 -95.27%
TestStackMem#3,MB 479 14 -97.08%
TestStackMem#1,sec 3.22 2.26 -29.81%
TestStackMem#2,sec 2.43 2.15 -11.52%
TestStackMem#3,sec 2.50 2.38 -4.80%
R=sougou, no.smile.face, rsc
CC=golang-dev, msolomon
https://golang.org/cl/7029044
2013-01-10 09:57:06 +04:00
Jan Ziak
89ec208ee8
runtime: introduce typedefs and delete struct keywords in mgc0.c
...
R=rsc
CC=golang-dev
https://golang.org/cl/7029055
2013-01-04 10:20:50 -05:00
Jingcheng Zhang
70e967b7bc
runtime: use "mp" and "gp" instead of "m" and "g" for local variable name to avoid confusion with the global "m" and "g".
...
R=golang-dev, minux.ma, rsc
CC=bradfitz, golang-dev
https://golang.org/cl/6939064
2012-12-19 00:30:29 +08:00
Jan Ziak
013fa63c90
runtime: struct Obj in mgc0.c and buffers in scanblock()
...
Details:
- This CL is the conceptual skeleton of code found in CL 6114046
- The garbage collector uses struct Obj to specify memory blocks
- scanblock() is putting found memory blocks into an intermediate buffer
(xbuf) before adding/flushing them to the main work buffer (wbuf)
- The main loop in scanblock() is replaced with a skeleton code that
in the future will be able to recognize the type of objects and
thus will improve the garbage collector's precision.
For now, all objects are simply sequences of pointers so
the precision of the garbage collector remains unchanged.
- The code plugs .gcdata and .gcbss sections into the garbage collector.
scanblock() in this CL is unable to make any use of this.
R=rsc, dvyukov, remyoudompheng
CC=dave, golang-dev, minux.ma
https://golang.org/cl/6856121
2012-12-16 19:32:12 -05:00
Jan Ziak
51b8edcb37
runtime: use reflect·call() to enter the function gc()
...
Garbage collection code (to be merged later) is calling functions
which have many local variables. This increases the probability that
the stack capacity won't be big enough to hold the local variables.
So, start gc() on a bigger stack to eliminate a potentially large number
of calls to runtime·morestack().
R=rsc, remyoudompheng, dsymonds, minux.ma, iant, iant
CC=golang-dev
https://golang.org/cl/6846044
2012-11-27 13:04:59 -05:00
Dmitriy Vyukov
063c13a34c
runtime/race: more precise handling of finalizers
...
Currently race detector runtime just disables race detection in the finalizer goroutine.
It has false positives when a finalizer writes to shared memory -- the race with finalizer is reported in a normal goroutine that accesses the same memory.
After this change I am going to synchronize the finalizer goroutine with the rest of the world in racefingo(). This is closer to what happens in reality and so
does not have false positives.
And also add README file with instructions how to build the runtime.
R=golang-dev, minux.ma, rsc
CC=golang-dev
https://golang.org/cl/6810095
2012-11-14 16:58:10 +04:00
Jan Ziak
e0c9d04aec
runtime: add memorydump() debugging function
...
R=golang-dev
CC=golang-dev, remyoudompheng, rsc
https://golang.org/cl/6780059
2012-11-01 12:56:25 -04:00
Dmitriy Vyukov
320df44f04
runtime: switch to 64-bit goroutine ids
...
Fixes #4275 .
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6759053
2012-10-26 10:13:06 +04:00
Russ Cox
f76f120324
cmd/ld: use 64-bit alignment for large data and bss objects
...
Check for specific, important misalignment in garbage collector.
Not a complete fix for issue 599 but an important workaround.
Update #599 .
R=golang-dev, iant, dvyukov
CC=golang-dev
https://golang.org/cl/6641049
2012-10-09 12:50:06 -04:00
Dmitriy Vyukov
2f6cbc74f1
race: runtime changes
...
This is a part of a bigger change that adds data race detection feature:
https://golang.org/cl/6456044
R=rsc
CC=gobot, golang-dev
https://golang.org/cl/6535050
2012-10-07 22:05:32 +04:00
Jan Ziak
f8c58373e5
runtime: add types to MSpan
...
R=rsc
CC=golang-dev
https://golang.org/cl/6554060
2012-09-24 20:08:05 -04:00
Russ Cox
0b08c9483f
runtime: prepare for 64-bit ints
...
This CL makes the runtime understand that the type of
the len or cap of a map, slice, or string is 'int', not 'int32',
and it is also careful to distinguish between function arguments
and results of type 'int' vs type 'int32'.
In the runtime, the new typedefs 'intgo' and 'uintgo' refer
to Go int and uint. The C types int and uint continue to be
unavailable (cause intentional compile errors).
This CL does not change the meaning of int, but it should make
the eventual change of the meaning of int on amd64 a bit
smoother.
Update #2188 .
R=iant, r, dave, remyoudompheng
CC=golang-dev
https://golang.org/cl/6551067
2012-09-24 14:58:34 -04:00
Dmitriy Vyukov
f20fd87384
runtime: refactor goroutine blocking
...
The change is a preparation for the new scheduler.
It introduces runtime.park() function,
that will atomically unlock the mutex and park the goroutine.
It will allow to remove the racy readyonstop flag
that is difficult to implement w/o the global scheduler mutex.
R=rsc, remyoudompheng, dave
CC=golang-dev
https://golang.org/cl/6501077
2012-09-18 21:15:46 +04:00
Jan Ziak
54193689cc
cmd/ld: fix compilation when GOARCH != GOHOSTARCH
...
R=rsc, dave, minux.ma
CC=golang-dev
https://golang.org/cl/6493123
2012-09-17 17:18:21 -04:00
Dmitriy Vyukov
ed516df4e4
runtime: add freemcache() function
...
It will be required for scheduler that maintains
GOMAXPROCS MCache's.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6350062
2012-07-01 13:10:01 +04:00
Dmitriy Vyukov
902911bcff
runtime: fix potential GC deadlock
...
The issue seems to not be triggered right now,
but I've seen the deadlock after some other legal
modifications to runtime.
So I think we are safer this way.
R=rsc, r
CC=golang-dev
https://golang.org/cl/6339051
2012-06-25 11:08:09 +04:00
Dave Cheney
09f48db3e1
runtime: use uintptr for block length in scanblock
...
Using an int64 for a block size doesn't make
sense on 32bit platforms but extracts a performance
penalty dealing with double word quantities on Arm.
linux/arm
benchmark old ns/op new ns/op delta
BenchmarkGobDecode 155401600 144589300 -6.96%
BenchmarkGobEncode 72772220 62460940 -14.17%
BenchmarkGzip 5822632 2604797 -55.26%
BenchmarkGunzip 326321 151721 -53.51%
benchmark old MB/s new MB/s speedup
BenchmarkGobDecode 4.94 5.31 1.07x
BenchmarkGobEncode 10.55 12.29 1.16x
R=golang-dev, rsc, bradfitz
CC=golang-dev
https://golang.org/cl/6272047
2012-06-05 18:55:14 +10:00
Jan Ziak
334bf95f9e
runtime: update field types in preparation for GC changes
...
R=rsc, remyoudompheng, minux.ma, ality
CC=golang-dev
https://golang.org/cl/6242061
2012-05-30 13:07:52 -04:00
Rémy Oudompheng
348087877c
runtime: do not unset the special bit after finalization.
...
A block with finalizer might also be profiled. The special bit
is needed to unregister the block from the profile. It will be
unset only when the block is freed.
Fixes #3668 .
R=golang-dev, rsc
CC=golang-dev, remy
https://golang.org/cl/6249066
2012-05-30 08:04:11 +02:00
Dmitriy Vyukov
b0702bd0db
runtime: faster GC mark phase
...
Also bump MaxGcproc to 8.
benchmark old ns/op new ns/op delta
Parser 3796323000 3763880000 -0.85%
Parser-2 3591752500 3518560250 -2.04%
Parser-4 3423825250 3334955250 -2.60%
Parser-8 3304585500 3267014750 -1.14%
Parser-16 3313615750 3286160500 -0.83%
Tree 984128500 942501166 -4.23%
Tree-2 932564444 883266222 -5.29%
Tree-4 835831000 799912777 -4.30%
Tree-8 819238500 789717333 -3.73%
Tree-16 880837833 837840055 -5.13%
Tree2 604698100 579716900 -4.13%
Tree2-2 372414500 356765200 -4.20%
Tree2-4 187488100 177455900 -5.56%
Tree2-8 136315300 102086700 -25.11%
Tree2-16 93725900 76705800 -22.18%
ParserPause 157441210 166202783 +5.56%
ParserPause-2 93842650 85199900 -9.21%
ParserPause-4 56844404 53535684 -5.82%
ParserPause-8 35739446 30767613 -16.15%
ParserPause-16 32718255 27212441 -16.83%
TreePause 29610557 29787725 +0.60%
TreePause-2 24001659 20674421 -13.86%
TreePause-4 15114887 12842781 -15.03%
TreePause-8 13128725 10741747 -22.22%
TreePause-16 16131360 12506901 -22.47%
Tree2Pause 2673350920 2651045280 -0.83%
Tree2Pause-2 1796999200 1709350040 -4.88%
Tree2Pause-4 1163553320 1090706480 -6.67%
Tree2Pause-8 987032520 858916360 -25.11%
Tree2Pause-16 864758560 809567480 -6.81%
ParserLastPause 280537000 289047000 +3.03%
ParserLastPause-2 183030000 166748000 -8.90%
ParserLastPause-4 105817000 91552000 -13.48%
ParserLastPause-8 65127000 53288000 -18.18%
ParserLastPause-16 45258000 38334000 -15.30%
TreeLastPause 45072000 51449000 +12.39%
TreeLastPause-2 39269000 37866000 -3.57%
TreeLastPause-4 23564000 20649000 -12.37%
TreeLastPause-8 20881000 15807000 -24.30%
TreeLastPause-16 23297000 17309000 -25.70%
Tree2LastPause 6046912000 5797120000 -4.13%
Tree2LastPause-2 3724034000 3567592000 -4.20%
Tree2LastPause-4 1874831000 1774524000 -5.65%
Tree2LastPause-8 1363108000 1020809000 -12.79%
Tree2LastPause-16 937208000 767019000 -22.18%
R=rsc, 0xe2.0x9a.0x9b
CC=golang-dev
https://golang.org/cl/6223050
2012-05-24 10:55:50 +04:00
Dmitriy Vyukov
845aa1fc2c
runtime: faster GC sweep phase
...
benchmark old ns/op new ns/op delta
garbage.BenchmarkParser 3731065750 3715543750 -0.41%
garbage.BenchmarkParser-2 3631299750 3495248500 -3.75%
garbage.BenchmarkParser-4 3386486000 3339353000 -1.39%
garbage.BenchmarkParser-8 3267632000 3286422500 +0.58%
garbage.BenchmarkParser-16 3299203000 3316081750 +0.51%
garbage.BenchmarkTree 977532888 919453833 -5.94%
garbage.BenchmarkTree-2 919948555 853478000 -7.23%
garbage.BenchmarkTree-4 841329000 790207000 -6.08%
garbage.BenchmarkTree-8 787792777 740380666 -6.01%
garbage.BenchmarkTree-16 899257166 846594555 -5.86%
garbage.BenchmarkTree2 574876300 571885800 -0.52%
garbage.BenchmarkTree2-2 348162700 345888900 -0.65%
garbage.BenchmarkTree2-4 184912500 179137000 -3.22%
garbage.BenchmarkTree2-8 104243900 103485600 -0.73%
garbage.BenchmarkTree2-16 97269500 85137100 -14.25%
garbage.BenchmarkParserPause 141101976 157746974 +11.80%
garbage.BenchmarkParserPause-2 103096051 83043048 -19.45%
garbage.BenchmarkParserPause-4 52153133 45951111 -11.89%
garbage.BenchmarkParserPause-8 36730190 38901024 +5.91%
garbage.BenchmarkParserPause-16 32678875 29578585 -9.49%
garbage.BenchmarkTreePause 29487065 29648439 +0.55%
garbage.BenchmarkTreePause-2 22443494 21306159 -5.07%
garbage.BenchmarkTreePause-4 15799691 14985647 -5.15%
garbage.BenchmarkTreePause-8 10768112 9531420 -12.97%
garbage.BenchmarkTreePause-16 16329891 15205158 -6.89%
garbage.BenchmarkTree2Pause 2586957240 2577533200 -0.36%
garbage.BenchmarkTree2Pause-2 1683383760 1673923800 -0.56%
garbage.BenchmarkTree2Pause-4 1102860320 1074040280 -2.68%
garbage.BenchmarkTree2Pause-8 902627920 886122400 -1.86%
garbage.BenchmarkTree2Pause-16 856470920 804152320 -6.50%
garbage.BenchmarkParserLastPause 277316000 280839000 +1.25%
garbage.BenchmarkParserLastPause-2 179446000 163687000 -8.78%
garbage.BenchmarkParserLastPause-4 106752000 94144000 -11.81%
garbage.BenchmarkParserLastPause-8 57758000 61640000 +6.72%
garbage.BenchmarkParserLastPause-16 51235000 42552000 -16.95%
garbage.BenchmarkTreeLastPause 45244000 50786000 +12.25%
garbage.BenchmarkTreeLastPause-2 37163000 34654000 -6.75%
garbage.BenchmarkTreeLastPause-4 24178000 21967000 -9.14%
garbage.BenchmarkTreeLastPause-8 20390000 15648000 -30.30%
garbage.BenchmarkTreeLastPause-16 22398000 20180000 -9.90%
garbage.BenchmarkTree2LastPause 5748706000 5718809000 -0.52%
garbage.BenchmarkTree2LastPause-2 3481570000 3458844000 -0.65%
garbage.BenchmarkTree2LastPause-4 1849073000 1791330000 -3.22%
garbage.BenchmarkTree2LastPause-8 1042375000 1034811000 -0.73%
garbage.BenchmarkTree2LastPause-16 972637000 851323000 -14.25%
There is also visible improvement in consumed CPU time:
tree2 -heapsize=8000000000 -cpus=12
before: 248.74user 6.36system 0:52.74elapsed 483%CPU
after: 229.86user 6.33system 0:51.08elapsed 462%CPU
-1.66s of real time, but -18.91s of consumed CPU time
R=golang-dev
CC=golang-dev
https://golang.org/cl/6215065
2012-05-22 13:35:52 -04:00
Dmitriy Vyukov
01826280eb
runtime: refactor helpgc functionality in preparation for parallel GC
...
Parallel GC needs to know in advance how many helper threads will be there.
Hopefully it's the last patch before I can tackle parallel sweep phase.
The benchmarks are unaffected.
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6200064
2012-05-15 19:10:16 +04:00
Dmitriy Vyukov
4945fc8e40
runtime: speedup GC sweep phase (batch free)
...
benchmark old ns/op new ns/op delta
garbage.BenchmarkParser 4370050250 3779668750 -13.51%
garbage.BenchmarkParser-2 3713087000 3628771500 -2.27%
garbage.BenchmarkParser-4 3519755250 3406349750 -3.22%
garbage.BenchmarkParser-8 3386627750 3319144000 -1.99%
garbage.BenchmarkTree 493585529 408102411 -17.32%
garbage.BenchmarkTree-2 500487176 402285176 -19.62%
garbage.BenchmarkTree-4 473238882 361484058 -23.61%
garbage.BenchmarkTree-8 486977823 368334823 -24.36%
garbage.BenchmarkTree2 31446600 31203200 -0.77%
garbage.BenchmarkTree2-2 21469000 21077900 -1.82%
garbage.BenchmarkTree2-4 11007600 10899100 -0.99%
garbage.BenchmarkTree2-8 7692400 7032600 -8.58%
garbage.BenchmarkParserPause 241863263 163249450 -32.50%
garbage.BenchmarkParserPause-2 120135418 112981575 -5.95%
garbage.BenchmarkParserPause-4 83411552 64580700 -22.58%
garbage.BenchmarkParserPause-8 51870697 42207244 -18.63%
garbage.BenchmarkTreePause 20940474 13147011 -37.22%
garbage.BenchmarkTreePause-2 20115124 11146715 -44.59%
garbage.BenchmarkTreePause-4 17217584 7486327 -56.52%
garbage.BenchmarkTreePause-8 18258845 7400871 -59.47%
garbage.BenchmarkTree2Pause 174067190 172674190 -0.80%
garbage.BenchmarkTree2Pause-2 131175809 130615761 -0.43%
garbage.BenchmarkTree2Pause-4 95406666 93972047 -1.50%
garbage.BenchmarkTree2Pause-8 86056095 85334952 -0.84%
garbage.BenchmarkParserLastPause 329932000 324790000 -1.56%
garbage.BenchmarkParserLastPause-2 209383000 210456000 +0.51%
garbage.BenchmarkParserLastPause-4 113981000 112921000 -0.93%
garbage.BenchmarkParserLastPause-8 77967000 76625000 -1.72%
garbage.BenchmarkTreeLastPause 29752000 18444000 -38.01%
garbage.BenchmarkTreeLastPause-2 24274000 14766000 -39.17%
garbage.BenchmarkTreeLastPause-4 19565000 8726000 -55.40%
garbage.BenchmarkTreeLastPause-8 21956000 10530000 -52.04%
garbage.BenchmarkTree2LastPause 314411000 311945000 -0.78%
garbage.BenchmarkTree2LastPause-2 214641000 210836000 -1.77%
garbage.BenchmarkTree2LastPause-4 110024000 108943000 -0.98%
garbage.BenchmarkTree2LastPause-8 76873000 70263000 -8.60%
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5991049
2012-04-12 12:01:24 +04:00
Dmitriy Vyukov
342658bbb6
runtime: preparation for parallel GC
...
make MHeap.allspans an array instead on a linked-list,
it's required for parallel for
benchmark old ns/op new ns/op delta
garbage.BenchmarkTree 494435529 487962705 -1.31%
garbage.BenchmarkTree-2 499652705 485358000 -2.86%
garbage.BenchmarkTree-4 468482117 454093117 -3.07%
garbage.BenchmarkTree-8 488533235 471872470 -3.41%
garbage.BenchmarkTree-16 507835176 492558470 -3.01%
garbage.BenchmarkTree2 31453900 31404300 -0.16%
garbage.BenchmarkTree2-2 21440600 21477000 +0.17%
garbage.BenchmarkTree2-4 10982000 11117400 +1.23%
garbage.BenchmarkTree2-8 7544700 7456700 -1.17%
garbage.BenchmarkTree2-16 7049500 6805700 -3.46%
garbage.BenchmarkParser 4448988000 4453264000 +0.10%
garbage.BenchmarkParser-2 4086045000 4057948000 -0.69%
garbage.BenchmarkParser-4 3677365000 3661246000 -0.44%
garbage.BenchmarkParser-8 3517253000 3540190000 +0.65%
garbage.BenchmarkParser-16 3506562000 3463478000 -1.23%
garbage.BenchmarkTreePause 20969784 21100238 +0.62%
garbage.BenchmarkTreePause-2 20215875 20139572 -0.38%
garbage.BenchmarkTreePause-4 17240709 16683624 -3.23%
garbage.BenchmarkTreePause-8 18196386 17639306 -3.06%
garbage.BenchmarkTreePause-16 20621158 20215056 -1.97%
garbage.BenchmarkTree2Pause 173992142 173872380 -0.07%
garbage.BenchmarkTree2Pause-2 131281904 131366666 +0.06%
garbage.BenchmarkTree2Pause-4 93484952 95109619 +1.74%
garbage.BenchmarkTree2Pause-8 88950523 86533333 -2.72%
garbage.BenchmarkTree2Pause-16 86071238 84089190 -2.30%
garbage.BenchmarkParserPause 135815000 135255952 -0.41%
garbage.BenchmarkParserPause-2 92691523 91451428 -1.34%
garbage.BenchmarkParserPause-4 53392190 51611904 -3.33%
garbage.BenchmarkParserPause-8 36059523 35116666 -2.61%
garbage.BenchmarkParserPause-16 30174300 27340600 -9.39%
garbage.BenchmarkTreeLastPause 28420000 29142000 +2.54%
garbage.BenchmarkTreeLastPause-2 23514000 26779000 +13.89%
garbage.BenchmarkTreeLastPause-4 21773000 18660000 -14.30%
garbage.BenchmarkTreeLastPause-8 24072000 21276000 -11.62%
garbage.BenchmarkTreeLastPause-16 25149000 28541000 +13.49%
garbage.BenchmarkTree2LastPause 314491000 313982000 -0.16%
garbage.BenchmarkTree2LastPause-2 214363000 214715000 +0.16%
garbage.BenchmarkTree2LastPause-4 109778000 111115000 +1.22%
garbage.BenchmarkTree2LastPause-8 75390000 74522000 -1.15%
garbage.BenchmarkTree2LastPause-16 70333000 67880000 -3.49%
garbage.BenchmarkParserLastPause 327247000 326815000 -0.13%
garbage.BenchmarkParserLastPause-2 217039000 212529000 -2.08%
garbage.BenchmarkParserLastPause-4 119722000 111535000 -6.84%
garbage.BenchmarkParserLastPause-8 70806000 69613000 -1.68%
garbage.BenchmarkParserLastPause-16 62813000 48009000 -23.57%
R=rsc, r
CC=golang-dev
https://golang.org/cl/5992055
2012-04-09 13:05:43 +04:00
Dmitriy Vyukov
f09e63a2a0
runtime: add memory prefetching to GC
...
benchmark old ns/op new ns/op delta
garbage.BenchmarkParser 4448988000 4370531000 -1.76%
garbage.BenchmarkParser-2 4086045000 4023083000 -1.54%
garbage.BenchmarkParser-4 3677365000 3667020000 -0.28%
garbage.BenchmarkParser-8 3517253000 3543946000 +0.76%
garbage.BenchmarkParser-16 3506562000 3512518000 +0.17%
garbage.BenchmarkTree 494435529 505784058 +2.30%
garbage.BenchmarkTree-2 499652705 502774823 +0.62%
garbage.BenchmarkTree-4 468482117 465713352 -0.59%
garbage.BenchmarkTree-8 488533235 482287000 -1.28%
garbage.BenchmarkTree-16 507835176 500654882 -1.41%
garbage.BenchmarkTree2 31453900 28804600 -8.42%
garbage.BenchmarkTree2-2 21440600 19065800 -11.08%
garbage.BenchmarkTree2-4 10982000 10009100 -8.86%
garbage.BenchmarkTree2-8 7544700 6479800 -14.11%
garbage.BenchmarkTree2-16 7049500 6163200 -12.57%
garbage.BenchmarkParserPause 135815000 125360666 -7.70%
garbage.BenchmarkParserPause-2 92691523 84365476 -8.98%
garbage.BenchmarkParserPause-4 53392190 46995809 -11.98%
garbage.BenchmarkParserPause-8 36059523 30998900 -14.03%
garbage.BenchmarkParserPause-16 30174300 27613350 -8.49%
garbage.BenchmarkTreePause 20969784 22568102 +7.62%
garbage.BenchmarkTreePause-2 20215875 20975130 +3.76%
garbage.BenchmarkTreePause-4 17240709 17180666 -0.35%
garbage.BenchmarkTreePause-8 18196386 18205870 +0.05%
garbage.BenchmarkTreePause-16 20621158 20486867 -0.65%
garbage.BenchmarkTree2Pause 173992142 159995285 -8.04%
garbage.BenchmarkTree2Pause-2 131281904 118013714 -10.11%
garbage.BenchmarkTree2Pause-4 93484952 85092666 -8.98%
garbage.BenchmarkTree2Pause-8 88950523 77340809 -13.05%
garbage.BenchmarkTree2Pause-16 86071238 76557952 -11.05%
garbage.BenchmarkParserLastPause 327247000 288205000 -11.93%
garbage.BenchmarkParserLastPause-2 217039000 187336000 -13.69%
garbage.BenchmarkParserLastPause-4 119722000 105069000 -12.24%
garbage.BenchmarkParserLastPause-8 70806000 64755000 -8.55%
garbage.BenchmarkParserLastPause-16 62813000 53486000 -14.85%
garbage.BenchmarkTreeLastPause 28420000 29735000 +4.63%
garbage.BenchmarkTreeLastPause-2 23514000 25427000 +8.14%
garbage.BenchmarkTreeLastPause-4 21773000 19548000 -10.22%
garbage.BenchmarkTreeLastPause-8 24072000 24046000 -0.11%
garbage.BenchmarkTreeLastPause-16 25149000 25291000 +0.56%
garbage.BenchmarkTree2LastPause 314491000 287988000 -8.43%
garbage.BenchmarkTree2LastPause-2 214363000 190616000 -11.08%
garbage.BenchmarkTree2LastPause-4 109778000 100052000 -8.86%
garbage.BenchmarkTree2LastPause-8 75390000 64753000 -14.11%
garbage.BenchmarkTree2LastPause-16 70333000 61484000 -12.58%
FTR, below are result with the empty prefetch function,
that is, single RET but no real prefetching.
It suggests that inlinable PREFETCH is worth pursuing.
benchmark old ns/op new ns/op delta
garbage.BenchmarkParser 4448988000 4560488000 +2.51%
garbage.BenchmarkParser-2 4086045000 4129728000 +1.07%
garbage.BenchmarkParser-4 3677365000 3728672000 +1.40%
garbage.BenchmarkParser-8 3517253000 3583968000 +1.90%
garbage.BenchmarkParser-16 3506562000 3591414000 +2.42%
garbage.BenchmarkTree 494435529 499580882 +1.04%
garbage.BenchmarkTree-4 468482117 467387294 -0.23%
garbage.BenchmarkTree-8 488533235 478311117 -2.09%
garbage.BenchmarkTree-2 499652705 499324235 -0.07%
garbage.BenchmarkTree-16 507835176 502005705 -1.15%
garbage.BenchmarkTree2 31453900 33296800 +5.86%
garbage.BenchmarkTree2-2 21440600 22466400 +4.78%
garbage.BenchmarkTree2-4 10982000 11402700 +3.83%
garbage.BenchmarkTree2-8 7544700 7476500 -0.90%
garbage.BenchmarkTree2-16 7049500 7338200 +4.10%
garbage.BenchmarkParserPause 135815000 139529142 +2.73%
garbage.BenchmarkParserPause-2 92691523 95229190 +2.74%
garbage.BenchmarkParserPause-4 53392190 53083476 -0.58%
garbage.BenchmarkParserPause-8 36059523 34594800 -4.06%
garbage.BenchmarkParserPause-16 30174300 30063300 -0.37%
garbage.BenchmarkTreePause 20969784 21866920 +4.28%
garbage.BenchmarkTreePause-2 20215875 20731125 +2.55%
garbage.BenchmarkTreePause-4 17240709 17275837 +0.20%
garbage.BenchmarkTreePause-8 18196386 17898777 -1.64%
garbage.BenchmarkTreePause-16 20621158 20662772 +0.20%
garbage.BenchmarkTree2Pause 173992142 184336857 +5.95%
garbage.BenchmarkTree2Pause-2 131281904 138005714 +5.12%
garbage.BenchmarkTree2Pause-4 93484952 98449238 +5.31%
garbage.BenchmarkTree2Pause-8 88950523 89286095 +0.38%
garbage.BenchmarkTree2Pause-16 86071238 89568666 +4.06%
garbage.BenchmarkParserLastPause 327247000 342189000 +4.57%
garbage.BenchmarkParserLastPause-2 217039000 217224000 +0.09%
garbage.BenchmarkParserLastPause-4 119722000 121327000 +1.34%
garbage.BenchmarkParserLastPause-8 70806000 71941000 +1.60%
garbage.BenchmarkParserLastPause-16 62813000 60166000 -4.21%
garbage.BenchmarkTreeLastPause 28420000 27840000 -2.04%
garbage.BenchmarkTreeLastPause-2 23514000 27390000 +16.48%
garbage.BenchmarkTreeLastPause-4 21773000 21414000 -1.65%
garbage.BenchmarkTreeLastPause-8 24072000 21705000 -9.83%
garbage.BenchmarkTreeLastPause-16 25149000 23932000 -4.84%
garbage.BenchmarkTree2LastPause 314491000 332894000 +5.85%
garbage.BenchmarkTree2LastPause-2 214363000 224611000 +4.78%
garbage.BenchmarkTree2LastPause-4 109778000 113976000 +3.82%
garbage.BenchmarkTree2LastPause-8 75390000 67223000 -10.83%
garbage.BenchmarkTree2LastPause-16 70333000 73216000 +4.10%
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5991057
2012-04-07 17:02:44 +04:00