diff options
| author | Dmitriy Vyukov <dvyukov@google.com> | 2014-03-06 23:48:30 +0400 |
|---|---|---|
| committer | Dmitriy Vyukov <dvyukov@google.com> | 2014-03-06 23:48:30 +0400 |
| commit | a1695d2ea321e9bed50d90732a8cef5e71cd7a89 (patch) | |
| tree | 9b06b580f8db2686eb33728166016c01be9c9aa1 /src/pkg/runtime/proc.c | |
| parent | 5db255fa3c8b3f5d5aa1560d1e5be4688dfb7925 (diff) | |
| download | go-a1695d2ea321e9bed50d90732a8cef5e71cd7a89.tar.xz | |
runtime: use custom thunks for race calls instead of cgo
Implement custom assembly thunks for hot race calls (memory accesses and function entry/exit).
The thunks extract caller pc, verify that the address is in heap or global and switch to g0 stack.
Before:
ok regexp 3.692s
ok compress/bzip2 9.461s
ok encoding/json 6.380s
After:
ok regexp 2.229s (-40%)
ok compress/bzip2 4.703s (-50%)
ok encoding/json 3.629s (-43%)
For comparison, normal non-race build:
ok regexp 0.348s
ok compress/bzip2 0.304s
ok encoding/json 0.661s
Race build:
ok regexp 2.229s (+540%)
ok compress/bzip2 4.703s (+1447%)
ok encoding/json 3.629s (+449%)
Also removes some race-related special cases from cgocall and scheduler.
In long-term it will allow to remove cyclic runtime/race dependency on cmd/cgo.
Fixes #4249.
Fixes #7460.
Update #6508
Update #6688
R=iant, rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/55100044
Diffstat (limited to 'src/pkg/runtime/proc.c')
| -rw-r--r-- | src/pkg/runtime/proc.c | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index fdcbca4c32..a99e56dde2 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -2235,11 +2235,6 @@ runtime·sigprof(uint8 *pc, uint8 *sp, uint8 *lr, G *gp, M *mp) ((uint8*)runtime·gogo <= pc && pc < (uint8*)runtime·gogo + RuntimeGogoBytes)) traceback = false; - // Race detector calls asmcgocall w/o entersyscall/exitsyscall, - // we can not currently unwind through asmcgocall. - if(mp != nil && mp->racecall) - traceback = false; - runtime·lock(&prof); if(prof.fn == nil) { runtime·unlock(&prof); |
