Виртуализация памяти - это механизм, который подменяет приложению реальные адреса оперативной памяти на выдуманные и сам решает, где физически лежат данные. Благодаря ей на одном сервере уживаются десять виртуальных машин, каждая из которых уверена, что вся выделенная память принадлежит только ей. Разберём, как это устроено, где даёт выигрыш и в каких случаях создаёт больше проблем, чем решает.
Идея не новая. Ещё в 1960-х инженеры IBM думали, как обойти физические ограничения оперативной памяти, которая тогда стоила безумных денег. Первые мейнфреймы использовали примитивные формы виртуализации, чтобы запускать программы, требующие больше памяти, чем было физически доступно.
Прорывом стала страничная организация памяти вместе со свопингом: операционные системы научились перекладывать данные между физической памятью и диском, показывая программе непрерывное адресное пространство. Программа ничего не замечала - и не должна была.
По-настоящему всё изменилось, когда тот же принцип применили не к одной программе, а к целой операционной системе. Гипервизор стал подсовывать «поддельную» память уже гостевой ОС, и на одном железе поехало несколько независимых машин. В 2000-х с ростом объёмов памяти и числа ядер это превратилось из компромисса в основной способ строить серверную инфраструктуру.
Приложение обращается к адресу 100, а его данные физически лежат по адресу 4728 - или вообще не в памяти, а на диске. Кто-то должен хранить это соответствие и переводить один адрес в другой на каждом обращении, миллионы раз в секунду.
Этим занимается MMU (Memory Management Unit) - блок внутри процессора. Он хранит таблицы страниц, где записано, какой виртуальный адрес какому физическому соответствует, и переводит адреса на лету. Для ускорения у MMU есть кеш последних переводов - TLB.
В виртуализации уровней перевода становится два. Гостевая ОС переводит адреса приложения в то, что она считает физической памятью, а гипервизор переводит эту «гостевую физическую» память в настоящую. Раньше двойную работу приходилось эмулировать программно, и стоила она дорого. Сейчас её взял на себя процессор: EPT у Intel и NPT у AMD делают вложенную трансляцию аппаратно, и накладные расходы упали до единиц процентов.
Половина путаницы вокруг темы возникает из-за того, что три разных механизма называют похожими словами:
| Виртуальная память | Виртуализация памяти в гипервизоре | RAM-диск | |
|---|---|---|---|
| Где живёт | в операционной системе | в гипервизоре | в операционной системе |
| Что делает | даёт каждому процессу своё адресное пространство, при нехватке выгружает страницы на диск | даёт каждой гостевой ОС своё «физическое» адресное пространство | превращает кусок оперативной памяти в файловую систему |
| Зачем | изоляция процессов и работа с памятью больше физической | несколько машин на одном железе | скорость доступа к временным файлам |
| Что будет при выключении | ничего, механизм служебный | ничего, механизм служебный | данные теряются |
| Нужен ли гипервизор | нет | да | нет |
Страничная организация и сегментация - это про первую колонку: способы, которыми операционная система нарезает и учитывает память. К гипервизору они отношения не имеют и работают одинаково хоть на виртуальной машине, хоть на голом железе. Вторая колонка - это вложенная трансляция адресов плюс приёмы вроде переподписки, ballooning, дедупликации одинаковых страниц и сжатия памяти. Какой гипервизор что из этого умеет, разобрано в материалах про типы гипервизоров и сравнение гипервизоров.
Физический сервер, отданный под одну задачу, почти всегда простаивает: пики нагрузки короткие, а память зарезервирована круглосуточно. С виртуализацией на то же железо садится несколько машин с несовпадающими пиками, и реальная утилизация растёт.
Считать выигрыш надо на своих цифрах - универсального коэффициента тут нет, он зависит от профиля нагрузки. Практический ориентир простой: снимите фактическое потребление памяти по каждой задаче за пару недель и сравните с тем, сколько под неё зарезервировано. Разница между этими числами и есть ваш потенциал консолидации.
Новая виртуальная машина поднимается за минуты вместо недель, которые ушли бы на закупку и монтаж физического сервера. Нагрузка спала - ресурсы уходят другим задачам.
Отсюда же вырастают сценарии, невозможные на голом железе:
Есть нагрузки, которым виртуализация памяти прямо помогает:
Ускоряет тут само размещение данных в памяти вместо диска - выигрыш на порядки. Виртуализация добавляет к этому гибкость: отдаёт память той задаче, которой она сейчас нужнее, и забирает у той, что простаивает.
Виртуализация памяти лежит в основе нескольких механизмов повышения доступности: живой миграции, снапшотов состояния, автоматического перезапуска машин на соседнем узле при отказе хоста.
Не путайте с этим зеркалирование памяти (memory mirroring) - это функция RAS самого сервера, к гипервизору отношения не имеющая. Контроллер дублирует данные между парами каналов внутри одной машины и при неисправимой ошибке переключается на резервную копию. Платить за это приходится половиной доступного объёма памяти. Между серверами такого механизма нет.
Виртуализация не бесплатна. Двойная трансляция адресов, работа гипервизора, промахи мимо TLB - всё это стоит процессорного времени. Ситуация сильно улучшилась с появлением аппаратной поддержки: на железе последних поколений с EPT или NPT потери на память измеряются единицами процентов, тогда как в эпоху программной эмуляции таблиц страниц счёт шёл на десятки.
Что осталось и никуда не денется:
Когда в виртуализированной среде что-то тормозит, источник проблемы находится не там, где заметен симптом. Гостевая ОС показывает, что памяти достаточно, а гипервизор в это время выгружает её страницы на диск. Без инструментов, которые видят обе стороны, диагностика превращается в гадание. Типовые узкие места и способы их находить разобраны в статье про узкие места в виртуализированной среде.
Переподписка (overcommitment) - это когда виртуальным машинам суммарно выдано больше памяти, чем физически есть на хосте. Расчёт на то, что одновременно всю выделенную память они не потребуют.
Механика ровно как у овербукинга в авиакомпаниях: билетов продают больше, чем мест, потому что часть пассажиров не приходит. Работает это до того дня, когда приходят все.
Что происходит, когда приходят все:
Коэффициент переподписки подбирают под конкретный профиль нагрузки, и это отдельный расчёт: он разобран в материале про то, сколько памяти выделить виртуальной машине.
Гипервизор добавляет к инфраструктуре уровень абстракции. Значит, больше компонентов, которые выходят из строя, выше требования к квалификации администратора и появляются проблемы совместимости между уровнями, которых на голом железе просто не бывает.
Хорошо работает:
Лучше обойтись без неё:
Перед тем как виртуализировать, стоит две недели последить за фактическим потреблением памяти каждой задачи и сравнить его с зарезервированным. Дальше решаются три вопроса: какой запас закладывать на пик, какой коэффициент переподписки допустим и что делать при отказе хоста. Подробный расчёт ресурсов под виртуальные машины - в отдельном разборе по ссылке выше; здесь важно другое: планирование делается до покупки железа, потому что память докупить в уже собранный сервер получается не всегда.
Про память под гипервизор есть одно правило, которое экономит нервы: берите ECC. Тихая ошибка в памяти хоста бьёт не по одной машине, а по всем гостям сразу, и проявится она непредсказуемо.
Чем серверная память отличается от обычной и где экономия оправдана, разобрано в статье про серверную память с ECC.
Аппаратная поддержка углубляется. EPT и NPT сняли основную часть накладных расходов на трансляцию адресов, IOMMU позволил отдавать устройства напрямую в виртуальные машины, появились механизмы быстрого переключения контекста. Разрыв между виртуализированной и физической системой продолжает сокращаться.
Энергонезависимая память как класс не взлетела. Intel Optane, на который в этой роли рассчитывали, свёрнут: развитие прекращено в 2022 году, поддержка модулей 100-й серии закончилась 30 июня 2025-го, отгрузки серверных модулей 300-й серии завершились в 2025-м. Планировать инфраструктуру на нём сегодня нельзя.
Направление, которое реально развивается, - CXL. Это шина, по которой память подключают через линии PCIe и собирают в общий пул между серверами. Спецификация CXL 4.0 вышла в ноябре 2025 года.
Трезвая оценка для нашего читателя: при покупке сервера в 2026 году CXL пока не критерий выбора. Задержка доступа к памяти через CXL заметно выше локальной DDR5 - порядка 110-150 наносекунд против 60-80, а на смешанной нагрузке разрыв доходит до 40-80%. Модули распределены между гиперскейлерами по прямым контрактам, на открытом рынке доступны в основном инженерные образцы. Тема стоит внимания, если вы упираетесь именно в объём памяти; в остальных случаях к ней стоит вернуться через поколение. Как устроена шина и что она обещает - в разборе про технологию CXL.
Виртуализация памяти давно перестала быть отдельным решением - это то, как сегодня устроен любой сервер под несколькими задачами. Вопрос стоит иначе: где проходит ваша граница переподписки и сколько физической памяти надо купить, чтобы за эту границу не выходить.
Практический вывод простой: считайте фактическое потребление, а не заявленные требования приложений; закладывайте запас на пик; не экономьте на ECC; и держитесь подальше от переподписки там, где приложение чувствительно к задержкам.
Чем виртуальная память отличается от виртуализации памяти?
Виртуальная память - механизм операционной системы: она даёт каждому процессу своё адресное пространство и при нехватке выгружает страницы на диск. Виртуализация памяти работает уровнем ниже: гипервизор даёт своё «физическое» адресное пространство каждой гостевой ОС. В виртуальной машине оба механизма работают одновременно.
Что такое MMU и зачем он нужен?
MMU (Memory Management Unit) - блок процессора, который переводит виртуальные адреса в физические по таблицам страниц. Без него каждая программа обращалась бы к памяти напрямую и могла бы затереть чужие данные.
Сколько производительности съедает виртуализация памяти?
На железе с аппаратной поддержкой (EPT у Intel, NPT у AMD) - единицы процентов. Основные потери сегодня дают конкуренция виртуальных машин за общие ресурсы и переподписка, а трансляция адресов почти перестала быть узким местом.
Стоит ли включать переподписку памяти?
На тестовых и разнородных средах - обычно да, это её основной сценарий. На продуктивных базах данных и приложениях, чувствительных к задержке, - нет. Коэффициент подбирается по фактическому потреблению, а не по выделенному объёму.
Нужен ли RAM-диск на сервере?
Это отдельная от виртуализации вещь: RAM-диск - файловая система в оперативной памяти, которая теряет данные при выключении. Годится под временные файлы и кеш сборки, под хранение данных - нет.
Сколько памяти закладывать под гипервизор?
Сам гипервизор потребляет немного, но резерв нужен: помимо гостей память уходит на служебные структуры и на запас под миграцию машин с отказавшего узла. Планировать хост в ноль по памяти - верный способ получить проблемы в момент, когда сосед по кластеру выйдет из строя.
Считаете, сколько памяти заложить в сервер под виртуализацию?
Инженеры ITTELO подберут конфигурацию под ваш профиль нагрузки и число виртуальных машин, соберут и протестируют платформу под задачу перед отгрузкой, с гарантией и поддержкой после продажи. На рынке серверов 11+ лет.
Сервер виртуализации купить · +7 (800) 551-80-12 · info@ittelo.ru