Skip to content

Latest commit

 

History

History
60 lines (43 loc) · 4.3 KB

case-study-template.md

File metadata and controls

60 lines (43 loc) · 4.3 KB

Case-study оптимизации

Актуальная проблема

В нашем проекте возникла серьёзная проблема.

Необходимо было обработать файл с данными, чуть больше ста мегабайт.

У нас уже была программа на ruby, которая умела делать нужную обработку.

Она успешно работала на файлах размером пару мегабайт, но для большого файла она работала слишком долго, и не было понятно, закончит ли она вообще работу за какое-то разумное время.

Я решил исправить эту проблему, оптимизировав эту программу.

Формирование метрики

Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: время выполнения & использование памяти на момент завершения скрипта для инпута в 10к, 50к и 100к Значения до оптимизации: 10к - 34MB , 0.3s 50k - 42MB , 1.55s 100k - 56MB , 2.95s data_large - 528MB, 103s

Гарантия корректности работы оптимизированной программы

Программа поставлялась с тестом. Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации.

Feedback-Loop

Для того, чтобы иметь возможность быстро проверять гипотезы я выстроил эффективный feedback-loop, который позволил мне получать обратную связь по эффективности сделанных изменений за 5-10 секунд

Вот как я построил feedback_loop: создал несколько спеков для проверки перформанса на инпуте в 10к, 50к и 100к строк

Вникаем в детали системы, чтобы найти главные точки роста

Для того, чтобы найти "точки роста" для оптимизации я воспользовался memory_profiler, ruby-prof, stackprof & valgrind

Вот какие проблемы удалось найти и решить

Ваша находка №1

  • какой отчёт показал главную точку роста
  • как вы решили её оптимизировать
  • как изменилась метрика
  • как изменился отчёт профилировщика

Ваша находка №2

  • какой отчёт показал главную точку роста
  • как вы решили её оптимизировать
  • как изменилась метрика
  • как изменился отчёт профилировщика

Ваша находка №X

  • какой отчёт показал главную точку роста
  • как вы решили её оптимизировать
  • как изменилась метрика
  • как изменился отчёт профилировщика

Результаты

В результате проделанной оптимизации наконец удалось обработать файл с данными. Удалось улучшить метрику системы с того, что у вас было в начале, до того, что получилось в конце и уложиться в заданный бюджет.

Какими ещё результами можете поделиться

Защита от регрессии производительности

Для защиты от потери достигнутого прогресса при дальнейших изменениях программы о performance-тестах, которые вы написали