Open
Description
We see constant performance fluctuations after unrelated changes on the perf dashboard. For example: http://build.golang.org/perfdetail?commit=96c713ab6c6f2a4b2a8a0bb2e8d674637b6ce596&;commit0=fee5fcd5f87e75235d93fb297123feb15a59ae38&builder=linux-amd64-perf&benchmark=json http://build.golang.org/perfdetail?commit=455042166f1366b147e1249b8d5639be7d67bfce&;commit0=0a5fafdd2343b083457d0baf6487dfce0f01e25f&builder=windows-amd64-perf&benchmark=json http://build.golang.org/perfdetail?commit=ad5d9f8f9be743e72f89d85d8bd6348807bdac90&;commit0=fc588981a45afa430a2d2cd29d234403cb86e1bd&builder=windows-amd64-perf&benchmark=json I can reproduce it locally as well. I've took 2 consecutive commits: changeset: 21142:91110f70916a summary: runtime: allow crash from gsignal stack changeset: 21141:0768bb1fd027 summary: net: fix inconsistent behavior across platforms in SetKeepAlivePeriod and run go.benchmarks binary as: ./bench -bench=json -benchtime=3s -benchnum=100 alternating old and new binaries. The results are: GOPERF-METRIC:time=91998310 GOPERF-METRIC:time=91863644 GOPERF-METRIC:time=91491272 GOPERF-METRIC:time=91988322 new: GOPERF-METRIC:time=93191495 GOPERF-METRIC:time=93222905 GOPERF-METRIC:time=93224972 GOPERF-METRIC:time=93140395 The difference is now that big (probably because my processors panilizes less what is being penalized), but clearly observable. It looks like code alignment issue. Probably loops are not 16-byte aligned or something like this. I guess this also penalizes user binaries in the same random and unpredictable way.