hw3_bench

command module
v0.0.0-...-ef7719e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 29, 2019 License: MIT Imports: 12 Imported by: 0

README

Задание на работу с профайлером pprof.

Есть функиця, которая что-то там ищет по файлу. Но делает она это не очень быстро. Надо её оптимизировать. Цель задания - научиться работать с pprof, находить горячие места в коде, уметь строить профиль потребления cpu и памяти, оптимизировать код с учетом этой информации. Написание самого быстрого решения не является целью задания. Для генерации графа вам понадобится graphviz. Для пользователей windows не забудьте добавить его в PATH чтобы была доступна команда dot. Рекомендую внимательно прочитать доп. материалы на русском - там ещё много примеров оптимизации и объяснений как работать с профайлером. Фактически там есть вся информация для выполнения этого задания. Есть с десяток мест где можно оптимизировать.

Для выполнения задания необходимо чтобы один из параметров (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) - нет, зависит от системы. Для этого задания увеличено количество проверок с 3-х до 5 за 8 часов.

Результат в 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 - для просмотра производительности

Советы:

  • Смотрите где мы аллоцируем память
  • Смотрите где мы накапливаем весь результат, хотя нам все значения одновременно не нужны
  • Смотрите где происходят преобразования типов, которые можно избежать
  • Смотрите не только на графе, но и в pprof в текстовом виде (list FastSearch) - там прямо по исходнику можно увидеть где что
  • Задание предполагает использование easyjson. На сервере эта библиотека есть, подключать можно. Но сгенерированный через easyjson код вам надо поместить в файл с вашей функцией
  • Можно сделать без easyjson

Примечание:

  • easyjson основан на рефлекции и не может работать с пакетом main. Для генерации кода вам необходимо вынести вашу структуру в отдельный пакет, сгенерить там код, потом забрать его в main

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL