ipld-eth-server/vendor/github.com/polydawn/refmt/allochound
Elizabeth Engelman 36533f7c3f Update vendor directory and make necessary code changes
Fixes for new geth version
2019-09-25 16:32:27 -05:00

54 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
### Normalize path -- all work should be relative to this script's location.
## Set up gopath -- also relative to this dir, so we work in isolation.
cd "$( dirname "${BASH_SOURCE[0]}" )"
export GOPATH="$PWD/.gopath/"
funcs=()
funcs+=("Benchmark_ArrayFlatIntToJson_Refmt")
funcs+=("Benchmark_ArrayFlatIntToJson_Stdlib")
funcs+=("Benchmark_ArrayFlatStrToJson_Refmt")
funcs+=("Benchmark_ArrayFlatStrToJson_Stdlib")
funcs+=("Benchmark_StructToJson_Refmt")
funcs+=("Benchmark_StructToJson_Stdlib")
profPath=".gopath/tmp/prof/" ; mkdir -p "$profPath"
go test -i .
export GODEBUG=allocfreetrace=1
while read -r -u3 -d' ' func; do
(go test \
-run=XXX -bench=$func \
-count=1
) 2> "$profPath/$func.allocfreetrace" | grep "^Benchmark_"
done 3< <(echo "${funcs[@]} ")
ls -lah "$profPath"/*.allocfreetrace
##
## Recommendations for extracting knowledge:
## - grep for 'refmt' lines with context ~8
## - you really want to get the 'tracealloc' lines in sight, because they list the object type being allocated in plain english
## - to find the beginning of a run, it's currently correct to grep for 'api.go', then find the start of pump.Run,
## then feed that line number back into a grep (where your first grep for refmt lines emits line numbers).
## - you'll see ~3 different line numbers from api.go; the least frequent is the start of Run.
## - grepping ", tok.Token)" is also valid, since we have succeeded at only allocating that once per Run
## (though actually it's a bit of a wonder to me that it doesn't stay on the stack).
##
##
## More generally: want:
## - foreach tracealloc line: that line
## - accept the following '^goroutine' line
## - skip lines matching '^runtime.' and '^t'
## - maybe keep the '^runtime.' lines, because they tell you if 'newObject' vs 'makeSlice'
## - accept two lines -- this is the proximate cause, call and source file.
## - you can probably discard the rest
##
##
## ALTERNATIVELY to all of this:
## just try '-gcflags -m' for things. Result is much shorter, much faster, much more to the point.
##