Socket
Socket
Sign inDemoInstall

github.com/vadimpiven/vpn-from-scratch/reports/008/hw3_bench

Package Overview
Dependencies
1
Alerts
File Explorer

Install Socket

Detect and block malicious and high-risk dependencies

Install

    github.com/vadimpiven/vpn-from-scratch/reports/008/hw3_bench


Version published

Readme

Source

Задание на работу с профайлером 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

FAQs

Last updated on 29 Aug 2019

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc