Enthusiast
Enthusiast

Resource Allocation

Прочел несколько русских и зарубежных статей настройки Resourse Allocation, в том числе http://frankdenneman.nl/2009/12/impact-of-memory-reservation/ , в которой рассзкаывается как рассчитываются значения Limit Share Reservation. Судя из того, что понял, выходит что расчет идет следующим образом: из заданного количества (буду приводить пример на RAM) оперативки, 2Гб вычитам заданное количество зарезервированных ресурсов, 1Гб, а остальное рассчитываем исходя из параметра Share. Допустим у меня 2 пула ресурсов (кластеру выделено 3Гб RAM), и один пул настроен как Medium другой Low. В медиуме у меня 2 ВМ, следовательно каждой выделится по 1Гб RAM. Если я зарезервирую за одной из ВМ 500Мб RAMкак тогда будет происходить раскидка ресурсов:

я так понял остальные 1500Мб поделятся пополам и будет раскидывание 1250Мб у одной ВМ и 750Мб у другой

либо 500Мб это всего лишь число, которое будет выдано полюбому, а раскидывание так и останется 1к1

И ще сразу вопрос, что если назначить Limit той ВМ, у которой стоит Reservation в 600Мб, будет ли использоваться второй машиной вся оставшаяся память (1400Мб) или она не затронется?

My Blogs: http://www.vmworld5.ru/ || http://www.vsphere5.ru/
0 Kudos
29 Replies
Enthusiast
Enthusiast

  • Как созданы Пулы ресурсов (Reservation, Limit)?
  • Каковы настройки ВМ (сколько каждой ВМ выставлено памяти при создании)?
  • Во втором пуле есть ВМ?
  • В каком пуле какая и сколько ВМ находится?
  • Флаг Expandable Reservation установлен?
  • Под shares medium Вы понимаете shares Normal?

После этих важных уточнений можно будет более предметно ответить на Ваши вопросы.

------------- http://communities.vmware.com/blogs/Deshifrator
0 Kudos
Enthusiast
Enthusiast

Я брал приближенную ситуацию к реальности, на данный момент просто пытаюсь разобраться Smiley Happy

Тем не менее:

Предположим 2 пула ресурсов в кластере, в одном 2 ВМ, во втором 10ВМ. Пулам выданы все необходимые ресурсы, Expandable Reservation не стоит.

Первому пулы выдан параметр Share Low, второму High. Кластеру выделено 10Гб оперативной памяти и 15ГГц процессорной частоты. Обе машины в первом пуле изначально созданы с 4Гб оперативки. Да, medium-normal (ошибся Smiley Happy)

Reservation у одной из ВМ первого пула установлен в значении 500Мб. Мне интересно, каким образом будут распределены ресурсы в первом пуле для обоих ВМ (будет ли параметр Reservation считаться в расчете Share либо Share будет брать отношение у оставшейся памяти (сказано криво но думаю меня поймут  Smiley Happy ))

My Blogs: http://www.vmworld5.ru/ || http://www.vsphere5.ru/
0 Kudos
Commander
Commander

Давайте сначала про первый пул, забудем временно про второй.

Две машины, у каждой 4000 Мб (для простоты вычислений) "показанной" памяти. Если Shares установлено в Low, значит за каждый мегабайт памяти начисляется 5 единиц.

Итого у каждой из машин Shares = 20000, в сумме 40000. Каждая из машин имеет право на половину ресурсов в пуле (в случае их нехватки), поскольку они равноправны. И поэтому в данном случае не имеет значение, какое значение Shares у нас установлено: High или Low - все равно обе машины будут иметь право на равное количество ресурсов.

У первой машины, кроме того есть Reservation = 500 Мб.

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

Теперь у нас две ситуации: ресурсов хватает на всех и ресурсов НЕ хватает на всех.

Если обе машины активно потребляют меньше 6000 Мб памяти, то они получают ее столько, сколько им нужно, т.к. конкуренции за ресурс (память) нет.

Если потребление памяти увеличивается, например обе машины хотят потреблять все 4000 Мб, которые им "показаны", то начинается распределение ресурсов в соответствии с Shares. Т.к. в нашем примере Shares машин равны, то они обе имеют право на половину памяти в пуле, т.е. на 3000 Мб каждая. То, что у первой машины есть Reservation = 500 Мб в данном случае ничего не меняет, т.к. она и так имеет право на 3000 Мб. А вот если Reservation было бы равно, например 3500 Мб, то первой машине досталось бы именно 3500 Мб, а второй - оставшиеся 2500 Мб.

Чтобы дальше продолжить обсуждение предлагаю Вам дополнить картину данными о втором пуле ресурсов и распределению резервов в нем. Smiley Happy

Enthusiast
Enthusiast

Reservation – это память которая гарантирована достанется ВМ. Если памяти будет не хватать, то ВМ просто не запустится.

Допустим, что первый пул сконфигурирован следующим образом (относительно RAM):

  1. Resrvation 6Gb
  2. Limit - Unlimited
  3. Shares High

В пуле две ВМ. У каждой указано по 4Gb RAM. Shares у обеих ВМ Normal. У первой ВМ указан reservation 500mb.

Теперь расмотрим слудеющие ситуации:

  • ВМ1 кушает 2Гб, ВМ2 кушает 3Гб (2+3<6 - борьбы за ресурсы нет, Вм чувствуют себя комфортно)
  • ВМ1 кушает 4Гб, ВМ2 кушает 3Гб (4+3>6 - тогда первый пул будет отбирать ресурсы у второго для того чтобы удовлетворить потребности своих ВМ). Если бы у первого пула стоял Limit в 6gb, у ВМ1 shares high, у ВМ2 shares Normal, то первый пул нечего бы не отъедал у второго пула. А память между Вм распределялась в соответствии с shares.

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

------------- http://communities.vmware.com/blogs/Deshifrator
Enthusiast
Enthusiast

Спс, немного начал понимать Smiley Happy думал, что вначале начинается распределение ресурсов на основе Reservation параметра. Второй пул не суть важен, хотелось бы еще допонять про Limit. RumataRus, то есть в вашем примере, если вставить второй машине дополнительно Limit в 2Гб, значит ли это что остальные 4 полностью достанутся первой?

P.S.: еще не очень ясно, зачем вообще устанавливать в таком случае Limit для ВМ (не для пула ресурсов), ведь мы изначально устанавливаем так называемый "лимит" при создании ВМ (установка vCPU и RAM)

My Blogs: http://www.vmworld5.ru/ || http://www.vsphere5.ru/
0 Kudos
Expert
Expert

Alexaner wrote:

P.S.: еще не очень ясно, зачем вообще устанавливать в таком случае Limit для ВМ (не для пула ресурсов), ведь мы изначально устанавливаем так называемый "лимит" при создании ВМ (установка vCPU и RAM)

При установке "лимита" ВМ не получит физ.памяти больше этого значения. Остальное- своп.

0 Kudos
Enthusiast
Enthusiast

При установке "лимита" ВМ не получит физ.памяти больше этого значения. Остальное- своп.

А разве при установке в Edit Settings памяти и vCPU не такой же принцип работы? Всё что выше в своп

My Blogs: http://www.vmworld5.ru/ || http://www.vsphere5.ru/
0 Kudos
Expert
Expert

При привышении значения из Edit Settings (Hardware memory) будет использоваться файл подкачки в гостевой ОС. А при превышении Limit будет использоваться .vswp -файл подкачки ВМ. Я думаю так.

0 Kudos
Enthusiast
Enthusiast

Гипервизор не выделит ВМ памяти больше чем значение Limit. Поэтому ВМ не будет свопиться ( с условием что на сервере хватает RAM).

Если на хосте наблюдается нехватка памяти и reservation для ВМ не задано, то вполне возможно, что вся ВМ будет лежать в свопе. И значение Limit тут не причем.

------------- http://communities.vmware.com/blogs/Deshifrator
0 Kudos
VMware Employee
VMware Employee

рекомендую прислушаться к Skyrod.

Не забываем, что уровня подкачки у нас два - на уровне гостя и на уровне гипервизора (притом на уровне гипервизор их два Smiley Wink)

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

если гостю выделить 3 гигабайта (на вкладке hardware), все 3 гигабайта сделать reservation - то гипервизор выдаст все три этой ВМ.

внимание вопрос - означает ли это что она не будет свопировать?

Smiley Happy

-- http://www.vm4.ru/p/vsphere-book.html
0 Kudos
Enthusiast
Enthusiast

Чуть выше я писал про своп на уровне гипервизора.

По поводу Вашего вопроса: не означает )))

------------- http://communities.vmware.com/blogs/Deshifrator
0 Kudos
Expert
Expert

Deshifrator wrote:

Гипервизор не выделит ВМ памяти больше чем значение Limit. Cогласен, не выделит больше из физической памяти.Поэтому ВМ не будет свопиться Почему?? ( с условием что на сервере хватает RAM).

Если на хосте наблюдается нехватка памяти и reservation для ВМ не задано, то вполне возможно, что вся ВМ будет лежать в свопе. И значение Limit тут не причем. Limit не причем. Будет в свопе ОС. Заберет baloon (по дефолту до 65%)

P.S Привет землякам-дальневосточникам!)) А то думал я один такой)))

0 Kudos
Enthusiast
Enthusiast

По всей видимости, мы друг друга не поняли. Чуть выше я уже писал, но повторюсь: я все это время писал про своп со стороны гипервизора.

P.S.

Возможно, я что-то напутал. Но, как мне кажется, все, что я писал выше, если смотреть со стороны гипервизора, верно.

P.P.S.

Привет земляк!. Начинает образовываться «ДФО Сommunity»!!!

------------- http://communities.vmware.com/blogs/Deshifrator
0 Kudos
Expert
Expert

Михаил, напомните, что за второй файл подкачки на уровне гипервизора?

0 Kudos
VMware Employee
VMware Employee

memory compression

это не совсем файл, но с другой стороны это ram-диск под своп Smiley Happy

-- http://www.vm4.ru/p/vsphere-book.html
0 Kudos
Enthusiast
Enthusiast

Посмотрел видео. Интересная технология. Михаил спасибо.

------------- http://communities.vmware.com/blogs/Deshifrator
0 Kudos
VMware Employee
VMware Employee

я про все эти технологии как-то писал пост, не знаю читали нет.

-- http://www.vm4.ru/p/vsphere-book.html
0 Kudos
Commander
Commander

Alexaner wrote:

RumataRus, то есть в вашем примере, если вставить второй машине дополнительно Limit в 2Гб, значит ли это что остальные 4 полностью достанутся первой?

Если второй машине выставить Limit = 2000 Мб, то да, первой машине достанутся оставшиеся 4000 Мб, если она их действительно захочет потреблять.

Как другие коллеги уже отметили, гипервизор не даст виртуальной машине памяти больше значения Limit.

0 Kudos
Expert
Expert

Попался вот такой вот документ - http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=103311...

Заинтересовала фраза - "Depending on the amount of pages requested by the virtual machine, the VMkernel might, in the worst case scenario, resort to VMkernel swap to fulfil the request. The VMkernel first tries to reclaim memory by inflating the Balloon Driver to let the guest memory manager decide what to page out. In ESX 4.1, the VMkernel also tries to compress memory pages before swapping them out."

Получается, что при превышении лимита по памяти включается balooning, чтобы vmmemctl выбрал оптимальные страницы для переноса в VMkernel Swap ?

0 Kudos