Назад | Перейти на главную страницу

Безопасно ли для MaxMemory чрезмерное использование kvm / libvirt?

Использование Libvirt / KVM в Ubuntu 16.04

Compiled against library: libvirt 1.3.1
Using library: libvirt 1.3.1
Using API: QEMU 1.3.1
Running hypervisor: QEMU 2.5.0

# dpkg -s qemu-kvm | grep Version
Version: 1:2.5+dfsg-5ubuntu10.

Безопасно ли устанавливать "MaxMemory" (ссылка) над общей физической памятью хост-машины, если "currentMemory" никогда не превысит фактическую доступную память на хост-машине?

Представьте себе такую ​​ситуацию:

  1. Хост-машина имеет 8 ГБ ОЗУ
  2. На виртуальной машине установлено 16 ГБ MaxMemory и 4 ГБ currentMemory.

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

Цитата из указанной ссылки: "currentMemory" означает:

Фактическое выделение памяти для гостя.

Что, кажется, подразумевает настоящий предел использования памяти виртуальной машины - "currentMemory"; однако эта цитата:

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

... что относится к типу "MaxMemory", подразумевает "во время выполнения", может быть, он может использовать больше, чем currentMemory?

Может кто-нибудь пролить свет на это? Я как бы предполагаю, что все это работает, так это то, что KVM загружает виртуальную машину и сообщает ей, что у нее есть «MaxMemory», а затем вскоре после этого сообщает виртуальной машине, что она может использовать только «currentMemory». Я обеспокоен тем, что там может быть что-то вроде состояния гонки, когда виртуальной машине может быть разрешено быстро запросить «MaxMemory». Хотя я полагаю, даже если бы это было так, OOM Killer, скорее всего, просто убил бы процесс виртуальной машины на хост-машине.

Причина, по которой я хочу это сделать, заключается в том, чтобы я мог мигрировать в реальном времени на другие хосты, которые потенциально могут предоставить 16 ГБ «currentMemory», даже если это невозможно на хост-машине, на которой изначально настроена виртуальная машина.

Когда гость впервые загружается, он увидит, что объем оперативной памяти MaxMemory зарегистрирован, и теоретически может использовать его в это время. Когда загружается драйвер балуна в гостевой системе, он сокращает гостевую RAM до CurrentMemory. По крайней мере, для гостей Linux, гость никогда не будет фактически касаться всей оперативной памяти, разрешенной MaxMemory, до загрузки драйвера балуна, поэтому вы не должны рисковать из-за нехватки памяти на хосте. Некоторые гостевые ОС (по крайней мере, некоторые версии Windows) любят обнулять все страницы ОЗУ при запуске, что может привести к тому, что QEMU будет использовать всю MaxMemory. Кроме того, если в гостевой системе не загружен драйвер балуна, он никогда не уменьшит объем оперативной памяти до уровня CurrentMemory. Также, если гость является злонамеренным, он может отказаться от соблюдения уровня CurrentMemory, просто игнорируя всплывающие запросы.

По сути, если вы используете доверенную гостевую систему Linux и у вас есть драйвер воздушного шара в гостевой системе (он должен быть по умолчанию в любой современной ОС Linux), все будет в порядке.