Skip to content

Commit 0042167

Browse files
committed
Update Readme
1 parent 9e53322 commit 0042167

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed

README.md

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
- Добиться того, чтобы программа корректно обработала файл `data_large.txt` за `30 секунд`;
1818
- Написать кейс-стади о вашей оптимизации по шаблону `case-study-template.md`.
1919

20+
Case-study должен получиться рассказом с техническими подробностями о том как вы пришли к успеху в оптимизации. Можно сказать, заготовкой статьи на Хабр/Medium/...
21+
2022
## Сдача задания
2123
Для сдачи задания нужно форкнуть этот проект, сделать `PR` в него и прислать ссылку для проверки.
2224

@@ -27,7 +29,7 @@
2729

2830
# Комментарии
2931

30-
## Какую пользу нужно получить от этого задания
32+
## Риски
3133
Задание моделирует такую ситуацию: вы получили неффективную систему, в которой код и производительность оставляет желать лучшего. При этом актуальной проблемой является именно производительность.
3234
Вам нужно оптимизировать эту систему.
3335

@@ -39,14 +41,24 @@
3941
Их риски:
4042
- перед рефакторингом “очевидных” косяков не написать тестов и незаметно внести регрессию;
4143
- потратить время на рефакторинг, хотя время было только на оптимизацию;
42-
- исправить все очевидные на глаз проблемы производительности, не получить заметного результата, решить что наверное просто Ruby слишком медленный для этой задачи
44+
- исправить все очевидные на глаз проблемы производительности, не получить заметного результата, решить что наверное просто Ruby слишком медленный для этой задачи, демотивироваться и разочароваться в попытках оптимизации
4345

4446
## Советы
4547
- Найдите объём данных, на которых программа отрабатывает достаточно быстро - это позволит вам выстроить фидбек-луп; если улучшите метрику для части данных, то улучшите и для полного объёма данных;
4648
- Попробуйте прикинуть ассимтотику роста времени работы в зависимости от объёма входных данных (попробуйте объём x, 2x, 4x, 8x)
4749
- Оцените, как долго программа будет обрабатывать полный обём данных
4850
- Оцените, сколько времени занимает работа GC (попробовав отключить его на небольшом объёме данных)
4951

52+
### Совет: как посчитать кол-во строк в файле
53+
```
54+
wc -l data_large.rb # (3250940) total line count
55+
```
56+
57+
### Совет: как создать меньший файл из большего, оставив перевые N строк
58+
```
59+
head -n N data_large.txt > dataN.txt # create smaller file from larger (take N first lines)
60+
```
61+
5062
## Что можно делать
5163
- рефакторить код
5264
- рефакторить/дописывать тесты
@@ -56,7 +68,7 @@
5668
- исследовать предложенную вам на рассмотрение систему
5769
- построить фидбек-луп, который позволит вам быстро тестировать гипотезы и измерять их эффект
5870
- применить инструменты профилирования CPU, чтобы найти главные точки роста
59-
- выписывать в case-study несколько пунктов: каким профилировщиком вы нашли точку роста, как её оптимизировали, какой получили прирост метрики;
71+
- выписывать в case-study несколько пунктов: каким профилировщиком вы нашли точку роста, как её оптимизировали, какой получили прирост метрики, как найденная проблема перестала быть главной точкой роста;
6072

6173
## Что не нужно делать
6274
- переписывать с нуля
@@ -70,27 +82,28 @@
7082
- как с помощью профилировщиков нашли что именно даст вам наибольший эффект (главную точку роста)
7183
- как быстро протестировали гипотезу, получили измеримый результат и зафиксировали его
7284
- как в итоге написали небольшой отчёт об успешных шагах этого процесса
73-
инструментов профилирования `CPU` и разъяснений, сделанных на 2й лекции.
7485

7586
## Checklist
76-
- Построить и проанализировать отчёт `ruby-prof` в режиме `Flat`;
77-
- Построить и проанализировать отчёт `ruby-prof` в режиме `Graph`;
78-
- Построить и проанализировать отчёт `ruby-prof` в режиме `CallStack`;
79-
- Построить и проанализировать отчёт `ruby-prof` в режиме `CallTree` c визуализацией в `QCachegrind`;
80-
- Профилировать работающий процесс `rbspy`;
81-
- Построить и проанализировать отчёт `flamegraph` с помощью `rbspy`;
82-
- Добавить в программу `ProgressBar`;
83-
- Постараться довести асимптотику до линейной и проверить это тестом;
84-
- Написать простой тест на время работы: когда вы придёте к оптимизированному решению, замерьте, сколько оно будет работать на тестовом объёме данных; и напишите тест на то, что это время не превышается (чтобы не было ложных срабатываний, задайте время с небольшим запасом);
87+
- [ ] Прикинуть ассимпотику зависимости времени работы програмы от размера обрабатываемого файла
88+
- [ ] Построить и проанализировать отчёт `ruby-prof` в режиме `Flat`;
89+
- [ ] Построить и проанализировать отчёт `ruby-prof` в режиме `Graph`;
90+
- [ ] Построить и проанализировать отчёт `ruby-prof` в режиме `CallStack`;
91+
- [ ] Построить и проанализировать отчёт `ruby-prof` в режиме `CallTree` c визуализацией в `QCachegrind`;
92+
- [ ] Построить дамп `stackprof` и проанализировать его с помощью `CLI`
93+
- [ ] Построить дамп `stackprof` в `json` и проанализировать его с помощью `speedscope.app`
94+
- [ ] Профилировать работающий процесс `rbspy`;
95+
- [ ] Добавить в программу `ProgressBar`;
96+
- [ ] Постараться довести асимптотику до линейной и проверить это тестом;
97+
- [ ] Написать простой тест на время работы: когда вы придёте к оптимизированному решению, замерьте, сколько оно будет работать на тестовом объёме данных; и напишите тест на то, что это время не превышается (чтобы не было ложных срабатываний, задайте время с небольшим запасом);
8598

8699
### Главное
87100
Нужно потренироваться методично работать по схеме с фидбек-лупом:
88101
- построили отчёт каким-то из профилировщиков
89102
- осознали его
90103
- поняли, какая самая большая точка роста
91104
- внесли минимальные изменения, чтобы использовать только эту точку роста
92-
- перестроили отчёт, убедились, что проблема решена
93105
- вычислили метрику - оценили, как изменение повлияло на метрику
106+
- перестроили отчёт, убедились, что проблема решена
94107
- записали полученные результаты
95108
- закоммитились
96109
- перешли к следующей итерации

case-study-template.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,22 @@
2828
Вот какие проблемы удалось найти и решить
2929

3030
### Ваша находка №1
31-
О вашей находке №1
31+
- какой отчёт показал главную точку роста
32+
- как вы решили её оптимизировать
33+
- как изменилась метрика
34+
- как изменился отчёт профилировщика - исправленная проблема перестала быть главной точкой роста?
3235

3336
### Ваша находка №2
34-
О вашей находке №2
37+
- какой отчёт показал главную точку роста
38+
- как вы решили её оптимизировать
39+
- как изменилась метрика
40+
- как изменился отчёт профилировщика - исправленная проблема перестала быть главной точкой роста?
3541

3642
### Ваша находка №X
37-
О вашей находке №X
43+
- какой отчёт показал главную точку роста
44+
- как вы решили её оптимизировать
45+
- как изменилась метрика
46+
- как изменился отчёт профилировщика - исправленная проблема перестала быть главной точкой роста?
3847

3948
## Результаты
4049
В результате проделанной оптимизации наконец удалось обработать файл с данными.
@@ -44,3 +53,4 @@
4453

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

0 commit comments

Comments
 (0)