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

Тузиков Александр, ИТМО DWS, Stage 5 #170

Merged
merged 76 commits into from
May 10, 2024

Conversation

alexBlack01
Copy link
Contributor

@alexBlack01 alexBlack01 commented Apr 9, 2024

Отчет в директории result/stage5 report.md

Copy link

@codeclimate codeclimate bot left a comment

Choose a reason for hiding this comment

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

The PR diff size of 18918 lines exceeds the maximum allowed for the inline comments feature.

Copy link

@codeclimate codeclimate bot left a comment

Choose a reason for hiding this comment

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

The PR diff size of 18960 lines exceeds the maximum allowed for the inline comments feature.

@vladimir-bf vladimir-bf assigned incubos and unassigned vladimir-bf Apr 24, 2024
Copy link

@codeclimate codeclimate bot left a comment

Choose a reason for hiding this comment

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

The PR diff size of 18960 lines exceeds the maximum allowed for the inline comments feature.

Copy link

@codeclimate codeclimate bot left a comment

Choose a reason for hiding this comment

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

The PR diff size of 18960 lines exceeds the maximum allowed for the inline comments feature.

Copy link
Member

@incubos incubos left a comment

Choose a reason for hiding this comment

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

Есть существенные замечания и вопросы.

} else {
private CompletableFuture<Response> sendProxyRequest(HttpRequest httpRequest) {
return httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray())
.thenApplyAsync(this::processingResponse);
Copy link
Member

Choose a reason for hiding this comment

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

Может, явно указать Executor?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Да, согласен, что такой способ тоже хорош. Когда делал этап, очень много думал над этим. Что если мы не указываем явно, то тратим ресурсы на создание дефолтных каждый раз. И на лекции говорили, что, вроде, лучше делать пул экзекьюторов и потом отдавать их задачам.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Но, если пул будет переполнен, то тоже не очень хорошо же получится

Copy link
Member

Choose a reason for hiding this comment

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

Я про то, что без явного указания Executor непонятно, где исполняются callback'и, а мы точно не хотим исполняться на дефолтном, который используется для других сторонних нужд.

Comment on lines +48 to +49
В остальном ничего другого не заметил. Хотя, как мне казалось, должна была быть аллокация на дефолтный экзекьютор, так
как сам я их не создавал. Но этого не нашел.
Copy link
Member

Choose a reason for hiding this comment

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

Непонятно. Можете прояснить?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Я подходил с этим вопросом после окончания дедлайна. Говорил, что если мы не даем екзекьюторы, то они должны создаваться дефолтные у задачи (как я понял). А этого обнаружить не смогу. Вы мне потом пояснили, что там надо было через флаг смотреть. Что догадка верна моя

Copy link
Member

Choose a reason for hiding this comment

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

Не смог осознать ответ. Если мы не указываем Executor, то исполняться код может на разных (в т.ч. на дефолтном) в зависимости от готовности CompletableFuture. Аллокация -- это про память, а здесь речь о чём-то другом, видимо?

Comment on lines +70 to +77
50.000% 19.96s 14.93s
75.000% 24.76s 17.96s
90.000% 27.25s 23.90s
99.000% 28.48s 26.10s
99.900% 28.56s 26.33s
99.990% 28.57s 26.35s
99.999% 28.57s 26.35s
100.000% 28.57s 26.35s
Copy link
Member

Choose a reason for hiding this comment

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

Секунды нет смысла анализировать. Система явно перегружена.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

В случае с виртуалкой для меня было проблематично определять эти показатели, потому что и на секундах как-то пахало и на этом спасибо

Copy link
Member

Choose a reason for hiding this comment

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

Но здесь нечего анализировать и сравнивать в режиме перегрузки.


[get-profile-1th-cpu.html](get-profile-1th-cpu.html)

Аналогично, как и в случае с PUT запросами. Только немного другие пропорции.
Copy link
Member

Choose a reason for hiding this comment

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

Как можно объяснить изменение пропорций? Согласен, что наша система выполняет те же функции, но как объяснить изменение распределения ресурсов?

Copy link
Contributor Author

@alexBlack01 alexBlack01 May 4, 2024

Choose a reason for hiding this comment

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

Если в контексте с предыдущим этапом, то изменение пропорций произошло из-за появления новых асинхронных операций, ну и соответственно новые сэмплы также появились, как я понимаю.
Также если мы и добавили работы воркерам, именно что работу с фьючерами.

А если говорить именно между get и put, то думаю, что несколько причин может быть. Например, насколько была заполнена база при get запросах, насколько трудоемко они отрабатывали.

Copy link
Member

Choose a reason for hiding this comment

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

Хотелось бы увидеть больше конкретики по результатам анализа профилей вместо общих рассуждений про future.


[get-profile-1th-lock.html](get-profile-1th-lock.html)

Аналогично, как и в случае с PUT запросами. Только немного другие пропорции.
Copy link
Member

Choose a reason for hiding this comment

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

Хотелось бы увидеть объяснение изменения пропорций.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Тут также как и с предыдущим комментарием, все идет вокруг добавления работы с асинхронными задачами. Соответственно и появление новых сэмплов, которые отражают это.

Copy link
Member

Choose a reason for hiding this comment

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

Нужна конкретика -- что за методы появились, какую работу они выполняют, можно ли её устранить или она обоснована и т.д.

Comment on lines +100 to +101
- При добавлении логики асинхронной работы с CompletableFuture, соответсвенно выросла и трата ресуросв на работу с ними.
Соответсвенно, самыми показательными были LOCK фреймы.
Copy link
Member

Choose a reason for hiding this comment

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

Можно конкретнее, пожалуйста? В чём показательны LOCK фреймы?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Так как выросло количество блокировок. У сэмплов на 4 этапе в принципе не были видны java/util/concurrent/CompletableFuture$AsyncSupply.run, java/util/concurrent/ThreadPoolExecutor.getTask, jdk/internal/net/http/common/SequentialScheduler$SchedulableTask.run. А на 5 этапе, так как были добавлена работа с асинхронностью, мы видим, какие блокировки срабатывают на ожидание задач, на их получение. Также, что они занимают хоть и не большую, но все равно весомую часть нагрузки

Copy link
Member

Choose a reason for hiding this comment

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

Это всё достойно попадания в отчёт.

@incubos incubos removed the request for review from vladimir-bf May 10, 2024 15:58
Copy link

@codeclimate codeclimate bot left a comment

Choose a reason for hiding this comment

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

The PR diff size of 18960 lines exceeds the maximum allowed for the inline comments feature.

Copy link
Member

@incubos incubos left a comment

Choose a reason for hiding this comment

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

10 баллов.

@incubos incubos merged commit 0f68eb1 into polis-vk:main May 10, 2024
2 checks passed
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.

4 participants