Сколько потоков для приложения kubernetes? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть многопоточное приложение, которое выполняет нагрузку на процессор, которую я хочу запустить в Kubernetes. Узел, который я использую, имеет 56 ядер, и я установил запрос и ограничение в 2 ядра для моего модуля.

Поскольку он интенсивно использует процессор, обычно нет смысла иметь больше потоков, чем число ядер (с гиперпоточностью, возможно, в два раза больше потоков, чем ядер), поэтому я бы выделил 2-4 потока и вызвал бы это день.

Тем не менее, AFAIK, Kubernetes, не гарантирует сродства ядра, поэтому в худшем случае 2 ядра могут быть равномерно распределены по 56 ядрам, при этом каждое ядро ​​будет работать в 2/56 раз параллельно. , Если это произойдет, и я выделю только 4 потока, то по крайней мере 52 из 56 ядер будут простаивать.

Если я правильно понимаю, эта проблема не уникальна для Kubernetes и относится к любой виртуализированной среде, где аппаратные ресурсы являются общими.

Какова наилучшая практика, когда речь идет о возможном наихудшем сценарии? Вы игнорируете это и предполагаете, что у вас высокая местность, или вы планируете худшее, или что-то среднее?

1 Ответ

1 голос
/ 05 апреля 2020

Планирование потоков зависит от ОС, включая сходство, kubernetes обычно не влияет на это. Если это важно для вашей рабочей нагрузки - вы можете попробовать Static policy в k8s, чтобы получить эксклюзивные ядра ЦП для вашего приложения.

Вы можете использовать ограничение CPU под pod 56 и запустить 56 потоков, чтобы использовать все ядра узлов. Предполагая, что все другие модули на этом узле используют правильные запросы ЦП, это не должно отрицательно влиять на другие модули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...