Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(6974)

Issue 14231047: code review 14231047: runtime: collect profiles even while on g0 stack (Closed)

Can't Edit
Can't Publish+Mail
Start Review
Created:
10 years, 6 months ago by brainman
Modified:
10 years, 6 months ago
Reviewers:
rsc
CC:
golang-dev, rsc
Visibility:
Public.

Description

runtime: collect profiles even while on g0 stack Fixes issue 6417

Patch Set 1 #

Patch Set 2 : diff -r f14c05d8145f https://go.googlecode.com/hg/ #

Patch Set 3 : diff -r 0408b08e6330 https://go.googlecode.com/hg/ #

Patch Set 4 : diff -r 5a1eb92621bf https://go.googlecode.com/hg/ #

Unified diffs Side-by-side diffs Delta from patch set Stats (+1 line, -1 line) Patch
M src/pkg/runtime/os_windows.c View 1 2 1 chunk +1 line, -1 line 0 comments Download

Messages

Total messages: 7
brainman
Hello golang-dev@googlegroups.com, I'd like you to review this change to https://go.googlecode.com/hg/
10 years, 6 months ago (2013-10-04 00:10:06 UTC) #1
rsc
LGTM
10 years, 6 months ago (2013-10-04 03:33:58 UTC) #2
brainman
*** Submitted as https://code.google.com/p/go/source/detail?r=2f4c2dde2756 *** runtime: collect profiles even while on g0 stack Fixes issue ...
10 years, 6 months ago (2013-10-04 03:53:41 UTC) #3
brainman
Russ, I don't have any problems with my computers here, but this has broken windows-amd64 ...
10 years, 6 months ago (2013-10-04 06:53:52 UTC) #4
brainman
I measured GetThreadContext execution time: diff --git a/src/pkg/runtime/os_windows.c b/src/pkg/runtime/os_windows.c --- a/src/pkg/runtime/os_windows.c +++ b/src/pkg/runtime/os_windows.c @@ -396,6 ...
10 years, 6 months ago (2013-10-07 06:35:53 UTC) #5
rsc
If you do gp != nil && gp->status != Gsyscall, does that help?
10 years, 6 months ago (2013-10-07 15:26:19 UTC) #6
brainman
10 years, 6 months ago (2013-10-08 02:38:33 UTC) #7
Message was sent while issue was closed.
On 2013/10/07 15:26:19, rsc wrote:
> If you do gp != nil && gp->status != Gsyscall, does that help?

It does not help. It makes no difference:

diff --git a/src/pkg/runtime/os_windows.c b/src/pkg/runtime/os_windows.c
--- a/src/pkg/runtime/os_windows.c
+++ b/src/pkg/runtime/os_windows.c
@@ -396,17 +396,22 @@
 	Context *r;
 	void *tls;
 	G *gp;
+	int64 ns;
+	extern int64 runtime·nanotime(void);
+	void *ret;
 
 	tls = mp->tls;
 	if(mp == &runtime·m0)
 		tls = runtime·tls0;
 	gp = *(G**)tls;
 
-	if(gp != nil) {
+	if(gp != nil && gp->status != Gsyscall) {
 		// align Context to 16 bytes
 		r = (Context*)((uintptr)(&rbuf[15]) & ~15);
 		r->ContextFlags = CONTEXT_CONTROL;
-		runtime·stdcall(runtime·GetThreadContext, 2, mp->thread, r);
+		ns = runtime·nanotime();
+		ret = runtime·stdcall(runtime·GetThreadContext, 2, mp->thread, r);
+		runtime·printf("runtime: gp=%p ret=%p time=%D\n", gp, ret, runtime·nanotime()
- ns);
 		runtime·dosigprof(r, gp);
 	}
 }

 C:\>u:\test.exe -test.v -test.run=Multi
=== RUN TestCPUProfileMultithreaded
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=15625000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=46875000
runtime: gp=0x10dae460 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=31250000
runtime: gp=0x620740 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=0
runtime: gp=0x620740 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=0
runtime: gp=0x620740 ret=0x1 time=0
runtime: gp=0x10dae5a0 ret=0x1 time=0
runtime: gp=0x10dae280 ret=0x1 time=0
runtime: gp=0x620740 ret=0x1 time=0
--- PASS: TestCPUProfileMultithreaded (0.69 seconds)
        pprof_test.go:129: crc32.ChecksumIEEE: 13
        pprof_test.go:129: crc32.Update: 17
PASS

Alex
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b