All results are based on my patch against the sweet benchmarks.
- baseline is HEAD^ with tracing disabled.
- gentraceback is HEAD^ with tracing enabled (
-trace
). - fpcallers is HEAD with tracing enabled (
-trace
).
From 08b6b8208c07c3f764da8a8fbbc01d0b1573748a Mon Sep 17 00:00:00 2001 | |
From: =?UTF-8?q?Felix=20Geisend=C3=B6rfer?= | |
<[email protected]> | |
Date: Fri, 10 Mar 2023 11:04:19 +0100 | |
Subject: [PATCH] runtime: use sched.bp for unwinding trace events with frame | |
pointers | |
Depends on CL 472195. | |
Change-Id: Ibe91debf04569d18ccb2eb6497bfebdd1eaeaf74 |
$ go tool compile -S main.go | |
main.main STEXT size=64 args=0x0 locals=0x8 funcid=0x0 align=0x0 | |
0x0000 00000 (main.go:3) TEXT main.main(SB), ABIInternal, $16-0 | |
0x0000 00000 (main.go:3) MOVD 16(g), R16 | |
0x0004 00004 (main.go:3) PCDATA $0, $-2 | |
0x0004 00004 (main.go:3) CMP R16, RSP | |
0x0008 00008 (main.go:3) BLS 40 | |
0x000c 00012 (main.go:3) PCDATA $0, $-1 | |
0x000c 00012 (main.go:3) MOVD.W R30, -16(RSP) | |
0x0010 00016 (main.go:3) MOVD R29, -8(RSP) |
All results are based on my patch against the sweet benchmarks.
-trace
).-trace
).package main | |
import ( | |
"bytes" | |
"compress/gzip" | |
"io" | |
"os" | |
"testing" | |
) |
$ curl 'http://169.254.169.254/latest/meta-data/instance-type' | |
c6g.metal | |
$ go version | |
go version go1.19.3 linux/arm64 | |
$ go test -run='^$' -cpu=1,2,4,8,16,32,64 -bench . -count=30 -timeout=0 | tee bench.txt | |
$ benchstat bench.txt | tee benchstat.txt |
diff --git a/src/runtime/pprof/pprof_test.go b/src/runtime/pprof/pprof_test.go | |
index 1947edf44a..f474036ccf 100644 | |
--- a/src/runtime/pprof/pprof_test.go | |
+++ b/src/runtime/pprof/pprof_test.go | |
@@ -1435,49 +1435,25 @@ func TestLabelSystemstack(t *testing.T) { | |
// Two conditions to check: | |
// * labelHog should always be labeled. | |
// * The label should _only_ appear on labelHog and the Do call above. | |
- for _, s := range p.Sample { | |
+ _true, _false := true, false |
{"version":0,"package":"main","goos":"darwin","goarch":"amd64","gc_version":"go1.17.2","file":"/Users/felix.geisendoerfer/go/src/github.com/felixge/dump/inline-test/main.go"} | |
{"range":{"start":{"line":5,"character":6},"end":{"line":5,"character":6}},"severity":3,"code":"canInlineFunction","source":"go compiler","message":"cost: 59"} | |
{"range":{"start":{"line":9,"character":6},"end":{"line":9,"character":6}},"severity":3,"code":"cannotInlineFunction","source":"go compiler","message":"function too complex: cost 88 exceeds budget 80"} | |
{"range":{"start":{"line":11,"character":15},"end":{"line":11,"character":15}},"severity":3,"code":"escape","source":"go compiler","message":"\"Hello World\" escapes to heap","relatedInformation":[{"location":{"uri":"file:///Users/felix.geisendoerfer/go/src/github.com/felixge/dump/inline-test/main.go","range":{"start":{"line":11,"character":15},"end":{"line":11,"character":15}}},"message":"escflow: flow: ~arg0 = \u0026{storage for \"Hello World\"}:"},{"location":{"uri":"file:///U |
{ | |
"flameExplain": "Go to flame-explain.com and paste this JSON in the Input tab.", | |
"input": { | |
"plan": "[\n {\n \"Plan\": {\n \"Node Type\": \"Function Scan\",\n \"Parallel Aware\": false,\n \"Function Name\": \"generate_series\",\n \"Schema\": \"pg_catalog\",\n \"Alias\": \"generate_series\",\n \"Startup Cost\": 0.00,\n \"Total Cost\": 10.00,\n \"Plan Rows\": 1000,\n \"Plan Width\": 4,\n \"Actual Startup Time\": 194.503,\n \"Actual Total Time\": 331.185,\n \"Actual Rows\": 1500000,\n \"Actual Loops\": 1,\n \"Output\": [\"generate_series\"],\n \"Function Call\": \"generate_series(1, 1500000)\",\n \"Shared Hit Blocks\": 0,\n \"Shared Read Blocks\": 0,\n \"Shared Dirtied Blocks\": 0,\n \"Shared Written Blocks\": 0,\n \"Local Hit Blocks\": 0,\n \"Local Read Blocks\": 0,\n \"Local Dirtied Blocks\": 0,\n \"Local Written Blocks\": 0,\n \"Temp Read Blocks\": 0,\n \"Temp Written Bloc |
{ | |
"flameExplain": "Go to flame-explain.com and paste this JSON in the Input tab.", | |
"input": { | |
"plan": "[\n {\n \"Plan\": {\n \"Node Type\": \"Function Scan\",\n \"Parallel Aware\": false,\n \"Function Name\": \"generate_series\",\n \"Schema\": \"pg_catalog\",\n \"Alias\": \"generate_series\",\n \"Startup Cost\": 0.00,\n \"Total Cost\": 10.00,\n \"Plan Rows\": 1000,\n \"Plan Width\": 4,\n \"Actual Startup Time\": 194.503,\n \"Actual Total Time\": 331.185,\n \"Actual Rows\": 1500000,\n \"Actual Loops\": 1,\n \"Output\": [\"generate_series\"],\n \"Function Call\": \"generate_series(1, 1500000)\",\n \"Shared Hit Blocks\": 0,\n \"Shared Read Blocks\": 0,\n \"Shared Dirtied Blocks\": 0,\n \"Shared Written Blocks\": 0,\n \"Local Hit Blocks\": 0,\n \"Local Read Blocks\": 0,\n \"Local Dirtied Blocks\": 0,\n \"Local Written Blocks\": 0,\n \"Temp Read Blocks\": 0,\n \"Temp Written Bloc |
// Example program showing that signal delivery from setitimer ends up in | |
// "random" threads of the executing program. | |
#include <sys/time.h> | |
#include <unistd.h> | |
#include <signal.h> | |
#include <pthread.h> | |
#include <stdio.h> | |
#include <stdlib.h> |