Назад | Перейти на главную страницу

iowait Bound Server - Расчет нагрузки и планирование процессов

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

Я обычно придерживался общего правила, согласно которому нагрузка на сервер <= # of_cores является идеальной, тогда как <= 2x #of_cores, как правило, не вызовет значительного снижения производительности, если не обслуживает рабочие нагрузки, чувствительные в реальном времени, но я не думаю, что это применимо в этом случае использования.

На приведенном ниже снимке экрана сверху вы видите, что я использую плохие блоки для 8 устройств, связанная нагрузка составляет ~ 8, что я понимаю, поскольку 8 процессов эффективно остановились в очереди из-за природы плохих блоков. Но только 2 ядра процессора связаны этими процессами. Итак, пара вопросов:

1.> Замедляю ли я тестирование плохого блока, пытаясь выполнить такое количество одновременных тестов, и если да, то почему он не использует доступные ядра?

2.> Я предполагаю, что эта в целом «неидеальная» загрузка процессора не повлияет на обслуживание других запросов, например, на данные, совместно используемые с других дисков на сервере? (при условии отсутствия узких мест на карте sas), потому что 2 ядра свободны и доступны правильно?

3.> Если 2 ядра могут поддерживать 8 процессов плохой блокировки без влияния друг на друга (как показано), иначе почему два процесса плохой блокировки используют одно ядро, а третье вызывает использование второго ядра, то планирование / оптимизация будет означать один предположить, что 8 процессов должны потреблять 3-4 ядра, а не 2 оптимально запланированных нет?

Платформа - Centos 7 | - | Процессор Intel e3-1220 v2 (четырехъядерный без гиперпоточности) | - | Дисковая полка подключается к серверу через внешний SAS HBA (без рейда)

top - 16:03:12 up 6 days, 15:21, 13 users,  load average: 7.84, 7.52, 6.67
Tasks: 171 total,   2 running, 169 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.3 us,  6.0 sy,  0.0 ni,  0.0 id, 93.6 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni, 95.7 id, 4.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  2.3 us,  3.0 sy,  0.0 ni,  0.0 id, 94.7 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7978820 total,  7516404 free,   252320 used,   210096 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used.  7459724 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
22322 root      20   0  122700   9164    832 D   3.3  0.1   18:36.77 badblocks
22394 root      20   0  122700   9164    832 D   1.3  0.1  15:52.98 badblocks
23165 root      20   0  122700   9152    820 D   1.3  0.1   0:36.94 badblocks
23186 root      20   0  122700   5792    808 D   1.3  0.1   0:02.54 badblocks
23193 root      20   0  122700   5004    768 D   1.3  0.1   0:02.17 badblocks
23166 root      20   0  122700   9152    820 D   1.0  0.1   0:36.11 badblocks
23167 root      20   0  122700   9148    820 D   1.0  0.1   0:39.74 badblocks
23194 root      20   0  122700   6584    808 D   1.0  0.1   0:01.47 badblocks

Средняя нагрузка и загрузка ЦП

Средняя нагрузка - это медленно изменяющийся показатель, приблизительно равный количеству выполняемых задач на ЦП. Кроме, На раннем этапе Linux решил также учитывать непрерывные задачи в надежде поймать нагрузку ввода-вывода. Нагрузка ниже количества процессоров определенно может выполнять больше задач, но рекомендуемый максимум не так очевиден.

Дисковый ввод-вывод в современных системах требует минимального использования ЦП. Итак, iowait почти простаивает. Такой низкий уровень системы User + указывает на то, что ЦП мало чем занимается в ожидании очень медленных шпинделей.

Параллельные задания для этой нагрузки

Не более одного плохого блока на физический шпиндель. Несколько устройств могут перемещаться по головке диска вперед и назад, что приведет к ужасной производительности.

Возможно, есть также узкое место в карте SAS или другом компоненте системы хранения. Когда вы видите пропускную способность ввода-вывода (возможно, через iotop) больше не увеличиваются, используйте меньше процессов. Или просто выберите 8 или около того за раз в качестве партии произвольного размера для параллельной работы (возможно, с GNU parallel).

Планирование задач

Планировщик задач оптимизируется для нескольких вещей. Даже в системе с несколькими процессорами сосредоточение внимания на нескольких ядрах может поддерживать данные в кэше в горячем состоянии, ограничивать количество бездействующих ядер для экономии энергии и при этом иметь возможность обрабатывать прерывания. Кроме того, следует учитывать особенности планирования NUMA и SMT, хотя этот ЦП не имеет этих функций.

В данном случае у вас два практически незанятых ядра. Я ожидал, что хозяин будет достаточно живым. Хотя, пока вы это делаете, не выполняйте больше работы. Ограниченная пропускная способность ввода-вывода и количество операций ввода-вывода в секунду могут привести к тому, что процессоры будут ждать, пока объем выполненной работы не увеличивается.