Skip to content
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

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open

Conversation

dischglv
Copy link

@dischglv dischglv commented Jun 2, 2024

No description provided.

Copy link
Collaborator

@spajic spajic left a 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`, который позволил мне получать обратную связь по эффективности сделанных изменений за пару минут.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пара минут 👌👌

- Пробовала оптимизировать ее
- Проверяла, как изменилась метрика
- Смотрела, изменился ли отчет профилировщика
- Если да, сохраняла изменения
Copy link
Collaborator

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**
Copy link
Collaborator

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` стал занимать меньше процентов в отчете профилировщика
Copy link
Collaborator

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` до сих пор обрабатывался очень долго)
Copy link
Collaborator

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`
Copy link
Collaborator

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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants