Каково влияние доли ЦП на потоки

Мой вопрос больше на уровне потоков Java. Но, вероятно, это может быть более общим для потоков уровня ОС.

JAVA SPECIFIC: какое значение имеет ThreadPool Tuning Size . (Формула)? Влияние на производительность и как она ведет себя под капотом, с контейнерами. (Я думаю, что могу понять наборы процессоров, но не общие ресурсы процессора, я знаю, что такое общие ресурсы процессора, просто не понял, как здесь ведет себя многопоточность).

Итак, я прочитал статью о java в контейнерах (которую я наблюдали при запуске приложений в CloudFoundary), 3 и улучшения, внесенные в JDK 10 для определения ограничений контейнеров.

В указанной статье:

Давайте кратко рассмотрим, как JVM приспосабливается к количеству процессоров/ядер, доступных на узле, на котором она работает. На самом деле существует ряд параметров, которые по умолчанию инициализируются на основе количества ядер. Таким образом, если нормальные значения по умолчанию для GC-потоков, JIT-потоков и т. д. — это общее количество доступных «ядер».

Сейчас если

number_of_cpus() будет рассчитываться на основе cpu_shares()/1024

Затем в сценарии, где, скажем, CPU-Share составляет 512. Этот расчет даст 0. (Тогда я предполагаю, что значение будет округлено до 1??). Как это работает тогда?


person Vipin Menon    schedule 05.10.2018    source источник


Ответы (1)


Да, оно будет округлено до 1.

Реализация находится под ./hotspot/os/linux/osContainer_linux.cpp и в основном выглядит так:

share_count = ceilf((float)share / (float)PER_CPU_SHARES);

где PER_CPU_SHARES = 1024 и доля соответствуют вашему примеру 512. Эта функция приведет к 1.

Я не очень уверен, что правильно понял вас с вашим редактированием, но cpu-share имеет значение, когда несколько контейнеров, работающих в одной и той же ОС, пытаются использовать 100% ЦП. Допустим, у вас есть 3 контейнера, в одном 1024, в двух других 512 доли процессора. Когда все трое из них попытаются получить 100% процессорного времени, произойдет следующее: 50% времени будет передано контейнеру с 1024 общими ресурсами, остальные получат по 25% каждый. ; но опять же это только тогда, когда процессор находится в 100%.

А теперь снова прочитайте этот JEP - он влияет только на потоки JIT/GC, а не на потоки вашего приложения; вы по-прежнему можете создавать столько потоков, сколько могли бы, поэтому, что бы ни предлагала эта статья, она по-прежнему действительна, контейнер или не контейнер.

person Eugene    schedule 05.10.2018
comment
На самом деле, мне было интересно узнать, как многопоточные приложения будут вести себя при совместном использовании ЦП. - person Vipin Menon; 05.10.2018
comment
Мне жаль, что нет. Я уточняю вопрос. - person Vipin Menon; 07.10.2018