У меня есть 2.8 четырехъядерный процессор i7 с VirtualBox. У меня есть возможность назначить до 4 ядер на гостевую машину, но я делаю только два. Каковы преимущества / недостатки назначения большего количества ядер гостю? Кстати, я все еще могу играть в StarCraft 2 на настройках Ultra все время, работая на двух гостевых ОС (Win 7 и Ubuntu), и то же самое касается BFBC2 (мои стресс-тестеры). Как i7 реагирует на неравномерную нагрузку на ядра?
2 ответа
"Виртуальные" ядра, которые вы назначаете виртуальной машине, доступны для многопроцессорной обработки в клиентской ОС. Если вы назначите только одно ядро для виртуальной машины, то гостевая ОС не сможет распределить нагрузку между несколькими ядрами. Итак, давайте предположим несколько практических сценариев:
Хост с 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 для четырехъядерных ...) в оптимальном случае. , Таким образом, многопоточность всегда обеспечивает большую мощность с точки зрения совокупной мощности процессора, чем однопоточность в сочетании с повышением тактовой частоты.
Я не углублялся в руководства на сайте VB, но я бы предположил, что распределение ядер на гостевой машине позволит гостевой ОС видеть несколько ядер и, таким образом, позволит приложениям, которые могут использовать эти дополнительные ядра, добавить дополнительную скорость / мощность / эффективность, такая же, как и для основной ОС.