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

Солнышко Ксения, ИТМО ФИТиП, M3332, stage 1 #11

Merged
merged 10 commits into from
Mar 3, 2024

Conversation

persehoney
Copy link
Contributor

No description provided.

Copy link
Contributor

@AlexeyShik AlexeyShik left a comment

Choose a reason for hiding this comment

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

first review
После дедлайна назначу финального ревьюера

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 5017 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 5017 lines exceeds the maximum allowed for the inline comments feature.

Copy link
Contributor

@AlexeyShik AlexeyShik left a comment

Choose a reason for hiding this comment

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

Сниму 1 балл за комментарий к коду. 14 баллов.
Понравился детальный поиск точки разладки с нагрузочным тестированием.
Хотелось бы пообсуждать профилирование. Будет круто соптимизировать dao, например, за счет аллокаций в flush.

@Override
public synchronized void stop() {
try {
dao.close();
Copy link
Contributor

Choose a reason for hiding this comment

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

Так как после закрытия dao сервер еще работает, селекторы все еще могут вызывать методы dao. В таких случаях будет UB, так как наше dao не рассчитано на работу после close.


### Профилирование под нагрузкой `PUT` запросами

Рассмотрим [flame graph для CPU](flame_graphs/put_cpu.html). Здесь у нас много CPU используется для обработки
Copy link
Contributor

Choose a reason for hiding this comment

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

В профиле довольно много времени занимает gc. Есть идеи, почему так?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

много аллоцируем объектов?

Рассмотрим [flame graph для CPU](flame_graphs/put_cpu.html). Здесь у нас много CPU используется для обработки
`PUT`-запроса: примерно поровну между методами `dao.upsert()` и `sendResponse()`.

Рассмотрим [flame graph для аллокаций](flame_graphs/put_alloc.html). Тут у нас нет такого большого и ярко-выраженного
Copy link
Contributor

Choose a reason for hiding this comment

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

Есть идеи по оптимизации числа аллокаций?
Например, 10% аллокаций приходятся на flush, что довольно много, ведь flush происходит редко, значит там единовременно большое число аллокаций. Можно ли от них избавиться?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

да, большое число аллокаций во flush связано с тем, что когда я сохраняю flushingStorage на диск, я подсчёт размера каждой Entry вынесла в отдельный метод в StorageUtils countEntrySize(), который возвращает пару из двух счётчиков размера. именно на аллокацию этой пары уходит много ресурсов. я заинлайнила этот метод в DistStorage.save() и количество аллокаций на flush() стало 4%

import java.lang.foreign.ValueLayout;
import java.nio.charset.StandardCharsets;

public class MyHttpServer extends HttpServer {
Copy link
Contributor

Choose a reason for hiding this comment

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

Еще надо добавить обработку исключений на случай непредвиденных серверных ошибок, чтобы это были 5хх

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 5017 lines exceeds the maximum allowed for the inline comments feature.

@AlexeyShik AlexeyShik merged commit 5fdebf4 into polis-vk:main Mar 3, 2024
2 checks passed
osokindm pushed a commit to osokindm/2024-highload-dht that referenced this pull request Mar 6, 2024
* Add dao

* Add server

* Fix failed tests

* Fix failed codeclimate

* Fix failed codeclimate

* Remove string template

* Resolve some problems

* Add scripts, report and attachments

---------

Co-authored-by: Alexey Shik <[email protected]>
axothy pushed a commit to axothy/2024-highload-dht that referenced this pull request Mar 13, 2024
* Add dao

* Add server

* Fix failed tests

* Fix failed codeclimate

* Fix failed codeclimate

* Remove string template

* Resolve some problems

* Add scripts, report and attachments

---------

Co-authored-by: Alexey Shik <[email protected]>
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