Привет!
Несколько дней назад я впервые столкнулся с бенчмарками в go и сделал практическое занятие для своего класса. Если вы используете Windows + WSL Ubuntu для Golang, мой опыт будет полезен для вас.
Я столкнулся с парой проблем с компонентами, давайте поговорим об этом.
Отсутствие Graphvis для pprof
Я создал свой первый профиль
$ go test -bench=BenchmarkGetDomainStat -cpuprofile=cpu -memprofile=mem
$ go tool pprof -http="localhost:8080" cpu
Serving web UI on http://localhost:8080
Failed to execute dot. Is Graphviz installed?
exec: "dot": executable file not found in $PATH
Graphviz отсутствует. Погуглите, нам нужно установить graphviz:
$ sudo apt install graphviz gv
Если у вас возникают сбои, как у меня:
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/g/ghostscript/ghostscript-x_9.26~dfsg+0-0ubuntu0.18.04.15_amd64.deb 404 Not Found [IP: 91.189.91.38 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
просто обновите и повторите:
$ sudo apt-get update
$ sudo apt install graphviz gv
Вау! У вас есть graphviz и pprof, готовые показать вам крутые графики.
Нет benchstat
Я установил Go 1.17.1 и забыл обо всем. Но в случае с бенчмарками я хочу сравнить два результата:
$ benchstat benchmarks/00 benchmarks/01
benchstat: command not found
WTF? По умолчанию бенчстат не установлен, давайте это исправим:
$ go get golang.org/x/perf/cmd/benchstat
go: downloading golang.org/x/perf v0.0.0-20220722155240-3d85ee92886d
go get: added golang.org/x/perf v0.0.0-20220722155240-3d85ee92886d
Также go get сообщает мне об устаревании и предлагает использовать ‘go install’. Хорошая идея, чтобы попробовать в следующий раз.
Теперь проверим результат:
$ benchstat benchmarks/00 benchmarks/01
name old time/op new time/op delta
GetDomainStat-8 1.15s ±75% 0.36s ±11% -69.05% (p=0.000 n=10+10)
Круто, benchstat доступен, и мои оптимизации работают хорошо.
Надеюсь, мой гугл будет полезен и сэкономит несколько минут для вас, мои дорогие суслики Windows WSL!