Прочел несколько русских и зарубежных статей настройки 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Мб) или она не затронется?
После этих важных уточнений можно будет более предметно ответить на Ваши вопросы.
Я брал приближенную ситуацию к реальности, на данный момент просто пытаюсь разобраться
Тем не менее:
Предположим 2 пула ресурсов в кластере, в одном 2 ВМ, во втором 10ВМ. Пулам выданы все необходимые ресурсы, Expandable Reservation не стоит.
Первому пулы выдан параметр Share Low, второму High. Кластеру выделено 10Гб оперативной памяти и 15ГГц процессорной частоты. Обе машины в первом пуле изначально созданы с 4Гб оперативки. Да, medium-normal (ошибся )
Reservation у одной из ВМ первого пула установлен в значении 500Мб. Мне интересно, каким образом будут распределены ресурсы в первом пуле для обоих ВМ (будет ли параметр Reservation считаться в расчете Share либо Share будет брать отношение у оставшейся памяти (сказано криво но думаю меня поймут ))
Давайте сначала про первый пул, забудем временно про второй.
Две машины, у каждой 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 Мб.
Чтобы дальше продолжить обсуждение предлагаю Вам дополнить картину данными о втором пуле ресурсов и распределению резервов в нем.
Reservation – это память которая гарантирована достанется ВМ. Если памяти будет не хватать, то ВМ просто не запустится.
Допустим, что первый пул сконфигурирован следующим образом (относительно RAM):
В пуле две ВМ. У каждой указано по 4Gb RAM. Shares у обеих ВМ Normal. У первой ВМ указан reservation 500mb.
Теперь расмотрим слудеющие ситуации:
Так как много различных нюансов при работе с пулами, нужно ставить задачу более конкретно.
Спс, немного начал понимать думал, что вначале начинается распределение ресурсов на основе Reservation параметра. Второй пул не суть важен, хотелось бы еще допонять про Limit. RumataRus, то есть в вашем примере, если вставить второй машине дополнительно Limit в 2Гб, значит ли это что остальные 4 полностью достанутся первой?
P.S.: еще не очень ясно, зачем вообще устанавливать в таком случае Limit для ВМ (не для пула ресурсов), ведь мы изначально устанавливаем так называемый "лимит" при создании ВМ (установка vCPU и RAM)
Alexaner wrote:
P.S.: еще не очень ясно, зачем вообще устанавливать в таком случае Limit для ВМ (не для пула ресурсов), ведь мы изначально устанавливаем так называемый "лимит" при создании ВМ (установка vCPU и RAM)
При установке "лимита" ВМ не получит физ.памяти больше этого значения. Остальное- своп.
При установке "лимита" ВМ не получит физ.памяти больше этого значения. Остальное- своп.
А разве при установке в Edit Settings памяти и vCPU не такой же принцип работы? Всё что выше в своп
При привышении значения из Edit Settings (Hardware memory) будет использоваться файл подкачки в гостевой ОС. А при превышении Limit будет использоваться .vswp -файл подкачки ВМ. Я думаю так.
Гипервизор не выделит ВМ памяти больше чем значение Limit. Поэтому ВМ не будет свопиться ( с условием что на сервере хватает RAM).
Если на хосте наблюдается нехватка памяти и reservation для ВМ не задано, то вполне возможно, что вся ВМ будет лежать в свопе. И значение Limit тут не причем.
рекомендую прислушаться к Skyrod.
Не забываем, что уровня подкачки у нас два - на уровне гостя и на уровне гипервизора (притом на уровне гипервизор их два )
не забываем, что гость к себе может свопиться по своим соображениям, а может потому что его к этому принуждает гипервизор.
если гостю выделить 3 гигабайта (на вкладке hardware), все 3 гигабайта сделать reservation - то гипервизор выдаст все три этой ВМ.
внимание вопрос - означает ли это что она не будет свопировать?
Чуть выше я писал про своп на уровне гипервизора.
По поводу Вашего вопроса: не означает )))
Deshifrator wrote:
Гипервизор не выделит ВМ памяти больше чем значение Limit. Cогласен, не выделит больше из физической памяти.Поэтому ВМ не будет свопиться Почему?? ( с условием что на сервере хватает RAM).
Если на хосте наблюдается нехватка памяти и reservation для ВМ не задано, то вполне возможно, что вся ВМ будет лежать в свопе. И значение Limit тут не причем. Limit не причем. Будет в свопе ОС. Заберет baloon (по дефолту до 65%)
P.S Привет землякам-дальневосточникам!)) А то думал я один такой)))
По всей видимости, мы друг друга не поняли. Чуть выше я уже писал, но повторюсь: я все это время писал про своп со стороны гипервизора.
P.S.
Возможно, я что-то напутал. Но, как мне кажется, все, что я писал выше, если смотреть со стороны гипервизора, верно.
P.P.S.
Привет земляк!. Начинает образовываться «ДФО Сommunity»!!!
Михаил, напомните, что за второй файл подкачки на уровне гипервизора?
memory compression
это не совсем файл, но с другой стороны это ram-диск под своп
Посмотрел видео. Интересная технология. Михаил спасибо.
я про все эти технологии как-то писал пост, не знаю читали нет.
Alexaner wrote:
RumataRus, то есть в вашем примере, если вставить второй машине дополнительно Limit в 2Гб, значит ли это что остальные 4 полностью достанутся первой?
Если второй машине выставить Limit = 2000 Мб, то да, первой машине достанутся оставшиеся 4000 Мб, если она их действительно захочет потреблять.
Как другие коллеги уже отметили, гипервизор не даст виртуальной машине памяти больше значения Limit.
Попался вот такой вот документ - 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 ?