Технология виртуализации KVM
Михаил Кулёмин,
сообщество Fedora.
Содержание
● Компоненты системы виртуализации
– /dev/kvm
– qemu-kvm
– libvirt
● Утилиты для работы с виртуальными машинами
– virsh, virt-manager
– guestfish, libguestfs
● Демо (понравившиеся моменты)
KVM
● Технология полной виртуализации для Linux
● Требует поддержки со стороны оборудования
– Intel-VT
– AMD-V
– ARM virtualization extensions
– PowerPC ISA 2.06
● Поддерживает различные гостевые системы
● Разрабатывается с 2006 года
● В ядре с января 2007 (2.6.20)
open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {
ioctl(KVM_RUN)
switch (exit_reason) {
case KVM_EXIT_IO:
/* ... */
case KVM_EXIT_HLT:
/* ... */
}
}
Псевдокод работы с KVM.
(взято blog.vmsplice.net)
Источник: http://slid.es/braoru/kvm
Некоторые особенности KVM
● Сравнительно небольшая кодовая база в
ядре
● Активное использование существующих
технологий в ядре в т.ч.
– Планировщик задач
– IO
– cgroups
● Использование кода qemu для запуска
виртуальных машин и эмуляции устройств
(Native KVM Tools — альтернатива)
qemu-kvm
●
Qemu — изначально эмулятор
● Qemu-kvm — форк кода qemu для работы с KVM.
●
Окончательное слияние кодовой базы — конец 2012
(qemu 1.3)
●
Qemu отвечает за работу устройств ввода вывода,
управление виртуальной машиной.
●
Виртуальная машина — обычный процесс в
операционной системе
● Оперативное управление при помощи qemu monitor
● Пример команды запуска:
qemu-kvm -enable-kvm -m 1512 -smp 2,sockets=1,cores=2
-drive file=/dev/vg_storage/Fedora,if=virtio,format=raw
Libvirt
● Библиотека для управления различными технологиями виртуализации
– KVM
– Xen
– Virtualbox
– VMware
– OpenVZ
– ...
● Демон libvirtd — запускает ВМ, конфигурирует сеть, диски, прочие
устройства для виртуальной машины
● Клиенты:
– Virsh (CLI)
– Virt-manager (GUI)
● API: C, C++, Python ...
● Дополнительный слой абстракции
Работа с образами ВМ
● qemu-img
– Создание, изменение, конвертация образов ВМ
– Снапшоты, создание «дочерних» образов
● libguestfs — библиотека для редактирования
содержания образов ВМ
– guestfish — интерактивная оболочка
– virt-tools — набор полезных утилит
– API (много языков программирования)
Системы управления
виртуализацией
● Автоматизация настройки и
функционирования множества хостов
● Как правило работают через libvirt:
поддерживают не только KVM
● Еще один слой абстракции
● Основа облачных (IaaS) решений
● Примеры: Ovirt (RHEV), Openstack,
OpenNebula, Proxmox...
Ссылки
● KVM official site
http://www.linux-kvm.org
● A step by step guide for linux kvm virtualization on embedded systems
(ARM Cortex-A15)
http://www.virtualopensystems.com/media/kvm-resources/kvm-arm-guid
e.pdf
● Hardware Assisted Virtualization Intel Virtualization Technology
http://linux.linti.unlp.edu.ar/images/f/f1/Vtx.pdf
● Architecture of the Kernel-based Virtual Machine (KVM)
http://www.linux-kongress.org/2010/slides/KVM-Architecture-LK2010.pdf
● QEMU Code Overview
http://vmsplice.net/~stefan/qemu-code-overview.pdf
● KVM Internals Code and More
http://slid.es/braoru/kvm
Ссылки
● KVM API documentation
https://github.com/mirrors/linux/blob/master/Documentation/virtual/kvm/ap
i.txt
● Native KVM tools
https://github.com/penberg/linux/kvm/tree/master/tools/kvm
● Qemu home page
http://wiki.qemu.org
● Libvirt home page
http://www.libvirt.org/
● Kashyap Chamarthi`s blog (RedHat virtualization team)
http://kashyapc.wordpress.com
● Richard WM Jones`s blog
http://rwmj.wordpress.com
Спасибо за внимание.
Вопросы.
Динамическое управление
ресурсами (KVM).
Михаил Кулёмин,
сообщество Fedora.
Содержание
● Зачем это нужно?
● Какие возможности существуют
– Блочный ввод/вывод
– Сеть
– Память
– CPU
● Автоматическое управление ресурсами
● Демо
Что? Зачем?
● Ресурсы системы всегда ограничены, их
необходимо грамотно распределять
● Но виртуальные машины могут крайне
быстро изменять свое состояние
● Особенно актуально в облачных системах
– Основной товар — сервис
– Компромисс между качеством сервиса и
затраченными ресурсами
● Облачная система — биржа ресурсов?
Вводные
● Управление ресурсами: мониторинг и
возможность изменения настройки
● Qemu — один из процессов в операционной
системе
● Сgroups!
● + специфические для виртуализации вещи
● Интеграция с libvirt
Блочный ввод/вывод
● Два различных механизма
– Cgroups (пропорциональный и абсолютный)
– Qemu IO throttling (в тч NFS)
● Поддержка в libvirt:
– blkdeviotune
– blkiotune
– domblkstat
Сеть
● Стандартные системные средства
ограничения трафика (tc)
● Libvirt
– domifstat
– domiftune
CPU
● Планировщик задач в ядре.
● Пропорциональное разделение ресурсов
● Libvirt
– Cpu-stats
– Schedinfo
● Поддержка добавление/удаления CPU
Память
● Balloon driver
– Динамическое изменение количества памяти
– Требует драйвера в ОС
● KSM
– Использовалась до KVM Может использоваться
и без KVM (Комментарий на последнем слайде)
– Для использования в KVM был нужен
минимальный патч
Balloon
● Libvirt
– setmem
– dommemstat
KSM
● /sys/kernel/mm/ksm/
● Libvirt
– node-memory-tune
Автоматическое управление
● Сложно!
– Последствия «управления» трудно предугадать
– Взаимосвязь между ресурсами
● Требуется комплексный анализ данных
● Выработка критериев управления
– Производительность узла
– Производительность виртуальной машины
– Производительность кластера
● Случайный процесс
– Расчет рисков
– Аналогия с существующими процессами
Пример управления памятью
Влияние на
«производительность»
Ссылки
● Using KSM with KVM
http://www.linux-kvm.com/content/using-ksm-kernel-samepage-merging-kvm
● Динамическое выделение памяти для виртуальных машин
http://www.ossportal.ru/technologies/kvm/blogs/160
● Qemu DiskIOlimits
http://wiki.qemu.org/Features/DiskIOLimits
● IO throttling in qemu
http://www.linux-kvm.org/wiki/images/7/72/2011-forum-keep-a-limit-on-it-io-thro
● Управление памятью в гипервизоре. Все о виртуализации памяти в
Parallels
http://profyclub.ru/docs/301
● KSM and KVM
http://serverascode.com/2012/11/11/ksm-kvm.html
Ссылки
● Increasing memory density by using KSM
https://www.kernel.org/doc/ols/2009/ols2009-pages
● Overcommit KVM resources
http://www.ibm.com/developerworks/ru/library/l-ove
● Resource management guide
https://access.redhat.com/site/documentation/en-U
Комментарий про KSM
Честно считал, что KSM использовался в CERN до того как стал работать с KVM. Счас
поднял ссылки и попробую восстановить истину и даты.
Итак касаемо самой технологии есть две статьи на LWN (2008 и 2009 год
соответственно) http://lwn.net/Articles/306704/ http://lwn.net/Articles/330589/ В частности
во второй статье указано, что для KSM был переписан с использованием RB деревьев,
а не хэш таблиц (чтобы не вступать в конфликт с патентов VMware).
Статья про CERN http://link.springer.com/content/pdf/10.1007/978-3-642-35893-7_5.pdf
(полный текст недоступен) и статья про KSM с упоминанием CERN (2009 год)
(https://www.kernel.org/doc/ols/2009/ols2009-pages-19-28.pdf) (А авторах разработчик
самого KSM)
Таким образом должен признаться, что ввел народ в заблуждение. KSM активно
тестировался в CERN без использования виртуализации, но уже после того как был
написан для работы с KVM (Что собственно ссылки и доказывают).
Прошу прощения у аудитории. Исправление в презентацию внесу - действительно
перепутал, почему то в сознании у меня была другая версия событий. Спасибо
товарищу @dyasny за очень конструктивное замечание.
Спасибо за внимание.
Вопросы.

