virt-manager: разделение доступной памяти

У меня есть гипервизор, который использует kvm и virt-manager для обработки виртуальных машин.

У гипервизора 6 ГБ памяти.

Если я добавлю новую виртуальную машину, я не знаю, сколько память все еще свободна.

По крайней мере, в диалоговом окне virt-manager это не отображается:

enter image description here

Есть ли инструмент, который поможет мне найти соответствующее максимальное значение?

Пример:

  • Общий объем памяти хоста 6 ГБ
  • 2 ГБ отдано хосту host-one
  • ? ГБ для хоста «хост-два».

Выше приведен лишь простой пример. На наших реальных серверах у нас гораздо больше виртуальных хостов.

Я боюсь отдать слишком много памяти виртуальным хостам. Это приводит к сильному снижению производительности, если гипервизора слишком мало. Если бы я дал "хост-два" 4 ГБ, то гипервизор был бы "в огне", поскольку ему "нечем дышать".

Есть ли инструмент, который может помочь мне решить, сколько памяти доступно?

2
задан 28 April 2016 в 16:22
3 ответа

Как указано в связанной с вами документации Redhat о чрезмерном выделении памяти,

«Гостевые виртуальные машины, работающие на гипервизоре KVM, не имеют выделенных блоков физической памяти, назначенных им. Вместо этого каждая гостевая виртуальная машина machine функционирует как процесс Linux, где ядро ​​Linux физической машины хоста выделяет память только по запросу ».

Это, к сожалению, делает ситуацию определения того, сколько RAM вы можете / должны выделить каждому хосту, немного нечеткой. Одним из инструментов, который вы можете использовать для просмотра выделенной памяти среди виртуальных машин, является virsh и его команда freecell .

На странице руководства для virsh указано, что freecell: «Печатает доступный объем памяти на машины или в ячейке NUMA. Команда freecell может обеспечить одно из трех различных отображений доступной памяти на машине, в зависимости от указанных параметров .... "

Для гипервизоров на базе KVM вы можете использовать виртуальную машину команда оболочки ( virsh ) в терминале для входа в виртуальную оболочку - ваше приглашение должно измениться со значения по умолчанию на virsh # . Затем вы можете использовать команду list , чтобы отобразить список виртуальных машин на гипервизоре.

Чтобы отобразить объем памяти для каждой виртуальной машины (по ее номеру, указанному командой list ), используйте:

virsh # freecell <cell_number> 

Вы также можете передать флаг - all вместо номер ячейки, показывающий объем памяти, выделенной для каждой из виртуальных машин и для всей машины.

Это должно дать вам хорошее представление об общей памяти, с которой вы работаете, и о том, сколько выделено каждой виртуальной машине. Если вы решите изменить объем выделяемой памяти, virsh также предоставляет команду setmem для изменения распределения памяти для гостевого домена. Он похож на интерфейс, предоставляемый virt-manager, но предоставляет больше возможностей и гибкости. Вы можете найти все параметры и описания команд с помощью man virsh .

2
ответ дан 3 December 2019 в 09:59

Если вы хотите быть в безопасности и не перегружать память, альтернативой является включение огромных страниц на вашем хосте и использование их виртуальными машинами. Обратной стороной является то, что вам действительно нужно иметь всю необходимую память - память хоста и память виртуальной машины будут в основном разделены.

Вы можете лучше контролировать использование огромных страниц, если отключите анонимные огромные страницы (загрузитесь с transparent_hugepages = never ), а затем вы можете назначить такой большой пул огромных страниц, как вам нравится (загрузка с default_hugepagesz = 2M hugepagesz = 2M hugepages = 2560 для 5 ГБ памяти и оставив 1 ГБ для ОС хоста ).

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

<memoryBacking>
  <hugepages/>
</memoryBacking>

И чтобы ответить на ваш вопрос, если вы используете огромные страницы, на вопрос «сколько памяти» ответит grep ^ Huge / proc / meminfo . Вот пример с 60 ГБ, зарезервированным для виртуальных машин, и еще около 600 МБ.

> grep ^Huge /proc/meminfo
HugePages_Total:   30000
HugePages_Free:      304
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
1
ответ дан 3 December 2019 в 09:59

Вот моя хакерская версия. Мы приветствуем идеи, как это улучшить:

Перечислите объем ОЗУ в килобайтах, необходимый каждой виртуальной машине:

hypervisor5:~ # for dom in $(virsh list --all --name); do echo $(virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$/\1/p') $dom ; done| sort -n
524288 testfoo
2146304 x131
3121152 y114
3121152 foo
4096000 y123
4194304 mac-test
6144000 x123

Сумма ОЗУ, используемая виртуальными машинами

hypervisor5:~ # for dom in $(virsh list --all --name); do virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$/\1/p' ; done| awk '{s+=$1} END {print s}'
23347200

Доступная физическая виртуальная машина:

hypervisor5:~ # cat /proc/meminfo | grep MemTotal
MemTotal:       24797436 kB

Сколько осталось для работы ВМ:

hypervisor5:~ # python -c 'print 24797436-23347200'
1450236 (kiB)

... для гипервизора осталось не так много.

Опять же: Мы приветствуем идеи, как его улучшить!

1
ответ дан 3 December 2019 в 09:59

Теги

Похожие вопросы