Виртуализация и изоляция: что такое и зачем нужно?
Синтетическое окружение
В каких случаях требуется моделировать окружение?
- Задачи, решаемые ОС: унификация, распределение и учёт ресурсов:
- при неполноценности ОС
- при несовместимых с ОС требованиях на унификацию, распределение и учёт
- Актуально недоступные окружения:
- Компьютер с другой архитектурой (эмуляция)
- Множество компьютеров вместо одного (стендовое масштабирование)
Общее свойство: пара hardware–software превращается в тройку hardware–environment–software.
Все эти задачи решались и до «эпохи виртуализации». Что изменилось? Одна из задач — унификация, распределение, учёт — должна решаться уровнем раньше, чтбы остальные решались независимо:
- Сначала унификация: «виртуальная машина», эмуляция аппаратуры
- Сначала распределение (ограничение): «гипервизор», полная недоступность «чужих» русурсов
- Сначала учёт: «виртуальный ресурс», использование означает обновление счётчика
Новая слоистая архитектура ОС.
Изоляция и виртуализация
Изоляция — манипуляция доступом к действительным ресурсам. Многое есть в Linux: права доступа, ACL, chroot. Но не всё, например, гарантированная изоляция root-а.
Виртуализация — создание синтетических ресурсов, после чего достаточно средств ОС. Нопример, SNES — эмулятор игровой приставки, картридж=файл, процессор=программа.
Понятия взаимоперетекающие: чаще всего имеет место паравиртуализация — смешение того и другого. Будем говорить о виртуализованном окружении (ve).
Инструменты паравиртуализации |
что могут |
чего не могут |
ОС Linux |
виртуальная память и права доступа |
Одноуровневое решение «трёх задач»; всё, что не запрещено, разрешено |
изоляция на уровне ФС |
отсутствие изоляции другими средствами (IPC, устройства) |
|
Изоляция на уровне любого взаимодествия (модификация ядра: процессы внутри одного коружения «не видят» процессов внутри других) |
Общие ресурсы |
|
Изоляция ФС и процессов + учёт и распределение памяти и времени по принципу «bean cunter» (с возможностью динамического перераспределения ресурсов) |
Общее ядро и аппаратная архитектура |
|
Linux и его API как «архитектура», процесс — ядро виртуального Linux для этой архитектуры; вирутальные диски и сеть; фактически, гиперфизор, изготоленный из Linux |
Накладки с производительностью: двойная буферизация и планировщик, нет нужной виртуальной аппаратуры (например, видеокарты) |
|
Микроядро [L4ka http://www.l4ka.org/] |
Гипервизор |
Ограничения при распределении и учёт должны бвть реализованы отдельно |
Гипервизор + статическое распределение и учёт виртуальных ресурсов; миграция ve между аппаратными узлами «на лету» |
Недостаточная поддержка динамического перераспределения ресурсов |
|
Виртуальная машина с прямым выполнением кода (с помощью поддержки в ядре) |
Единая архитектура всех ve |
|
«Чистый» эмулятор (QEmu, Skyeye, DOSBox, эмуляторы игровых компьютеров) |
Полностью виртуализованное окружение |
Сильное замедление работы |
Гипервизор — минимальная система распределения и учёта ресурсов, поверх которой запускаются ОС. Виртуальная машина — окружение, большая часть которого (память, внешние устройства) виртуализовано.
И XEN, и OVZ используют т. н. «аппаратную виртуализацию» новых процессоров.
Как использовать паравиртуализацию?
- Масштабирование
Много неазвисимых ve на одном узле
Перераспределение ve между узлами (прозрачное и даже «на лету»)
- Разделение привелегий
- «Проблема root»
- Проблема «локального и системного администраторов»
- Сериализуемость
Тонкая настройка и тестирование происходит один раз, внутри ve
После чего ve размножается без внутренних изменений (только стандартная перенастройка)
- Техподдержка 2-го уровня инженерно-операторского типа (дёшево и сердито)
Мета-дистрибутив: сборник ve по принципу «одна служба — один экземпляр ve» + интерфейс установки, настройки и упроавления