Вопрос или проблема
Я пытаюсь понять значение строки “some” в метрике PSI для CPU в Linux. Документация Linux (https://github.com/torvalds/linux/blob/master/Documentation/accounting/psi.rst) пишет:
Строка “some” указывает долю времени, в течение которого хотя бы некоторые задачи ожидают на определенном ресурсе
Моя интерпретация этого состоит в том, что любое время, в течение которого хотя бы одна задача может выполняться, но ей отказано в доступе к CPU, учитывается в метрике “some”.
Тем не менее, я наблюдаю нечто другое. У меня есть машина с 4 ядрами (cat /proc/cpuinfo | grep -c processor
равно 4). И у меня есть следующая программа:
#include <unistd.h>
#ifndef NUM_PROCS
#define NUM_PROCS 5
#endif
int main() {
for (int i = 0; i < NUM_PROCS - 1; ++i) {
pid_t pid = fork();
if (pid == 0) {
break;
}
}
while(1);
return 0;
}
С 5 задачами (NUM_PROCS=5), конкурирующими за 4 ядра, я ожидал, что метрика “some” будет близка к 100% все время (должна всегда быть исполняемая задача, ожидающая свободный CPU). Вместо этого я наблюдаю следующее:
$ cat /proc/pressure/cpu
some avg10=25.76 avg60=23.20 avg300=14.56 total=106289779
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
Кроме того, процент “some” растет с количеством заблокированных задач. С NUM_PROCS=7 (3 задачи заблокированы вместо 1), я вижу следующее:
$ cat /proc/pressure/cpu
some avg10=73.99 avg60=67.53 avg300=36.53 total=217437650
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
Что примерно в 3 раза больше, чем случай с NUM_PROCS=5.
Я не нахожусь в контейнерной среде, поэтому, как и ожидалось, “full” равно нулю.
Может ли кто-нибудь помочь мне понять, что представляют собой отчеты PSI CPU? Похоже, что это процент времени CPU, а не реальное время (я ожидал реальное время). Но если это так, я бы ожидал, что процент может превышать 100, но, похоже, это также не так (когда NUM_PROCS установлено на большее число, “some” PSI близок к 100).
Я думаю, что нашел ответ на свой вопрос в этой статье https://lwn.net/Articles/753840/. В частности:
Что делать с этим числом? Если загрузка CPU составляет 100%, а давление на CPU равно 0, это означает, что система идеально использована, с одной исполняемой нитью на CPU и никем не ожидающим. При двух или более исполняемых задачах на CPU система перегружена на 100%, и среднее давление будет это указывать. С точки зрения использования, это, конечно, отличное состояние: ни один цикл CPU не тратится впустую, даже когда 50% потоков могут уйти в простой (что в большинстве случаев варьируется). Однако с точки зрения отдельной задачи это не очень хорошо, и им может потребоваться больше ресурсов. В зависимости от вашей приоритетности, повышенное число “some” может или не может требовать действий.
Ответ или решение
Неожиданное поведение метрики PSI CPU в Linux: Понимание и интерпретация
В данной статье мы подробно рассмотрим поведение метрики "some" в контексте PSI (Pressure Stall Information) для CPU в Linux. Обсуждение будет полезно как для опытных системных администраторов, так и для разработчиков, стремящихся улучшить производительность своих приложений.
Что такое PSI?
PSI — это механизм в Linux, который предоставляет информацию о том, насколько ресурсы системы загружены и насколько сильно задачи "заложены" (stalled) из-за нехватки этих ресурсов. Метрика "some" в PSI для CPU отображает долю времени, в течение которого хотя бы одна задача была заблокирована в ожидании выделения CPU.
Ваше наблюдение
Ваше наблюдение о том, что метрика "some" иногда не достигает 100%, даже когда количество задач превышает доступные ядра, действительно может вызывать недоумение. Как вы правильно заметили, при наличии 5 процессов на 4 ядрах, метрика "some" должна быть близка к 100%, так как всегда есть хотя бы одна задача, ожидающая CPU.
Однако, поскольку вы увидели, что "some" метрика составляет 25-75% в зависимости от числа блокированных задач, это подчеркивает важный момент в понимании работы PSI.
Интерпретация метрики "some"
Ваше первоначальное предположение о том, что "some" измеряет время, когда хотя бы одна задача ожидает CPU, имеет смысл, но важно учитывать какова именно природа этих ожиданий.
-
Состояние загрузки: При увеличении количества активных процессов до 7, вы наблюдали рост "some", что обычно указывает на ухудшение конфигурации производительности, где несколько задач конкурируют за ограниченные ресурсы. Однако важно отметить, что не каждый процесс требует активного времени CPU.
-
Метрика в %": Процентное выражение метрики "some" учитывает не только время в ожидании, но и общий статус загрузки системы. Например, когда система перегружена (более одного рабочего потока на ядро), каждый идёт в ожидание, и времени их ожидания больше, чем в каждом из предыдущих случаев.
-
Неполное отображение загруженности: Если много задач блокируется в ожидании, но система всё еще может удовлетворять большинство из них, то общее время "some" остаётся ниже 100%. Это подтверждает ваше наблюдение о том, что "some" может не всегда расти до ожидаемого уровня.
Заключение
Как вы верно указали, PSI предоставляет ценную информацию о состоянии ресурса в системе, и "some" служит индикатором того, когда существует конкуренция за ресурсы. Однако метрика "some" не всегда может адекватно отражать общее состояние системы из-за динамичной природы задач и их взаимодействия с CPU.
Таким образом, высокие значения "some" могут быть сигналом для анализа и оптимизации производительности, но в то же время стоит учитывать контекст вашей системы и рабочей нагрузки, прежде чем делать выводы о необходимости изменений.
PSI — это мощный инструмент для понимания производительности системы, и эффективное использование этой информации требует как технического понимания, так и внимательного анализа специфических условий вашей системы и приложений.