Мы в Cloud4Y считаем лидирующим решением для виртуализации продукты VmWare. Тем не менее, мы интересуемся и другими решениями, в том числе, Xen и KVM. И вот что мы заметили: существует не так уж много информации, позволяющей сравнить эти гипервизоры: последние дельные исследования, которые мы нашли в сети, относятся  к 2012 году и, конечно, уже не могут считаться актуальными. Сегодня мы представим вашему вниманию тоже не самое новое, но, на наш взгляд, достаточно полезное исследование, посвященное производительности гипервизоров KVM и Xen.
image

Гипервизор KVM


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

KVM — это ПО, позволяющее организовывать виртуализацию на основе ПК под управлением ОС Linux и похожих. С недавнего времени KVM считается составляющей Linux-ядра и развивается параллельно ему. Этот гипервизор может использоваться только в системах, где виртуализация поддерживается аппаратно — с помощью процессоров Intel и AMD.

В процессе работы KVM осуществляет доступ к ядру напрямую посредством процессор-специфичного модуля (kvm-intel или kvm-amd). К тому же, в состав комплекса включено основное ядро — kvm.ko и элементы UI, включая широко распространенный QEMU. KVM дает возможность напрямую работать с файлами ВМ и дисковыми образами. Каждая виртуальная машина обеспечивается своим изолированным пространством.

Гипервизор Xen


Изначально студентами Кембриджа был запущен проект, который в итоге стал коммерческой версией Xen. Первый релиз датирован 2003 годом, а в 2007 исходный код выкупила компания Citrix. Xen — это кроссплатформенный гипервизор с большим функционалом и огромными возможностями, что дает возможность применять его в корпоративной сфере. Xen поддерживает паравиртуализацию — особый режим ядра операционной системы, когда ядро настроено на одновременную работу с гипервизором.

В код Xen добавлен только необходимый комплект функций: управление виртуальной памятью и тактовой частотой процессора, работа с DMA, таймером реального времени и прерываниями. Остальной функционал вынесен в домены, то есть в работающие в это время виртуальные машины. Таким образом, Xen — самый легкий гипервизор.

Суть исследования


Тестирование основано на использовании двух серверов SuperMicro, у каждого из которых четырехядерный процессор Intel Xeon E3-1220 с тактовой частотой 3,10 Гц, 24GB Kingston DDR3 RAM и четырьмя драйверами Western Digital RE-3 160GB (RAID 10). Версии BIOS идентичны.
Для хостинга и виртуальных машин мы взяли Fedora 20 (с SELinux). Вот взятые нами версии ПО:
  • Kernel: 3.14.8
  • Для KVM: qemu-kvm 1.6.2
  • Для Xen: xen 4.3.2

Все корневые файловые системы — XFS с конфигурацией по умолчанию. Виртуальные машины созданы с помощью virt-Manager с использованием настроек по умолчанию, применимых к KVM и Xen. Виртуальные диски использовали raw-образы и было выделено 8 Гб РАМ с 4 vCPU (виртуальными процессорами). ОС, запущенные на Xen, использовали PVHVM.

Пояснения


Кто-то из вас может начать возмущаться — мол, владелец Fedora 20, Red Hat, тратит значительное количество усилий на поддержку именно KVM. Уточним: Red Hat не делали значительных продвижений по части Xen долгие годы.

Кроме того, конкуренция между гипервизорами жестко контролируется и сведена к минимуму. На большинстве виртуальных серверов у вас будет несколько виртуальных машин, борющихся за время процессора, устройства ввода/вывода и доступ к сети. Наше тестирование не принимает это во внимание. Один гипервизор может иметь низкую производительность при низкой конкуренции за ресурсы, а затем показать куда большую эффективность, чем конкуренты, когда борьба за ресурсы выше.

Исследование проводилось на процессорах Intel, поэтому его результаты могут отличаться для AMD и ARM.

Результаты


Тесты для виртуальных машин, установленных непосредственно на «железо», то есть, без операционной системы (далее — «железо»), послужили основой для тестирования виртуальных машин. Отклонение в производительности между двумя серверами без виртуализации составило 0.51% или менее.

