Почему серверы не всегда работают на максимуме?

12

Это вопрос, который беспокоит меня некоторое время, и я не могу найти ничего в Интернете, что говорит об этом. У меня есть сервер под управлением VMware Hypervisor ESXi. Когда я загружаю на него виртуальные машины, они обычно загружаются за 2-3 минуты; не очень долго, но не мгновенно. Однако, когда я смотрю журналы производительности на сервере, ни загрузка процессора, ни ОЗУ, ни использование диска не составляют около 100%; обычно они составляют в среднем около 60% -80%. Итак, если у сервера есть работа, почему он не делает это на 100%?

Мне кажется, что в любой момент времени компонент, ограничивающий производительность, должен работать на 100%. Например, если у меня очень медленный жесткий диск, то он почти всегда должен работать на 100%. Поэтому, по крайней мере, одна из областей (процессор, ОЗУ, диск и сеть) всегда должна быть на 100%, если сервер не находится в состоянии полного простоя.

Почему это не так?

Ядро Stearns
источник
Старые дистрибутивы Linux, не основанные на systemd, не могли эффективно распараллелить запуск. * BSD все еще страдают от этого. Загрузите современный дистрибутив Linux и посмотрите, чем он отличается.
Майкл Хэмптон

Ответы:

18

Задержка будет одной из причин. Отставание между «диском дает мне эти данные, которые мне нужны, прежде чем я смогу сделать что-то еще», и временем, когда данные возвращаются, процессор на это время простаивает.

Ресурсы, вероятно, работают на 100%, но в течение очень коротких периодов. Загрузка операционной системы будет следовать общей схеме «обрабатывать или решать что-то, извлекать что-то с диска, делать что-то в памяти, делать что-то с устройством», повторяя это много раз в секунду. Поэтому, когда вы видите диск с 25% за 2 секунды, это, вероятно, означает, что он работал на 100% в течение 0,5 секунды, а затем простаиваете все остальное время.

Как отмечалось в EEAA, многоядерные системы делают это немного сложнее. Однопоточное программное обеспечение на процессоре, которое может выполнять четыре потока, может работать только на 25% на полной скорости. Даже многопоточное программное обеспечение редко достигает 100%, поскольку данные должны перетекать (обычно) с жесткого диска, в ОЗУ, в кэш-память и в ЦП. Поддерживать заполнение этого конвейера сложно, и обычно это происходит при предсказуемых рабочих нагрузках, таких как кодирование видео. В этом случае операционная система может наблюдать шаблоны чтения и извлекать данные до того, как они потребуются, помещая их в соответствующие кэши, такие как дисковый кэш в ОЗУ.

Тим
источник
16

Вы думаете об этом очень упрощенно, что заставляет вас делать некоторые неверные предположения, которые я попытаюсь прояснить.

Во-первых, и, возможно, наиболее просто, в многоядерной системе, чтобы понять использование ЦП, вы должны принять во внимание, является ли нагрузка на процесс многопоточной или рассчитана на использование преимуществ нескольких ядер. Если это не так, в зависимости от сочетания запущенных процессов, вы можете никогда не увидеть 100% использования. Когда-либо.

Во-вторых, вы должны учитывать производительность устройства ввода-вывода. Как ваша система узнает, например, на сколько IOps способны ваши устройства? Это не так. Более значимым показателем для вас является ваше iowaitзначение во время загрузки (которое может быть трудно получить во время процесса загрузки) или дисковые очереди / задержка во время загрузки (что должно быть проще получить от вашего гипервизора). Если вы видите очереди или всплеск задержки, скорее всего, ваши устройства ввода-вывода являются фактором, влияющим на ваши проблемы с производительностью.

EEAA
источник
11

Я работаю с сервером около 20 лет. Обычно это не очень хорошая вещь, когда компонент работает на все 100%.

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

Если ваша база данных имеет размер 24 ГБ, а ОС требуется 8 ГБ, вам не нужно выделять только 32 ГБ ОЗУ для машины, существует множество «вещей», которые могут работать неправильно, плохой код, DDOS, интенсивное использование приложений, кто знает, не имея свободного места, как вы узнали бы, что сервер в беде?

У нас около 2000 серверов в нашем дата-центре, нам нравится видеть, что все они работают примерно на 75% ЦП и ОЗУ, hhd-пространство находится в нашей SAN, так что это совершенно другой шарик воска. У нас также есть оповещения, когда они достигают 85% ЦП или ОЗУ, и оповещения, когда они достигают 90%.

Энтони Форнито
источник
Я думаю, что вы немного сбились с пути. Я сказал, что у меня виртуальные машины, поэтому существует постоянная нагрузка, которая сильно отличается от сервера базы данных, который запускается, когда он получает запросы и выделяет ресурсы. Меня больше беспокоило то, каким является ограничивающий фактор производительности, а не то, как эти ресурсы распределяются. Но спасибо за ответ!
Kernel Stearns