-
Notifications
You must be signed in to change notification settings - Fork 177
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cpu optimization #147
base: master
Are you sure you want to change the base?
Cpu optimization #147
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work!
Программа поставлялась с тестом. Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации. | ||
|
||
## Feedback-Loop | ||
Для того, чтобы иметь возможность быстро проверять гипотезы я выстроила эффективный `feedback-loop`, который позволил мне получать обратную связь по эффективности сделанных изменений за пару минут. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Пара минут 👌👌
- Пробовала оптимизировать ее | ||
- Проверяла, как изменилась метрика | ||
- Смотрела, изменился ли отчет профилировщика | ||
- Если да, сохраняла изменения |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
### sessions.select для поиска сессий конкретного пользователя | ||
- Видно на отчете `ruby-prof` (использовала принтер `Flat`) | ||
- Для оптимизации я добавила хэш `uid_to_sessions`, в который сразу добавляла сессии для конкретных пользователей при парсинге файла | ||
- Метрика выросла с 0.750 i/s до **5.980 i/s** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
я бы тут не советовал использовать ips
ips это больше для бенчмарков, когда что-то выполняется реально много раз в секунду
а у нас тут < 1 ips зачастую
end | ||
``` | ||
- Метрика выросла до **15.200 i/s**, а метрика для файла `data_large.txt` составила **0.033 i/s** | ||
- Метод `Date.parse` стал занимать меньше процентов в отчете профилировщика |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
с датой можно вообще ничего не делать, это пасхалочка
- Проблема перестала появляться в отчете профилировщика `ruby-prof` | ||
|
||
### Обновление массива users_objects с помощью метода + | ||
- Данная точка роста была обнаружена при помощи профилировщика `rbspy` (Появлялась только при прогоне программы на достаточно большом входном файле, файл `data_large.txt` до сих пор обрабатывался очень долго) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
лайк за rbspy; его киллер-фича что можно подключиться к работающему процессу и посмотреть где он там застрял
или можно например профилировать процесс пумы и посмотреть на что уходит основное время работы сервера в целом
Удалось улучшить метрику системы - количество итераций работы программы на файле `data3.txt` - c *0.750 i/s* до *20.820 i/s*, а количетсво итераций работы программы на файле `data_large.txt` до **0.042 i/s** и уложиться в заданный бюджет. | ||
|
||
## Защита от регрессии производительности | ||
Для защиты от потери достигнутого прогресса при дальнейших изменениях программы я добавила perfomance-тест `spec/task-1_spec.rb` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
|
||
describe 'Perfomance' do | ||
describe 'task 1' do | ||
it 'works under 30 seconds' do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
No description provided.