У меня проблема с моей Hyper-V-Guest, системой SLES, на стандартном хосте Windows 2016. В Hyper-V я назначил этой машине 120000 МБ памяти. Но если я наберу free -m
в гостевой системе SLES я получаю следующий результат:
total used free shared buffers cached
Mem: 67961 2038 65923 219 11 807
-/+ buffers/cache: 1219 66742
Swap: 122879 0 122879
Итак, всего 66 ГБ ОЗУ.
Я пытался включить / выключить динамическую память, NUMA, изменил параметры NUMA, но безуспешно. В свое время больше памяти показывал free -m
, но после перезапуска у меня снова возникла та же проблема.
На хосте Windows выделяется память, поэтому, если я запускаю виртуальную машину (на этом хосте нет других виртуальных машин), я вижу, что используется 124/256 ГБ.
На данный момент у меня нет идей.
Изменить: я запустил машину Ubuntu в качестве гостя с теми же настройками, и он показывает правильный объем оперативной памяти. Я получил виртуальную машину SLES как образ vmWare и преобразовал дисковый файл в Hyper-V. Теперь я обновил систему SLES, которая заменила специфичное для vmWare ядро простым (если я правильно понял), но проблема все та же.
Иногда размещение вопроса в Интернете дает новые идеи.
В журнале Linux я обнаружил следующее сообщение:
dmesg | grep -i memory
WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losng 51008MB of RAM
Я не знаю, предоставляет ли Microsoft неисправный Hyper-V-BIOS, или Linux здесь ошибочен, или это комбинация обоих. Проблема в том, что MS-стек обновлен, и я не могу обновить ядро Linux, потому что для программного обеспечения, запущенного на виртуальной машине, нужна эта версия.
Решение: вместо увеличения оперативной памяти я уменьшил ее до 40 ГБ. Это не вызывает сообщение об ошибке Linux. Когда я запускаю бизнес-приложение, которое хочу запустить на виртуальной машине, Hyper-V динамически без проблем выделяет виртуальной машине больше памяти (в моем случае до 105 ГБ). Ура!