Анонсирован релиз системы эмуляции аппаратного обеспечения и виртуализации QEMU 0.15. В подготовке новой версии приняло участие 150 разработчиков, по сравнению с прошлым выпуском внесено 1800 изменений, добавлено около 100 тыс. строк кода. В качестве эмулятора QEMU позволяет запустить программу собранную для одной аппаратной платформы на системе с совершенно иной архитектурой, например, выполнить приложение для ARM на x86-совместимом ПК. В режиме виртуализации в QEMU достигается производительность выполнения кода в изолированном окружении близкая к нативной системе, за счет прямого выполнения инструкций на CPU и задействования гипервизора Xen или модуля KVM.
Ключевым изменением QEMU 0.15 стала интеграция в состав наработок проекта Xen, что привело к значительному повышению качества поддержки режима виртуализации с задействованием гипервизора Xen. Изначально инструментарий и набор драйверов для обеспечения работы гипервизора Xen базировался на форке кода QEMU. Для того, чтобы собрать все накопленные с момента форка изменения и оформить их для возврата в родительский проект, понадобился год работы. Возврат изменений затрудняло большое число дублирующего кода с реализацией одних и тех же возможностей, созданных как силами QEMU, так и разработчиками Xen. Проделанная работа по слиянию общих кодовых баз пойдет на пользу обоим проектам, за счет прекращения выполнения двойной работы и переходу к более тесному сотрудничеству.
Основные улучшения:
- Синхронизация поддержки KVM с проектом qemu-kvm: Портированы многочисленные исправления, накопленные в рамках проекта qemu-kvm. Синхронизирован код поддержки многопоточной модели. Базовый код поддержки KVM теперь будет совместно использоваться и развиваться одновременно для qemu и qemu-kvm.
- Для использования инструментов для системы виртуализации KVM больше не требуется наличия внешних заголовочных файлов Linux-ядра, все поддерживаемые функции KVM теперь встроены в итоговый исполняемый файл;
- Для архитектуры x86 в KVM обеспечена поддержка процессорных расширений SMEP (Supervisor Mode Execution Protection) и расширенных фунуций CPU VIA. Обеспечено корректное сохранение счетчика точного времени (TSC, Time Stamp Counter) при проведении миграции гостевых окружений. Переработана поддержка MCE (Machine Check Exception);
- Поддержка новых целевых (эмулируемых) архитектур Lattice Mico32 (LM32) и UniCore32. Добавлена базовая поддержка эмуляции платы LM32 EVR и полная поддержка Milkymist SoC, включая функции отображения видео;
- ARM: Исправлены недоработки в реализации эмуляции используемых в процессорах ARM расширений Neon, инструкций ARMv6 и ARMv7, операций с плавающей запятой. Добавлена поддержка SA-1110/SA-1100. Реализована эмуляция двух машин: ARM Versatile Express ("vexpress-a9") и Sharp Zaurus SL-5500 ("collie");
- SPARC: Улучшения в OpenBIOS сделали возможным загрузку Solaris 8. Исправление ошибок в эмуляторе Sparc32 и Sparc64. Исправление реализации инструкций sdivx и udivx позволило обеспечить загрузку HelenOS в режиме командной строки;
- Обеспечена поддержка сборки кода с реализацией хост-системы в режиме Thumb (сокращенная система команд) процессоров ARM;
- Улучшена работа драйверов virtio-serial и virtio-balloon. Запрещено создавать несколько balloon-устройств, устранена утечка памяти при отсоединении устройства virtio-balloon, исправлена ошибка мешающая миграции после отсоединения устройства virtio-balloon;
- Добавлена поддержка live-снапшотов в QMP (QEMU Monitor Protocol) при помощи команды snapshot-blkdev-sync;
- Устранена проблема с излишним кэшированием размера носителя, что например, могло проявляться в показе размера ранее вставленного CD-ROM после смены диска;
- В утилиту qemu-img для команд "convert" и "rebase" добавлена опция "-p" при указании которой наглядно отображается прогресс выполнения операции. Для команд "commit", "convert" и "rebase" добавлена опция "-t", позволяющая указать режим кэширования, который будет использован при открытии образа. Увеличена производительность выполнения операции преобразования образов.
- Улучшена производительности создания и удаления внутренних снапшотов для блочных устройств qcow2;
- Добавлена возможность увеличения размера уже созданных образов виртуальных машин QED (QEMU Enhanced Disk) при помощи команды "qemu-img resize". Повышена устойчивость образов QED от повреждения в результате аварийного завершения, например, после выключения питания;
- Для образов VMDK обеспечена поддержка субформата monolithicFlat;
- В Sheepdog, распределенном хранилище для инфраструктуры виртуальных серверов на базе QEMU/KVM, добавлена возможность предварительного резервирования места в процессе создания образов виртуальных машин;
- Для поддержки RBD теперь используется высокоуровневая библиотека librbd вместо librados;
- В код эмуляции IDE-подсистемы добавлена поддержка команды TRIM. Вместо одного общего устройства ide-drive, для жестких дисков теперь используется устройство ide-hd, а для CD-ROM - ide-cd. По аналогии для SCSI-устройств вместо scsi-disk для жестких дисков теперь используется scsi-hd, а для CD-ROM - scsi-cd;
- Многочисленные исправления, связанные с обеспечением совместимости эмулятора CDROM со спецификацией ATAPI. Проведен значительный рефакторинг кода;
- Для перенаправления пакетов ICMP ECHO (ping) задействована появившаяся в ядре Linux 3.0 возможность создания непривилегированных ICMP-сокетов. Налажена поддержка DHCP в режиме host-only;
- В QMP (QEMU Monitor Protocol), базирующегося на JSON асинхронного протокола для взаимодействия пользовательских приложений с QEMU, добавлена поддержка команд inject-nmi и snapshot-blkdev-sync, устранены проблемы с работой парсера JSON, добавлен агент выполнения команд в гостевых окружениях;
- В код поддержки операционной системы Linux (linux-user) добавлена поддержка системных вызовов ppoll, sched_{g,s}etaffinity, epoll, pselect6 и prlimit64. Добавлена поддержка целевых платформ s390x и unicore32;
- В список обязательных для сборки зависимостей добавлена библиотека glib-2.0, а в список опциональных зависимостей добавлены libcurl 7.15.4 и spice 0.6.0.