3. kulemin. kvm. june 01, 2013
TRANSCRIPT
Технология виртуализации 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-guide.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/api.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-throttling-in-qemu.pdf● Управление памятью в гипервизоре. Все о виртуализации памяти в
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-19-28.pdf● Overcommit KVM resources
http://www.ibm.com/developerworks/ru/library/l-overcommit-kvm-resources/● Resource management guide
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Resource_Management_Guide/index.html
Комментарий про 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 за очень конструктивное замечание.
Спасибо за внимание.Вопросы.