Производительность KVM упала в пределах 1,5% по сравнению с «железом» практически во всех тестах. Только два теста показали иной результат: один из них — тест 7-Zip, где KVM показал себя на 2,79% медленнее, чем «железо». Странно, что KVM был на 4,11% быстрее в тесте PostMark (который симулировал сильно загруженный почтовый сервер). Производительность Xen сильнее отличалась от производительности «железа», чем в ситуации с KVM. В трех тестах Xen отличался на 2,5% от скорости «железа», в остальных тестах он оказался еще медленнее.

В тесте PostMark Xen был медленнее на 14.41%, чем «железо». При перезапуске результаты теста отличались от первоначальных на 2%. Лучший тест для KVM, MAFFT, оказался вторым в списке худших для Xen.

Вот краткий итог тестирования:
Best Value Bare Metal KVM Xen
Timed MAFFT Alignment lower 7.78 7.795 8.42
Smallpt lower 160 162 167.5
POV-Ray lower 230.02 232.44 235.89
PostMark higher 3667 3824 3205
OpenSSL higher 397.68 393.95 388.25
John the Ripper (MD5) higher 49548 48899.5 46653.5
John the Ripper (DES) higher 7374833.5 7271833.5 6911167
John the Ripper (Blowfish) higher 3026 2991.5 2856
CLOMP higher 3.3 3.285 3.125
C-Ray lower 35.35 35.66 36.13
7-Zip higher 12467.5 12129.5 11879

Если вы хотите увидеть результаты полностью, пройдите по ссылке.

Вместо заключения


В нашем тестировании KVM был почти всегда на 2% медленнее, чем «железо». Xen оказался на 2,5% медленнее в трех тестах из десяти, а в остальных и того хуже: на 5–7%. Хотя KVM показал себя с лучшей стороны в тесте PostMark, следует отметить, что мы провели всего один I/O тест, и для получения более достоверной картины стоит провести еще несколько.

Для выбора правильного гипервизора необходимо правильно оценить характер своих нагрузок. Если ваши нагрузки предполагают меньший объем для процессора и больший для I/O, то можно провести больше I/O тестов. Если же вы работаете, в основном, с аудио и видео, попробуйте тесты x264 или mp3.

[UPD] Как справедливо заметил mister_fog, в 2007 Citrix выкупила не исходный код Xen, а компанию XenSource, которая была основана разработчиками Xen и занималась коммерческим развитием этого открытого проекта. Пруф.

