Я задал этот вопрос о SO, но мне предложили задать его здесь, в SF, так что вот оно.
https://stackoverflow.com/questions/3010753/wastage-of-resources-in-virtualization
Я не уверен, что это подходящее место, чтобы задать вопрос. Однако я надеюсь, что это так.
Сегодня, ища VPS, я пытался понять, как каждый контейнер будет работать в фоновом режиме. Принимая во внимание тот факт, что операционная система использует большую часть памяти и энергии в системе, наличие нескольких операционных систем на одной машине не будет означать большую потерю ресурсов.
Например, если я запускал CentOS на выделенном компьютере, и он работал, скажем, 20 фоновых процессов уровня ОС. Затем я устанавливаю платформу виртуализации и устанавливаю еще 5 виртуальных машин CentOS в той же системе, которые точно такие же, как и операционная система хоста. Разве это не означает 6-кратное дублирование этих 20 процессов? Значит, внутренне переключение контекста происходит между 120 процессами вместо 20?
Дополнительные примечания. Вот пример того, о чем я думаю: у меня есть конфигурация «главный-подчиненный» для длительного, интенсивного процесса с процессором + памятью, который может быть распределен на 4 машины. Допустим, когда процесс выполняется на этих 4 машинах с, скажем, 1 Gh CPU и 1 Gig RAM, я получаю 400 результатов в час от кластера (при условии 100 результатов с одной машины). Теперь у меня есть машина большего размера (скажем, 4Gh и 4 Gig RAM), на ней есть 4 виртуальных хоста с 1 Gz CPU и 1 Gig RAM. Будет ли эта конфигурация давать те же 100 результатов в час с этих 4 виртуальных хостов?
Во-первых, «тот факт, что операционная система использует большую часть памяти и энергии в системе», это далеко не факт, на самом деле очень далеко для большинства серверов.
Но отвечая на ваш вопрос: да, это означает, что все эти процессы продолжаются, но идея заключается в том, что с сегодняшними многоядерными процессорами одна ОС вряд ли может использовать все доступные ресурсы, так почему бы не использовать ее для виртуализации. Если у вас один старый процессор, то он наверняка все замедлит, но в большинстве случаев это не так.
Большинство процессов на гостевых машинах почти все время находятся в спящем состоянии. Вы можете проверить, сколько процессов спит, с помощью команды ps. В современных гипервизорах дублированные страницы памяти распределяются между виртуальными машинами с помощью технологии, называемой KSM в Linux. У VMware то же самое. В наши дни не уверен в Hyper-V.
В общем, виртуализация имеет накладные расходы, но не так много, как вы думаете.
Я вижу, что на часть вашего вопроса, касающуюся следа ОС, уже был дан ответ в SO, поэтому я остановлюсь здесь только на соображениях производительности.
Вы не получите точно так же уровень производительности. Однако я не могу с уверенностью сказать, будет ли производительность лучше или хуже.
Да, даже при сегодняшней современной аппаратной и аппаратной виртуализации, все еще возникают определенные накладные расходы. Однако эти накладные расходы с каждым днем становятся все меньше и уже могут быть незначительными для конкретного использования.
С другой стороны, следуя вашему примеру с четырьмя машинами, на которых запущен распределенный процесс, существует гораздо больше переменных, которые могут повлиять на производительность. Например, может случиться так, что четыре узла должны активно общаться друг с другом о том, что они делают. В этом случае вы можете увидеть, как скорость и время отклика этих коммуникаций увеличиваются, если четыре машины работают на одной аппаратной машине (с использованием какого-либо сетевого взаимодействия между виртуальными машинами). А это может повысить производительность всего процесса.
В качестве другого примера предположим, что процесс очень интенсивно использует сеть. Если у вас есть четыре физических компьютера, на которых выполняется процесс, у всех будет собственная сетевая карта. Но если у вас есть четыре виртуальных машины, работающих на одном сервере (при условии, что на сервере есть только одна сетевая карта), виртуальным машинам потребуется общий доступ к одной сетевой карте. При равной пропускной способности для каждой сетевой карты в обоих случаях это снизит производительность.
Вкратце: в основном все зависит от доступных ресурсов и от того, насколько интенсивно используется каждый тип ресурса.