Использование более 4Гб оперативной памяти в 32 битных гостевых операционных системах

в 15:00, , рубрики: виртуализация, высокая производительность, системное администрирование, тюнинг, метки: ,

Использование более 4Гб оперативной памяти в 32 битных гостевых операционных системах
Не секрет, что 32 битные операционные системы не позволяют адресовать более 4Гб оперативной памяти. Сейчас я вам хочу рассказать как это ограничение можно косвенно обойти в виртуальной среде, где есть полноценный доступ к хостовой операционной системе.

Собственно, цель достаточно ясна – это позволить гостевой x32 операционной системе использовать помимо «честных» 4Гб оперативной памяти еще какое-то количество, которое можно безболезненно выделить из доступной.

Для начала опишу краткий план достижения цели, а потом рассмотрим детали и реализацию. Но сразу оговорюсь, что данный способ, конечно же, не позволит операционной системе «увидеть» больше памяти, чем она может это себе позволить, но вот использовать ее незаметно для себя она будет.

Начнем

Исходные данные:

  • Host: Ubuntu 12.04 x64, RAM 8Gb
  • VM: VMware Player 4.0.4
  • Guest: Windows XP SP3 x32, RAM 3Gb

Дополнительную оперативную память будем «выделять» необычным способом, для этого создадим vmdk диск и расположим его в оперативной памяти хост системы. Созданный диск подключим к гостевой системе. Для начала полноценного использования дополнительной оперативной памяти останется только переместить на этот диск файл подкачки. Кроме переноса файла подкачки можно перенастроить некоторые программы на хранение своих кэшей или временных файлов в этой «оперативной памяти», но это уже зависит от ее объема.

Некоторые детали

  • Размер создаваемого vmdk диска можно рассчитать следующим образом:
    (ОЗУ доступная хост системе) — (ОЗУ переданная VM) — k
    где k – это минимальное необходимое количество ОЗУ для работы хост системы.
  • Так как vmdk диск должен располагается в оперативной памяти, то его следует туда помещать, как минимум, каждый раз после загрузки системы
  • Так как I/O операции в оперативной памяти достаточно быстры, нет необходимости создавать preallocated (т.е. с заранее выделенным местом) файл vmdk диска.
  • Желательно, чтобы конфигурация файла подкачки содержала минимальный и максимальный его размер, приблизительно равный объему созданного vmdk диска. Этот размер будет немного отличаться от указанного объема при создании vmdk, так как часть места займет файловая система и служебная информация самой системы.
  • Для размещения vmdk файла в оперативной памяти нужно эту память подготовить для доступа к ней из файловой системы.
  • В большинстве случаев при использовании такого тюнинга уже нельзя будет воспользоваться функцией «Suspend» в vmplayer.

Интересный факт: если vmdk диск был сделан не preallocated (т.е. «резиновый»), а файл подкачки был настроен так, как описано выше, то есть максимального и фиксированного размера, то, несмотря на то, что файл подкачки займет все пространство vmdk диска, в хосте этот vmdk файл будет занимать места почти так же, как и до переноса на него файла подкачки. Естественно, это не может не порадовать, так как гостевая система будет использовать дополнительную оперативную память по мере необходимости, правда, только в сторону увеличения.

А теперь пошаговая инструкция для конфигурации описанной выше

  1. Конфигурируем хостовую файловую систему, так чтобы через нее получить доступ ко всей оперативной памяти. Для этого в файл /etc/fstab нужно добавить, такую строку:
    tmpfs /run/shm tmpfs size=8G 0 0
  2. Создаем однофайловый, не preallocated vmdk диск. Указываем размер 3Gb и сохраняем его в /run/shm с именем ramtemp.vmdk. После создания отключаем кеширование записи на этом диске.
  3. Загружаем виртуальную машину. Создаем на появившемся в гостевой системе диске основной раздел, форматируем его и метим его, как ramtemp. Монтируем его в предварительно созданную папку c:ramtemp. Да, да, в Windows так тоже можно делать, это когда вместо выбора буквы диска выбирается пункт «Подключить том как пустую NTFS папку». Подключение в папку делается, чтобы не плодить в системе лишние неиспользуемые «буквенные диски». Так же следует отключить индексирование этого диска в его свойствах. После этого виртуальную машину выключаем.
  4. Далее, подготовленный /run/shm/ramtemp.vmdk копируем в папку с целевой виртуальной машиной и переименовываем в ramtemp.vmdk.new. Делается это для того, чтобы случайно не подключить этот диск к виртуальной машине и не начать использовать. Этот диск необходим всегда в своем первозданном виде, чтобы занимал свой минимальный объем.
  5. Для всех последующих запусков виртуальной машины нужно создать скрипт, который будет автоматически перед запуском копировать чистый ramtemp.vmdk в виртуальную память и запускать виртуальную машину. Например, он может быть таким:
    #!/bin/sh
    cp /home/vm/workstation/ramtemp.vmdk.new /run/shm/ramtemp.vmdk
    vmplayer /home/vm/workstation/workstation.vmx 
  6. Снова запускаем виртуальную машину и перемещаем файл подкачки в «оперативную память». Для этого переходим в ветку реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management и меняем путь к файлу подкачки на c:ramtemppagefile.sys в параметре PagingFiles. После все сделанного выше нужно перезагрузить гостевую ОС.

После выполнения всех шагов можно считать вашу виртуальную машину официально прокачанной.

Автор: BanderasPRO

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js