3. Kulemin. kvm. June 01, 2013

  • 1.
    Технология виртуализации KVM МихаилКулёмин, сообщество Fedora.
  • 2.
    Содержание ● Компоненты системывиртуализации – /dev/kvm – qemu-kvm – libvirt ● Утилиты для работы с виртуальными машинами – virsh, virt-manager – guestfish, libguestfs ● Демо (понравившиеся моменты)
  • 3.
    KVM ● Технология полнойвиртуализации для Linux ● Требует поддержки со стороны оборудования – Intel-VT – AMD-V – ARM virtualization extensions – PowerPC ISA 2.06 ● Поддерживает различные гостевые системы ● Разрабатывается с 2006 года ● В ядре с января 2007 (2.6.20)
  • 4.
    open("/dev/kvm") ioctl(KVM_CREATE_VM) ioctl(KVM_CREATE_VCPU) for (;;) { ioctl(KVM_RUN) switch(exit_reason) { case KVM_EXIT_IO: /* ... */ case KVM_EXIT_HLT: /* ... */ } } Псевдокод работы с KVM. (взято blog.vmsplice.net)
  • 5.
  • 6.
    Некоторые особенности KVM ●Сравнительно небольшая кодовая база в ядре ● Активное использование существующих технологий в ядре в т.ч. – Планировщик задач – IO – cgroups ● Использование кода qemu для запуска виртуальных машин и эмуляции устройств (Native KVM Tools — альтернатива)
  • 7.
    qemu-kvm ● Qemu — изначальноэмулятор ● Qemu-kvm — форк кода qemu для работы с KVM. ● Окончательное слияние кодовой базы — конец 2012 (qemu 1.3) ● Qemu отвечает за работу устройств ввода вывода, управление виртуальной машиной. ● Виртуальная машина — обычный процесс в операционной системе ● Оперативное управление при помощи qemu monitor ● Пример команды запуска: qemu-kvm -enable-kvm -m 1512 -smp 2,sockets=1,cores=2 -drive file=/dev/vg_storage/Fedora,if=virtio,format=raw
  • 8.
    Libvirt ● Библиотека дляуправления различными технологиями виртуализации – KVM – Xen – Virtualbox – VMware – OpenVZ – ... ● Демон libvirtd — запускает ВМ, конфигурирует сеть, диски, прочие устройства для виртуальной машины ● Клиенты: – Virsh (CLI) – Virt-manager (GUI) ● API: C, C++, Python ... ● Дополнительный слой абстракции
  • 9.
    Работа с образамиВМ ● qemu-img – Создание, изменение, конвертация образов ВМ – Снапшоты, создание «дочерних» образов ● libguestfs — библиотека для редактирования содержания образов ВМ – guestfish — интерактивная оболочка – virt-tools — набор полезных утилит – API (много языков программирования)
  • 10.
    Системы управления виртуализацией ● Автоматизациянастройки и функционирования множества хостов ● Как правило работают через libvirt: поддерживают не только KVM ● Еще один слой абстракции ● Основа облачных (IaaS) решений ● Примеры: Ovirt (RHEV), Openstack, OpenNebula, Proxmox...
  • 11.
    Ссылки ● KVM officialsite http://www.linux-kvm.org ● A step by step guide for linux kvm virtualization on embedded systems (ARM Cortex-A15) http://www.virtualopensystems.com/media/kvm-resources/kvm-arm-guid e.pdf ● Hardware Assisted Virtualization Intel Virtualization Technology http://linux.linti.unlp.edu.ar/images/f/f1/Vtx.pdf ● Architecture of the Kernel-based Virtual Machine (KVM) http://www.linux-kongress.org/2010/slides/KVM-Architecture-LK2010.pdf ● QEMU Code Overview http://vmsplice.net/~stefan/qemu-code-overview.pdf ● KVM Internals Code and More http://slid.es/braoru/kvm
  • 12.
    Ссылки ● KVM APIdocumentation https://github.com/mirrors/linux/blob/master/Documentation/virtual/kvm/ap i.txt ● Native KVM tools https://github.com/penberg/linux/kvm/tree/master/tools/kvm ● Qemu home page http://wiki.qemu.org ● Libvirt home page http://www.libvirt.org/ ● Kashyap Chamarthi`s blog (RedHat virtualization team) http://kashyapc.wordpress.com ● Richard WM Jones`s blog http://rwmj.wordpress.com
  • 13.
  • 14.
  • 15.
    Содержание ● Зачем этонужно? ● Какие возможности существуют – Блочный ввод/вывод – Сеть – Память – CPU ● Автоматическое управление ресурсами ● Демо
  • 16.
    Что? Зачем? ● Ресурсысистемы всегда ограничены, их необходимо грамотно распределять ● Но виртуальные машины могут крайне быстро изменять свое состояние ● Особенно актуально в облачных системах – Основной товар — сервис – Компромисс между качеством сервиса и затраченными ресурсами ● Облачная система — биржа ресурсов?
  • 17.
    Вводные ● Управление ресурсами:мониторинг и возможность изменения настройки ● Qemu — один из процессов в операционной системе ● Сgroups! ● + специфические для виртуализации вещи ● Интеграция с libvirt
  • 18.
    Блочный ввод/вывод ● Дваразличных механизма – Cgroups (пропорциональный и абсолютный) – Qemu IO throttling (в тч NFS) ● Поддержка в libvirt: – blkdeviotune – blkiotune – domblkstat
  • 19.
    Сеть ● Стандартные системныесредства ограничения трафика (tc) ● Libvirt – domifstat – domiftune
  • 20.
    CPU ● Планировщик задачв ядре. ● Пропорциональное разделение ресурсов ● Libvirt – Cpu-stats – Schedinfo ● Поддержка добавление/удаления CPU
  • 21.
    Память ● Balloon driver –Динамическое изменение количества памяти – Требует драйвера в ОС ● KSM – Использовалась до KVM Может использоваться и без KVM (Комментарий на последнем слайде) – Для использования в KVM был нужен минимальный патч
  • 22.
  • 23.
  • 24.
    Автоматическое управление ● Сложно! –Последствия «управления» трудно предугадать – Взаимосвязь между ресурсами ● Требуется комплексный анализ данных ● Выработка критериев управления – Производительность узла – Производительность виртуальной машины – Производительность кластера ● Случайный процесс – Расчет рисков – Аналогия с существующими процессами
  • 25.
  • 26.
  • 27.
    Ссылки ● Using KSMwith KVM http://www.linux-kvm.com/content/using-ksm-kernel-samepage-merging-kvm ● Динамическое выделение памяти для виртуальных машин http://www.ossportal.ru/technologies/kvm/blogs/160 ● Qemu DiskIOlimits http://wiki.qemu.org/Features/DiskIOLimits ● IO throttling in qemu http://www.linux-kvm.org/wiki/images/7/72/2011-forum-keep-a-limit-on-it-io-thro ● Управление памятью в гипервизоре. Все о виртуализации памяти в Parallels http://profyclub.ru/docs/301 ● KSM and KVM http://serverascode.com/2012/11/11/ksm-kvm.html
  • 28.
    Ссылки ● Increasing memorydensity by using KSM https://www.kernel.org/doc/ols/2009/ols2009-pages ● Overcommit KVM resources http://www.ibm.com/developerworks/ru/library/l-ove ● Resource management guide https://access.redhat.com/site/documentation/en-U
  • 29.
    Комментарий про KSM Честносчитал, что KSM использовался в CERN до того как стал работать с KVM. Счас поднял ссылки и попробую восстановить истину и даты. Итак касаемо самой технологии есть две статьи на LWN (2008 и 2009 год соответственно) http://lwn.net/Articles/306704/ http://lwn.net/Articles/330589/ В частности во второй статье указано, что для KSM был переписан с использованием RB деревьев, а не хэш таблиц (чтобы не вступать в конфликт с патентов VMware). Статья про CERN http://link.springer.com/content/pdf/10.1007/978-3-642-35893-7_5.pdf (полный текст недоступен) и статья про KSM с упоминанием CERN (2009 год) (https://www.kernel.org/doc/ols/2009/ols2009-pages-19-28.pdf) (А авторах разработчик самого KSM) Таким образом должен признаться, что ввел народ в заблуждение. KSM активно тестировался в CERN без использования виртуализации, но уже после того как был написан для работы с KVM (Что собственно ссылки и доказывают). Прошу прощения у аудитории. Исправление в презентацию внесу - действительно перепутал, почему то в сознании у меня была другая версия событий. Спасибо товарищу @dyasny за очень конструктивное замечание.
  • 30.