|
3 недель назад | |
---|---|---|
.. | ||
data | 3 недель назад | |
common.go | 3 недель назад | |
fast.go | 3 недель назад | |
go.mod | 3 недель назад | |
main_test.go | 3 недель назад | |
readme.md | 3 недель назад |
Есть функиця, которая что-то там ищет по файлу. Но делает она это не очень быстро. Надо её оптимизировать.
Задание на работу с профайлером pprof.
Цель задания - научиться работать с pprof, находить горячие места в коде, уметь строить профиль потребления cpu и памяти, оптимизировать код с учетом этой информации. Написание самого быстрого решения не является целью задания.
Для генерации графа вам понадобится graphviz. Для пользователей windows не забудьте добавить его в PATH чтобы была доступна команда dot.
Рекомендую внимательно прочитать доп. материалы на русском - там ещё много примеров оптимизации и объяснений как работать с профайлером. Фактически там есть вся информация для выполнения этого задания.
Есть с десяток мест где можно оптимизировать. Вам надо писать отчет, где вы заоптимайзили и что. Со скриншотами и объяснением что делали. Чтобы именно научиться в pprof находить проблемы, а не прикинуть мозгами и решить что вот тут медленно.
Для выполнения задания необходимо чтобы один из параметров ( ns/op, B/op, allocs/op ) был быстрее чем в BenchmarkSolution ( fast < solution ) и ещё один лучше BenchmarkSolution + 20% ( fast < solution * 1.2), например ( fast allocs/op < 10422*1.2=12506 ).
По памяти ( B/op ) и количеству аллокаций ( allocs/op ) можно ориентироваться ровно на результаты BenchmarkSolution ниже, по времени ( ns/op ) - нет, зависит от системы.
Параллелить (использовать горутины) или sync.Pool в это задании не нужно.
Результат в fast.go в функцию FastSearch (изначально там то же самое что в SlowSearch).
Пример результатов с которыми будет сравниваться:
$ go test -bench . -benchmem
goos: windows
goarch: amd64
BenchmarkSlow-8 10 142703250 ns/op 336887900 B/op 284175 allocs/op
BenchmarkSolution-8 500 2782432 ns/op 559910 B/op 10422 allocs/op
PASS
ok coursera/hw3 3.897s
Запуск:
go test -v
- чтобы проверить что ничего не сломалосьgo test -bench . -benchmem
- для просмотра производительностиgo tool pprof -http=:8083 /path/ho/bin /path/to/out
- веб-интерфейс для pprof, пользуйтесь им для поиска горячих мест. Не забывайте, что у вас 2 режиме - cpu и mem, там разные out-файлы.Советы:
Примечание: