Розробники проекту NetBSD
NVMM включає драйвер, що працює на рівні ядра системи та координує доступ до апаратних механізмів віртуалізації, і стек Libnvmm, що виконується у просторі користувача. Взаємодія компонентів ядра та простору користувача здійснюється через IOCTL. Особливістю NVMM, що відрізняє його від таких гіпервізорів, як KVM,
При цьому Libnvmm сам по собі не містить функції емулятора, а лише надає API, що дозволяє інтегрувати підтримку NVMM у існуючі емулятори, наприклад QEMU. API охоплює такі функції як створення та запуск віртуальної машини, виділення пам'яті гостьовій системі, розподіл VCPU. Для підвищення безпеки та зниження можливих векторів атаки libnvmm надає тільки явно запитані функції – за замовчуванням складні обробники не викликаються автоматично і взагалі можуть не застосовуватись, якщо без них можна обійтися. NVMM намагається обходитися простими рішеннями, не впадаючи в ускладнення та дозволяючи контролювати якнайбільше аспектів роботи.
Частина NVMM, що працює на рівні ядра, досить щільно інтегрована з ядром NetBSD, і дозволяє домогтися підвищення продуктивності за рахунок скорочення числа перемикання контексту між гостьовою ОС і хост-оточенням. На стороні простору користувача libnvmm намагається агрегувати типові операції введення-виводу і без необхідності не звертатися до системних викликів. Система виділення пам'яттю заснована на підсистемі pmap, що дозволяє витісняти сторінки пам'яті гостьових систем розділ підкачки у разі нестачі пам'яті в системі. NVMM позбавлений глобальних блокувань і добре масштабується, дозволяючи одночасно використовувати різні ядра CPU для виконання різних гостьових віртуальних машин.
На базі QEMU підготовлено рішення, що використовує NVMM для використання апаратних механізмів віртуалізації. Ведеться робота з включення підготовлених патчів до основного складу QEMU. Зв'язування QEMU+NVMM вже
Джерело: opennet.ru