У меня проблема с моей Hyper-V-Guest, системой SLES, на стандартном хосте Windows 2016. В Hyper-V я назначил этой машине 120000 МБ памяти. Но если я наберу free -m
в гостевой системе SLES, я получу следующий результат:
общее количество используемых бесплатных общих буферов кэшировано
Mem: 67961 2038 65923 219 11 807
- / + буферы / кеш: 1219 66742
Своп: 122879 0 122879
Итак, всего 66 ГБ ОЗУ.
Я попытался включить / выключить динамическую память, NUMA, изменил параметры NUMA, но безуспешно. В свое время free -m
показал больше памяти, но после перезапуска у меня снова возникла та же проблема.
На хосте Windows выделяется память, поэтому, если я запускаю виртуальную машину (на этом хосте нет других виртуальных машин), я вижу, что занято 124/256 ГБ.
На данный момент у меня нет идей.
Редактировать: Я запустил машину Ubuntu в качестве гостя с теми же настройками, и она показывает правильный объем ОЗУ. Я получил виртуальную машину SLES как образ vmWare и преобразовал дисковый файл в Hyper-V. Теперь я обновил систему SLES, которая заменила специфичное для vmWare ядро простым (если я правильно понял), но проблема все та же.
Иногда размещение вопроса в Интернете дает некоторые новые идеи.
Я нашел следующее сообщение в журнале Linux:
dmesg | grep -i память
ВНИМАНИЕ: ошибка BIOS: MTRR ЦП не покрывают всю память, потеряно 51008 МБ ОЗУ
Я не знаю, предоставляет ли Microsoft неисправный Hyper-V-BIOS, или Linux здесь ошибочен, или это комбинация обоих. Проблема в том, что MS-стек обновлен, и я не могу обновить ядро Linux, потому что эта версия требуется программному обеспечению, работающему на виртуальной машине.
Обходной путь: вместо увеличения ОЗУ я уменьшил его до 40 ГБ. Это не вызывает сообщения об ошибке Linux. Когда я запускаю бизнес-приложение, которое хочу запустить на виртуальной машине, Hyper-V динамически без проблем выделяет виртуальной машине больше памяти (в моем случае до 105 ГБ). Ура!