Виртуализация и виртуальные машины

План курса.

Введение.

    Определения и общие понятия.
    Виртуализация как парадигма.
    Обзор курса.

Управление вычислительными ресурсами.

    Ресурсы как инварианты вычислительной системы.
    Ресурсно–агностическое прикладное программирование.
    Высокоуровневое управление вычислениями через управление ресурсами.

Потребность в виртуализации.

    Соображения системной сложности.
    Скорость программирования vs. скорость исполнения, требования промышленности.
    Обратная совместимость.
    Компромисс сложности и универсальности реализации.
    Производительность.

Концепция виртуальной машины и гипервизора.

    Необходимость в универсальном, настраиваемом и контролируемом контексте исполнения.
    Код или данные - прикладной и системный уровни.
    Создание виртуального компьютера с заданными требованиями на существующем аппаратном обеспечении.

Типичные компоненты ВМ.

    Исполнитель инструкций целевой машины.
    Менеджер памяти.
    Стандартизированный контекст исполнения.

    • модель конкурентного исполнения.
    • системные библиотеки.
    • эмуляция аппаратных устройств.
    • Соображения изоляции и безопасности.

Виртуализация набора инструкций реальных компьютеров.

    Все машины Тьюринга равны, но…
    Требования производительности и безопасности (критерии Попека–Голдберга).

Менеджеры памяти.

    Сборщики мусора
    Задачи сборщика

    • создание мусора (выделение памяти).
    • обнаружение мусора (неиспользуемой памяти).
    • сборка мусора (освобождение памяти).

    Важные моменты реализации

    • трассирующие сборщики или счётчики ссылок.
    • гипотеза поколений, поколения объектов.
    • компактифицирующие сборщики.
    • гарантии на длительность сборки.

    Примеры реальных сборщиков.

    • простой mark-and-sweep.
    • сборщики с поколениями (generational collectors).
    • сборщики с регионами (G1).

Устройства управления физической памятью (MMU) и их использование в виртуализованном окружении.

    Задача трансляции виртуальных адресов в физические. Таблица страниц, кэш трансляции (TLB).
    Аппаратные MMU: организация трансляции, на примере процессоров x86, теневые таблицы страниц, вложенные таблицы страниц.
    Программные MMU (на примере Sparc).
    Сложности реализации: инвалидация кэша трансляции, особенно на многопроцессорных системах (TLB shootdown), поддержание согласованного состояния таблиц страниц.

Изоляция исполняемых компонент.

    Общие соображения: что разделять, а что нет.
    Изоляты.
    Стратегии доступа к общим ресурсам.

Реализация исполняющей компоненты виртуальной машины на современных компьютерах.

    Интерпретация.
    Компиляция:

    • статическая (AOT).
    • динамическая (JIT).
    • стратегии оптимизации.

    Непосредственное исполнение (минимум виртуальности — максимум скорости), при возможности.
    Другие подходы.

Компиляторы времени исполнения (JIT).

    Дизайн компилятора времени исполнения (немного про выбор IR и другие базовые компиляторные моменты).
    Скорость компиляции и скорость исполнения.
    Выбор единиц компиляции.
    Оптимизации на основе профилировщика, самопрофилирующийся код.
    Стратегии регистровой аллокации.
    Влияние специфики целевых архитектур на дизайн ВМ, на примере ARM и x86/amd64.

Стандартизированный контекст исполнения, и его реализация на конкретном аппаратном обеспечении.

    Стандартные системные библиотеки: архитектура библиотек (на примере Java), стратегии реализации на конкретной платформе.
    Стандартизированное аппаратное обеспечение: программные модели устройств, отображение программных моделей в API операционных систем.
    Стандартизация операций с плавающей точкой.
    Взаимодействие виртуальных машин с реальным аппаратным обеспечением:

    • виртуализация графических ускорителей.
    • виртуализация USB–устройств.
    • виртуализация сетевых адаптеров.

Многопоточность в виртуальных машинах.

    Подходы к одновременному использованию нескольких процессоров (потоки, акторы, неявный параллелизм).
    Блокировки и другие синхропримитивы. Модель памяти.
    Реализация блокировок на вычислительных архитектурах.
    Оптимизация блокировок.

    • анализ необходимости блокировок.
    • предвзятые блокировки.

Безопасность и надёжность виртуальных машин. Теория и примеры реализации (ядро Linux, VirtualBox, JVM).

    Дизайн.

    • Уровни привилегий исполнения (кольца защиты, привилегии контекста, другие подходы).
    • Разделение пространства имён.
    • Изоляция потенциально опасных (привилегированных) операций.
    • Разграничение данных, адресация объекта.
    • Анализ входного программного кода (верификация)
    • Устойчивость к потенциальным ошибкам реализации.

    Реализация.

    • Максимальное использование гарантий предоставляемые аппаратным обеспечением.
    • Автоматизация стандартных операций (поддержание списка хендлов, блокировки связанные с блоком исполнения и т.п.).
    • Автоматическое тестирование.

Производительность виртуальных машин.

    Ленивая динамическая оптимизация.
    Эффективная организация основных структур данных.
    Динамическая кодогенерация для частых сценариев.
    Максимальное использование аппаратных возможностей.
    Верификация данных только при необходимости.

Обсуждение дизайна существующих виртуальных машин.

    Hotspot Java Virtual Machine — виртуальная машина для языка Java.
    VirtualBox — виртуализатор архитектуры x86.

Заключение.

    Проблемы существующих ВМ.
    Необходимость в новых виртуальных машинах.


Вопросы по курсу.

  1. Определение виртуализации и виртуальной машины (в частности гипервизора). Примеры виртуальных машин.
  2. Ресурсно–агностическое прикладное программирование. и использование виртуализации для управления вычислительными ресурсами.
  3. Сценарии использования виртуализации в современной индустрии ПО.
  4. Концепция виртуальной машины и гипервизора.
  5. Типичные компоненты ВМ.
  6. Виртуализация набора инструкций реальных компьютеров. Критерии Попека–Голдберга.
  7. Системы управления памятью. Сборщики мусора. Гипотеза поколений.
  8. Устройства управления физической памятью (MMU) и их использование в виртуализованном окружении.
  9. Изоляция исполняемых компонент. Многопоточность: преимущества и недостатки. Оптимизации связанные с многопоточностью.
  10. Реализация исполняющей компоненты виртуальной машины на современных компьютерах. Интерпретаторы, компиляторы, системы непосредственного исполнения.
  11. Компиляторы времени исполнения (JIT). Дизайн, архитектура, реализация.
  12. Стандартизированный контекст исполнения, и его реализация. Стандартные библиотеки, стандартное аппаратное обеспечение - преимущества и недостатки.
  13. Конкурентность в виртуальных машинах. Парадигмы и моменты реализации.
  14. Безопасность и надёжность виртуальных машин. Теория и примеры реализации (ядро Linux, VirtualBox, JVM).
  15. Проблемы производительности и техники оптимизации для ВМ.
  16. Дизайн виртуальной машины Hotspot для языка Java.
  17. Дизайн VirtualBox — виртуализатор архитектуры x86.