четверг, 10 июля 2008 г.

Особенности работы многопроцессорных ВМ

Лично для меня весьма интересная информация:

Введение: Вот у нас есть много процессорные ВМ. Например, возьмем граничный случай - ВМ с 4мя процессорами. Какая есть тонкость - гипервизор каждый vCPU будет помещать на отдельный lCPU(Logical CPU - под ним понимается одно ядро, одна очередь команд). И тут возникает потенциальное неудобство - если ВМ хочет поиметь один такт на одном своем процессоре, то гипервизор его предоставит из ресурсов соотв. lCPU. Но. Одновременно с этим тактом на одном lCPU, система должна будет выделить такты для всех прочих vCPU, вне зависимости от того, требуются они системе или нет. Таким образом, если у ESX хоста есть один и только один свободный lCPU, то многопроцессорная ВМ им воспользоваться не сможет. Или еще пример - есть хост, на нем 2 CPU c 1 ядром, ну или один двухъядерный камень. 2 однопроцессорные ВМ, и одна двухпроцессорная. Если возникнет ситуация, что обе однопроцессорные выполняются на одном из физических ядер\процессоров, и используют большую часть его тактов, то двухпроцессорная будет работать медленно, несмотря на свободное физическое ядро\процессор. Получается этакая фрагментация процессорных ресурсов.

Так вот, есть мнение, что все это неправда:
ESX, начиная с 3.х, умеет определять неиспользуемые такты vCPU, занятые под idle loop, и эти такты делает доступными прочим ВМ. И теперь необязательно выделять такты одновременно подо все vCPU, если не все из них реально загружены.

Источник - Multiple virtual CPU vm’s.
Первоисточник раз - ESX scheduler support for SMP VMs: co-scheduling and more, первоисточник два - Co-scheduling SMP VMs in VMware ESX Server.

0 коммент.:

Отправить комментарий