«Виртуальные» ядра, которые вы назначаете виртуальной машине, доступны для многопроцессорной обработки в клиентской ОС. Если вы назначите только одно ядро для виртуальной машины, то гостевая ОС не сможет распределить нагрузку между несколькими ядрами. Итак, давайте предположим несколько практических сценариев:
Хост с 4 процессорами, гостю назначен 1 процессор
- Хост-машина с 4 физическими ядрами
- Клиентской ОС внутри ВМ назначено 1 ядро
В этом случае гостевая ОС сможет использовать только одно ядро. Поэтому, если вы запускаете многопоточное приложение, которое хорошо масштабируется на нескольких ядрах, оно все равно будет работать только на одном ядре. Поэтому все потоки в гостевой ОС должны совместно использовать одно физическое ядро.
Запуск гостевой ОС в этой настройке с полной загрузкой ЦП приведет к загрузке ЦП хост-ОС ~ 25% (одно из 4-х ядер, загруженных на хост).
Конечно, вы можете по-прежнему выполнять задачи, потребляющие ресурсы ЦП, в вашей хост-ОС и использовать оставшиеся 3 ядра.
Хост с 4 процессорами, гостевой 4 процессора
- Хост-машина с 4 физическими ядрами
- Клиентской ОС внутри ВМ выделено 4 ядра
В этом случае вы можете запускать хорошо масштабируемые многопоточные приложения в гостевой виртуальной машине, которые могут в полной мере использовать все 4 виртуальных процессора. VirtualBox будет использовать 4 физических ядра для обработки задач, запланированных на виртуальной машине, и, следовательно, загрузка ЦП вашего хоста может достигать максимально 100% использования.
Так какую настройку выбрать?
Ответ на этот вопрос во многом зависит от того, что вы хотели бы сделать. В некоторых случаях может быть полезно назначить все ядра одной виртуальной машине или даже запустить несколько виртуальных машин, каждому из которых назначено полное количество процессоров. В таких случаях виртуальная машина может в полной мере использовать всю вычислительную мощность хоста. Если виртуальным машинам назначено больше процессоров, чем реально имеется, то на виртуальные машины будет влиять нагрузка на другую виртуальную машину. Чтобы предотвратить это, вы можете выделить несколько ядер для конкретных виртуальных машин. Например, запуск 2 виртуальных машин с 2 процессорами, назначенными каждой на 4-х ядерном узле, может помочь в том, что каждая виртуальная машина получит 2 выделенных процессора (при условии, что хост-ОС не загружает нагрузку, которая также принимает участие в вычислительной мощности).
Имеет ли это негативное влияние на мой хост для назначения всех ядер на виртуальную машину?
Опять же, это зависит от запуска программного обеспечения. Если вы используете виртуальную машину, которая находится в режиме ожидания (программы с высокой загрузкой процессора не работают вообще), нагрузка, создаваемая этой виртуальной машиной, будет около 0%. Вы даже можете запустить 10 виртуальных машин параллельно и по-прежнему испытывать нагрузку на процессор хоста, близкую к 0%, если все виртуальные машины простаивают.
Как ведет себя процессор при неравномерной нагрузке?
Что ж, распределение нагрузки на процессор сильно зависит от встроенного в ОС компонента, называемого планировщиком. Для Windows XP планировщик попытался выполнить циклическую загрузку всех ядер процессора. Таким образом, выполнение однопоточной задачи с полной загрузкой на четырехъядерном процессоре привело бы к нагрузке ~ 25% на каждое ядро.
К сожалению, это оказалось плохо для современного управления питанием процессора. Для современных систем это даже преимущество, если одно одно ядро загружается до 100%, прежде чем второе ядро будет задействовано. Причина в том, что до тех пор, пока не будет достаточной нагрузки для полного использования одного ядра, другие ядра могут оставаться в режиме глубокого сна для экономии энергии и уменьшения рассеяния тепла.
Для некоторых процессоров, таких как Intel Core i-Series и более новых AMD (Bulldozer), это еще более интересно, поскольку в случае использования только подмножества ядер неиспользуемые отключаются. Это снижает энергопотребление процессора. Оба (Intel и AMD) начинают использовать бюджет потребления тепла и энергии, а затем разгонять активные ядра. Таким образом, это может дать толчок однопоточным приложениям (которые нельзя распределить по нескольким ядрам для параллельной работы над задачей). Однако, когда все ядра активны, большинство из этих «ускоренных» технологий оказывают лишь незначительное влияние на вычислительную мощность, поскольку ситуация «все ядра активны» - это именно та ситуация, для которой был разработан ЦП.
Таким образом, ответ заключается в том, что ваше ядро i7 отлично справляется с неравномерной нагрузкой на одноядерные и может даже повысить производительность однопоточных приложений. Однако этот прирост находится в пределах нескольких процентов, в то время как на самом деле многопоточные приложения, которые могут распределить нагрузку между несколькими ядрами ЦП, могут быть увеличены факторами (x2 для двухъядерных, 4x для четырехъядерных ...) в оптимальном случае , Таким образом, многопоточность всегда обеспечивает большую мощность с точки зрения совокупной мощности процессора, чем однопоточность в сочетании с повышением тактовой частоты.