Найти в Дзене

Еще раз про Load Average и логические / виртуальные ядра

Сегодня в очередной раз столкнулся с неверным пониманием такого важного параметра, как Load Average. Уже неизвестно откуда пошла такая теория, что логические, а тем более виртуальные ядра искажают значение LA просто потому, что они «ненастоящие». Но она оказалась живучей и до сих пор бродит в IT-среде как призрак коммунизма. На самом деле это не так, потому что Load Average – это не физический параметр и тем более не показатель нагрузки на CPU или его производительности. Это относительное значение, показывающее доступность вычислительных ресурсов в системе. Мы знаем, что процессор выделяет каждому нуждающемуся в вычислениях процессу некоторое время, называемое тиком, в течении которого процесс получает доступ к вычислительным ресурсам ЦПУ. Если мы возьмем некоторое время, а при вычислении LA берется промежуток из 5000 тиков, то это самое количество тиков мы можем принять за 100% или единицу. Таким образом значение 1 для LA означает, что все тики были отданы процессам, но очереди

Еще раз про Load Average и логические / виртуальные ядра

Сегодня в очередной раз столкнулся с неверным пониманием такого важного параметра, как Load Average.

Уже неизвестно откуда пошла такая теория, что логические, а тем более виртуальные ядра искажают значение LA просто потому, что они «ненастоящие». Но она оказалась живучей и до сих пор бродит в IT-среде как призрак коммунизма.

На самом деле это не так, потому что Load Average – это не физический параметр и тем более не показатель нагрузки на CPU или его производительности.

Это относительное значение, показывающее доступность вычислительных ресурсов в системе.

Мы знаем, что процессор выделяет каждому нуждающемуся в вычислениях процессу некоторое время, называемое тиком, в течении которого процесс получает доступ к вычислительным ресурсам ЦПУ.

Если мы возьмем некоторое время, а при вычислении LA берется промежуток из 5000 тиков, то это самое количество тиков мы можем принять за 100% или единицу.

Таким образом значение 1 для LA означает, что все тики были отданы процессам, но очереди не возникло. А если LA = 0.25 – то это значит, что процессы использовали только четверть доступных тиков.

А если процессов больше, чем доступных тиков? Возникает очередь и LA начинает принимать значения выше единицы. При этом LA > 1 вовсе не означает недостатка именно процессорных ресурсов, процесс может не использовать свой тик по причине ожидания, например, дискового ввода вывода.

Таким образом тормозная дисковая подсистема также может сильно увеличить значение LA при фактическом простое процессора.

Корректно ли это? Да, корректно, так как процесс нуждается в вычислительных ресурсах, но не может их получить, по какой причине – это уже совсем отдельная история.

Что будет если мы добавим еще одно ядро, не важно физическое, логическое или виртуальное. У нас появятся еще 5000 тиков и полной нагрузке на систему будет соответствовать LA = 2.

Означает ли это, что производительность выросла вдвое? Нет. Производительность зависит от того, сколько операций за единицу времени может выполнить конкретное ядро.

Но теперь за одну и ту же единицу времени доступ к CPU получат уже не 5 000, а 10 000 процессов. А, как известно, лучше плохо ехать, чем хорошо стоять.

Таким образом максимальный LA всегда считается по количеству доступных системе ядер, а их происхождение неважно.

Читать далее