Комментарии (36)


  1. ZlobniyShurik
    04.05.2016 13:56
    +1

    Все отлично, но оригинальная статья, похоже, 2014 года (ну, если верить ссылке на гуглодокс). С тех пор многое могло и поменяться (врядли сильно, но...).


  1. chupasaurus
    04.05.2016 13:57
    +3

    Невооружённым глазом заметно, что Xen на данном наборе тестов проиграл во всех, поэтому с выводом малость промахнулись.


    1. romantomchak
      04.05.2016 14:25

      Да, я тоже не совсем понял. Здесь сказано, что Xen медленнее:

      В трех тестах Xen отличался на 2,5% от скорости «железа», в остальных тестах он оказался еще медленнее.

      но в заключение он почему-то становится быстрее
      Xen оказался на 2,5% медленнее всего в трех тестах из десяти, а в остальных был выше на 5–7%.


    1. faost
      04.05.2016 15:41
      +2

      Перевод неправильный.

      Xen оказался на 2,5% медленнее всего в трех тестах из десяти, а в остальных был выше на 5–7%

      Xen fell within 2.5% of bare metal performance in three out of ten tests but often had a variance of up to 5-7%.


  1. ayurtaykin
    04.05.2016 14:02

    Как же я отстал от жизни, все еще закладывал 30% потерь ресурсов при использовании виртуализации, а тут получается что потери на уровне погрешности…

    А вы можете методику тестов описать? Вы пишете что тестировали голое железо, т.е. без ОС, как можно прогнать тесты openssl или 7-zip без использования гостевой ОС?


    1. Cloud4Y
      04.05.2016 17:30

      А вы можете методику тестов описать?

      Вот эти тесты.
      Тестировали на PVHVM (Xen 4.3)
      Под Bare Metal здесь имеется в виду одноимённый тип гипервизора.


      1. SamsonovAnton
        05.05.2016 23:41

        То есть Xen работал не в родном для себя режиме полной паравиртуализации (PV), а был притянут за уши к общему с KVM знаменателю — виртуализация аппаратуры с частично паравиртуальными драйверами (HVM+pv)? Такой изврат ещё можно понять, если хочется запустить Windows или FreeBSD x86-64, но не когда дело касается Linux. А если Fedora из коробки не хочет дружить с Xen — так не надо давиться кактусом, когда есть CentOS.

        Чтобы довести идею до полного абсурда, авторам следовало бы запустить QEMU-KVM ещё и без KVM вовсе, а ещё лучше — в режиме эмуляции SPARC, скажем. Тогда можно было бы выдать шокирующий пост про то, как виртуализация съедает 90 % быстродействия CPU.


    1. AllexIn
      04.05.2016 18:43

      Ага. Да еще VGA passthrough появился.


      1. loltrol
        04.05.2016 21:08

        И на глаз уже и не заметно что виртуализация, игры пашут на ура.


        1. equand
          05.05.2016 13:27

          2-5 процентов потерь виртуализации ~ 5 фреймов на 100, незаметно абсолютно.


          1. loltrol
            10.05.2016 16:05

            Ну даже если там будет 10 процентов, когда у вас монитор 60 герц, а игры выдают минимум 70 кадров — в любом случае будет по максимуму возможностей монитора использоваться. В частности я на глаз в Witcher 3, RotTR разницы не заметил, пашут на ультра настройках, без микро-фризов и просадок.


  1. mister_fog
    04.05.2016 14:28

    Спасибо за статью, интересно было взглянуть на результаты. (Я последнее время слежу за открытыми гипервизорами — по моим постам это заметно ;-) ). Единственное замечание — в 2007 Citrix выкупила не исходный код Xen, а компанию XenSource, которая была основана разработчиками Xen и занималась коммерческим развитием этого открытого проекта.


  1. lovecraft
    04.05.2016 15:28
    +10

    В состав комплекса включено основное ядро — kvm.ko и элементы UI, включая широко распространенный QEMU.

    QEMU — это не «элемент UI», а средство эмуляции оборудования. Точно такой же эмулятор есть в составе Xen (qemu-dm).

    Xen поддерживает паравиртуализацию — особый режим ядра операционной системы, когда ядро настроено на одновременную работу с гипервизором.

    Это пережиток тех времен, когда процессоры с VT-x/SVM были редкостью. Сейчас она работает медленнее аппаратной виртуализации, потому что управление памятью происходит без аппаратной поддержки со стороны CPU.

    В код Xen добавлен только необходимый комплект функций: управление виртуальной памятью и тактовой частотой процессора, работа с DMA, таймером реального времени и прерываниями.

    То же самое можно сказать и про модули ядра kvm.ko/kvm_amd.ko/kvm_intel.ko

    Остальной функционал вынесен в домены, то есть в работающие в это время виртуальные машины.

    В домене работает только гостевая ОС, а эмуляция оборудования средствами qemu-dm происходит в юзерспейсе хоста. Есть, правда еще и stub domains, но их вроде до продакшена не допилили.

    Таким образом, Xen — самый легкий гипервизор.

    Сравните размер образа мини-ОС гипервизора и размер kvm.ko/kvm_amd.ko/kvm_intel.ko
    На самом деле основное отличие Xen от KVM в том, что Xen стартует до запуска Linux, а KVM — после, и Xen запускается в своей собственной mini-OS, а kvm оформлен в виде модуля ядра

    и четырьмя драйверами Western Digital RE-3 160GB (RAID 10)

    Ай-ай, какими драйверами?

    Kernel: 3.14.8
    Для KVM: qemu-kvm 1.6.2
    Для Xen: xen 4.3.2

    Это сильно старый софт, можно сказать, протухший )

    Сейчас:
    Ядро: 4.6-rc6
    QEMU: 2.6.0-rc4
    Xen: 4.6.1

    У меня есть что сказать по поводу тестов: бессмысленно тестировать производительность CPU — при аппаратной виртуализации она почти не отличается от bare metal, потому что управление памятью и распределение ресурсов CPU происходит на аппаратном уровне. Однако подавляющее большинство тестов в оригинальной статье именно это и делают. Отличия в 2-3% между Xen и KVM можно объяснить чем угодно, даже статистической погрешностью, и в реальных условиях вы эти 3% не заметите. Намного интереснее тестировать I/O, да еще с измерением latency, нагрузки на CPU хоста и гостя из-за эмуляции оборудования, да еще и с гостевой Windows и паравиртуальными драйверами. Вот тут начинается треш и угар — синие экраны при большой нагрузке, system freeze и т.п.


    1. lovecraft
      04.05.2016 15:30
      +1

      Ах да, совсем забыл сказать по поводу того, что PostMark работает под гипервизором быстрее, чем на голом железе — этого не может быть (с), ребята явно забыли выключить где-то кэш.


      1. amarao
        04.05.2016 15:36
        +2

        Или кто-то лучше использует всякие C-states и скедулинг/numa. Ситуации, когда голая математика на виртуалке работает лучше, чем на baremetall — бывают. Обычно это не заслуга виртуализации, а проблема в неоптимальности работы приложения на заданном конфиге baremetall (smp affinity, numa).


    1. amarao
      04.05.2016 15:35
      +3

      В домене работает только гостевая ОС, а эмуляция оборудования средствами qemu-dm происходит в юзерспейсе хоста. Есть, правда еще и stub domains, но их вроде до продакшена не допилили.


      Если бы так всё было просто. Проблема в том, что xen — «над» операционной системой dom0. Таким образом, получается следующее:
      драйвер в domU. Протокол для работы оборудования с dom0, реализованный как драйвер в dom0 плюс userspace демон. Само оборудование — драйвер в dom0, который создаёт «реверсное» устройство (для сети — патч-интерфейс, для блочных устройств — идиотское «реверсное» блочное устройство, куда надо писать то, что гость читает и читать то, что тот пишет), плюс userspace, который его обслуживает в dom0. Оно шаткое и уродливое. Жить с этим можно, но не нужно.


    1. SamsonovAnton
      06.05.2016 11:53

      «Сейчас паравиртуализация работает медленнее аппаратной виртуализации, потому что управление памятью происходит без аппаратной поддержки со стороны CPU».

      Это потому что сама идея паравиртуализации в принципе ущербна, или всё же потому, что в AMD64 были убраны «лишние» кольца защиты, заставляя Xen реализовывать программно то, что в i386 обеспечивалось аппаратурой? Если паравиртуализация — это так плохо, то зачем везде, где можно, стараются использовать паравиртуальные драйверы устройств (guest additions)? Как бы то ни было, про PVH тут уже напоминали — без тестирования в этом режиме говорить о какой-либо объективности исследования сейчас трудно.

      ___
      «В домене работает только гостевая ОС, а эмуляция оборудования средствами qemu-dm происходит в юзерспейсе хоста. Есть, правда еще и stub domains, но их вроде до продакшена не допилили».

      Dom0 у Xen — это такая же виртуальная машина, пусть и с некоторыми привилегиями. Если не ошибаюсь, у XenServer управляющий домен — 32-битный, что не мешает ему при этом запускать 64-битных гостей в других доменах. Поэтому всё-таки не совсем корректно называть Dom0 «хостом», так как host у Xen — это только сам Xen, а функции высокоуровневого управления машинами и эмуляции устройств для гостей могут быть размазаны между несколькими подчинёнными доменами (Qubes OS наглядный тому пример), при этом привилегированные домены всё равно не имеют прямого доступа к гостевым доменам, в интересах которых они работают.

      ___
      «Сравните размер образа мини-ОС гипервизора и размер kvm.ko / kvm_amd.ko / kvm_intel.ko».

      Между 1902 кбайт (885 кбайт gzip) и 852 + 112 / 260 кбайт не такая уж огромная разница. Интересно другое: размер исходников KVM (именно ядерный репозиторий, а не QEMU), даже если выбрать из него только что касается x86, раз эдак в десять-двадцать больше, чем у Xen.


  1. amarao
    04.05.2016 15:31
    +14

    Xen как серверный гипервизор — мёртв. Остаётся как карманная игрушка цитрикса и всякая экзотика, типа виртуальных десктопов, сотовых телефонов и т.д. Плюс легаси инсталляции. Плюс amazon, который его активно in-house пилит (гипервизор в опенсорсе, userspace — in house).

    Поясняю:
    Xen родился как развитие идеи binary rewriting. Вместо того, чтобы патчить ОС «на ходу» для перехвата привилегированных инструкций, мы «патчим» её (ОС) при компиляции, за счёт чего имеем огромное ускорение. Это PV-режим работы гипервизора. Он рвал все существующие системы виртуализации на тот момент в клочки.

    Потом интел выкатила VT и VT-D, и binary rewriting стал ненужен. Xen сделал морду кирпичом и выкатил HVM-режим, но тут уже начались всякие нюансики в реализации, и он начал гоняться с KVM/VMWare за процентики. Кто-то больше, кто-то меньше. В этот момент он потерял главное рыночное преимущество.

    Дальше начались игры «следующего порядка»:

    Xen: тяжёлый отвратительный userspace в dom0. xenstore с утечками памяти, залипающие домены, реверсные блочные устройства, шелловые скрипты как часть тулстека по инициализации гостевых устройств. Гигантская куча разрозненных кусков кода, пытающихся подружить разные части линукса с инородной странной сущностью за пределами ОС.
    KVM: Виртуалка — это userspace процесс. Легко и просто.
    Xen: абстракные computer science исследования — mirage (микроос на окамл для запуска приложений в pv-окружении), stub domains для изоляции «обратной части драйверов», микрочекпоинты (remus), etc.
    KVM: то, что нужно индустрии прямо тут и сейчас.

    Xen — чужеродная среда с кучей проблем (nvidia не поддерживает линукс и xen, grub+uefi+xen не работают вместе, etc), kvm — родное, нативное в ядре, qemu — всего лишь userspace приложение без каких-либо выкрутасов.

    На выходе — на последнем ops-summit на openstack summit 2016-1, на сессии, посвящённой mitaka, в зале не было НИ ОДНОГО человека, кто бы использовал xen как гипервизор. Есть rackspace, который держит клиентские legacy-виртуалки на xenserver'е — но за кулисами их ребята страшно ругались на него, и используют они его не как «систему управления виртуальными машинами», а как прослойку между гипервизором и openstack'ом. Никаких пулов, никаких адских xapi на мастере, отжирающих 300% CPU и тупящих непонятно на чём.

    xen всегда имел проблемы с opensource'ом. Адекватной системы сборки не было, и если сам гипервизор был прост и понятен, но его userspace — ужасен и местами имел дыры в проприетарные системы (цитрикса). Самому цитриксу оно особо не нужно и его интересуют маржинальные продукты (читай, виртуализация десктопов), а серверный рынок — только как часть портфолио и только в контексте энтерпайза.


    1. Cloud4Y
      04.05.2016 17:35

      По Xen согласны, сейчас если планировать с нуля то KVM однозначьно лучше по всем параметрам.
      По паралельной обработке при большом кол-ве машин и интенсивном IO, Xen показывал себя лучше. По крайней мере это наш опыт.
      Мы ловили много проблем с Xen за конкуренцию по IO, есть к примеру сеть iSCSI и приходит большой трафик по пакетем по сети Network LAN (iSCSI и Network физически разные адаптеры), очередь IO оказывалась очень сильно зависима и происходили проблемы c iSCSI.
      В VMware таких проблем не происходит, по этому мы её применяем для коммерческой экспуатации, дороже но стабильнее.


      1. amarao
        04.05.2016 20:41

        iscsi для линукса упирается в тормозной open-iscsi (инициатор). NFS должна дать лучшую производительность.


    1. nitso
      04.05.2016 17:46
      +1

      На "любительском" уровне (пока виртуализация не является источником дохода) XEN привлекает легкостью установки и поддержки. Установил из образа на голую машину, подцепился через XenCenter или другой xapi-клиент, и оно работает. Достаточно понятный GUI, все вопросы/проблемы легко гуглятся и решаются через консоль (xe).


      Есть ли подобрное, относительно user-friendly, решение для KVM? Из разряда поставил-настроил-пользуешься через GUI.


      1. nitso
        04.05.2016 17:54
        +1

        Поправка: речь о XenServer


      1. moosy
        04.05.2016 18:03
        +4

        Думаю что proxmox можно более-менее назвать таким решением. Для «любительского» уровня все достаточно user-friendly


      1. AllexIn
        04.05.2016 18:48
        +1

        На любительском уровне я поставил KVM с VGA passthrough и прочими плюшками за один вечер.
        При том что до этого пользовался исключительно VBox под виндой и слабо представлял что и как делать.


      1. amarao
        04.05.2016 20:42
        +1

        virt-manager вроде, всё то же умеет.


      1. vasilisc
        05.05.2016 08:05
        +2

        Много лет уже используем ProxmoxVE — Debian (KVM) + веб-интерфейс. Если сделано общее хранилище, то есть Live Migration.


      1. nitso
        05.05.2016 15:14

        Большое спасибо всем оветившим, есть поле для исследования и, возможно, переезда.


    1. magius
      05.05.2016 13:58

      Xen — чужеродная среда с кучей проблем (nvidia не поддерживает линукс и xen, grub+uefi+xen не работают вместе, etc), kvm — родное, нативное в ядре, qemu — всего лишь userspace приложение без каких-либо выкрутасов.
      это красиво звучит, но так ли это на самом деле
      насколько мне известно qemu — не смотря на то что это «простое приложение» оно еще и достаточно тормознутое.
      так что не факт что «чужеродная среда xen» это плохо.
      соответственно если у вас «среднестатистическая» виртуалка с LAMP, то XEN будет выглядеть более привлекательно из-за более быстрой обработки IO.

      более того давайте вспомним что у Xen есть PVH режим
      который исключает все недостатки чистого HVM от XEN
      И если уж мы говорим о «серверных гипервизорах» — то корректнее сравнивать их с сильных сторон,
      а не просто говорить о недостатках.


  1. rader90
    04.05.2016 21:08
    +1

    Что оптимально использовать KVM или Xen для гостевой машины windows server 2012?


    1. RicoX
      04.05.2016 22:25

      Я бы взял KVM, на этапе установки подпихнул VirtIO драйвера и использовал дисковую и сетевую подсистемы через них, так самая приятная производительность выходила лично у меня.


      1. rader90
        05.05.2016 08:44

        Даже если поставить терминальный сервер на винде, и пару linux/unix систем? Можете объяснить, чем лучше более детально. Щас выбор между ними, что будет эффективнее, сложность настройки не важна. Да и как автор говорил все отзывы годов 2009-2012 часто попадаются.


        1. RicoX
          05.05.2016 09:23

          Если сравнивать с XEN, то в KVM у меня получалась лучше производительность, на дисковой разница была почти в 20% на остальном 3-5%. Для linux я бы вообще советовал использовать не полную виртуализацию, а контейнеры, оверхеда почти нет, дисковая работает со скоростью хостовой системы, бэкапы меньше весят, проще управлять занятым местом, для unix. смотря какой unix, если та же FreeBSD неплохо себя чувствует на KVM, то вот солярис работал лучше в XEN, правда крайний раз я его тестировал года 4 назад, может теперь и в KVM работать будет неплохо. Основная проблема XEN — это хренова абстракция dom0, выше было расписано почему это плохо. По сложности установки, ну как по мне монопенисуально, что на то что на то доков валом, хотите все из коробки с KVM — ставьте готовую сборку типа ProxMox или Virtuozzo7 и сразу начинайте делать виртуалки, о всей внутренней кухне уже позаботились авторы сборок.


  1. Lelik13a
    05.05.2016 05:06

    Я правильно понял, что тестировали только потерю производительности для одного гостя?
    В тестах вертуализации хотелось бы сравнить работу нескольких конкурирующих гостей на одном железе.


  1. Loxmatiymamont
    05.05.2016 09:34
    -1

    А Hyper-v за что проигнорировали?


    1. RicoX
      05.05.2016 10:29

      Предположу потому, что windows в качестве гипервизора у хостера можно встретить так же часто, как FreeBSD на рабочем компьютере главбуха.


  1. ZloyVitec
    05.05.2016 15:14

    на КVM virtio устройства использовались?