Docker и Java - деградация производительности
От: elmal  
Дата: 09.11.17 12:11
Оценка:
Столкнулся с проблемой. Есть тяжелый расчет в памяти. Ввода вывода практически нет. Выполняется на локальной машине без виртуализации за 14 секунд. Задействованы вся ядра на 100%. Запускаю тоже самое в docker контейнере. Выполняется за 26 секунд, при этом ядра задействованы только на 60 процентов. А далее еще круче. Деплою это на наш kubernetes кластер. На конкретную ноду, специально под задачу. Там крайне мощный проц, в 2 раза больше ядер. Выполняется там все только за 80 секунд. Что за хрень, можно с этим что то сделать?
Re: Docker и Java - деградация производительности
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.17 13:28
Оценка:
Здравствуйте, elmal, Вы писали:

E>Столкнулся с проблемой. Есть тяжелый расчет в памяти. Ввода вывода практически нет. Выполняется на локальной машине без виртуализации за 14 секунд. Задействованы вся ядра на 100%. Запускаю тоже самое в docker контейнере. Выполняется за 26 секунд, при этом ядра задействованы только на 60 процентов. А далее еще круче. Деплою это на наш kubernetes кластер. На конкретную ноду, специально под задачу. Там крайне мощный проц, в 2 раза больше ядер. Выполняется там все только за 80 секунд. Что за хрень, можно с этим что то сделать?


Спрофилировать и посмотреть в каком месте тормозит. Загрузка процессора как бы намекает, что где то подвисает на каком то I/O.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Docker и Java - деградация производительности
От: scf  
Дата: 09.11.17 13:41
Оценка:
AVK>Спрофилировать и посмотреть в каком месте тормозит. Загрузка процессора как бы намекает, что где то подвисает на каком то I/O.

htop/iotop/iftop
Re[2]: Docker и Java - деградация производительности
От: elmal  
Дата: 09.11.17 14:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Спрофилировать и посмотреть в каком месте тормозит. Загрузка процессора как бы намекает, что где то подвисает на каком то I/O.

В том то и прикол что там нет IO вообще. Там тупо вычисления в памяти. Да еще и на примитивах зачастую, там весьма неслабо соптимизировано.
Re: Docker и Java - деградация производительности
От: Mihas  
Дата: 09.11.17 14:08
Оценка:
Здравствуйте, elmal, Вы писали:

А памяти хватает?
Ну, и предположение. Докер не является посредником при работе с памятью?
Re[3]: Docker и Java - деградация производительности
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.17 14:11
Оценка:
Здравствуйте, elmal, Вы писали:

AVK>>Спрофилировать и посмотреть в каком месте тормозит. Загрузка процессора как бы намекает, что где то подвисает на каком то I/O.

E>В том то и прикол что там нет IO вообще. Там тупо вычисления в памяти. Да еще и на примитивах зачастую, там весьма неслабо соптимизировано.

Значит все таки где то есть.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re: Docker и Java - деградация производительности
От: lpd Европа  
Дата: 09.11.17 16:16
Оценка:
Здравствуйте, elmal, Вы писали:

E>Столкнулся с проблемой. ... Выполняется там все только за 80 секунд. Что за хрень, можно с этим что то сделать?


Docker использует cgroups и может ограничивать загрузку процессора. Я бы покопал эти настройки.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Re: Docker и Java - деградация производительности
От: bzig  
Дата: 12.11.17 14:30
Оценка:
Здравствуйте, elmal, Вы писали:

E>Столкнулся с проблемой. Есть тяжелый расчет в памяти. Ввода вывода практически нет. Выполняется на локальной машине без виртуализации за 14 секунд. Задействованы вся ядра на 100%. Запускаю тоже самое в docker контейнере. Выполняется за 26 секунд, при этом ядра задействованы только на 60 процентов. А далее еще круче. Деплою это на наш kubernetes кластер. На конкретную ноду, специально под задачу. Там крайне мощный проц, в 2 раза больше ядер. Выполняется там все только за 80 секунд. Что за хрень, можно с этим что то сделать?


а докеру все CPU ресурсы выданы без ограничений?
Re[2]: Docker и Java - деградация производительности
От: elmal  
Дата: 13.11.17 11:33
Оценка:
Здравствуйте, bzig, Вы писали:

B>а докеру все CPU ресурсы выданы без ограничений?

ХЗ где это посмотреть. Смотрю главное на Kubernetes кластере. Там разные алгоритмы расчетов идут. Некоторый алгоритм грузит ядра на 100%. А некоторые ни черта — 60 процентов и хоть тресни. При этом локально — 100%, ну и выполняется шустрее в 2 раза. Ввода вывода никакого. Единственное отличие — когда идут тормозящие алгоритмы там идет random доступ к памяти. Собственно весь алгоритм там — бежим по здоровой таблице. На основании полей формируем хеш, по хешу достаем из нескольких других массивов, и далее складываем или перемножаем. Данных в памяти порядка 15 гигов. В теории подсистема памяти может не поспевать за процом, потому он и простаивает. Но не понятно какого черта все успевается без докера, а в докере на 50 процентов медленнее.
Re[3]: Docker и Java - деградация производительности
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.11.17 21:51
Оценка:
Здравствуйте, elmal, Вы писали:

E>Данных в памяти порядка 15 гигов. В теории подсистема памяти может не поспевать за процом, потому он и простаивает. Но не понятно какого черта все успевается без докера, а в докере на 50 процентов медленнее.


Так может дело в объеме памяти? Докер ее больше жрет, начинается своп, вот тебе и IO.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: Docker и Java - деградация производительности
От: elmal  
Дата: 16.11.17 04:13
Оценка: 76 (4) +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Так может дело в объеме памяти? Докер ее больше жрет, начинается своп, вот тебе и IO.

Поход да, разобрались. 2 проблемы было. Во первых там действительно своп оказался. Который вообще убил всю скорость. А во вторых — в докер образе был другой алгоритм сборки мусора — CMS. Переставил на G1, хоть и пошли паузы крайне значительные, но скорость пошла расчетная, все ядра загружены на 100 процентов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.