2/19/2007

QEMU: установка и первые впечатления от эмулятора QEMU

Теперь эмулятор QEMU полностью открыт, вместе с ускоряющим модулем, и поэтому устанавливать его стало значительно проще. Думаю, что скоро QEMU с kqemu войдут в состав дистрибутивов и позволит ставить его просто из пакетов, а не собирать из исходников. Так что теперь "эмулятор Linux" установить стало намного проще.

Ускоряющий модуль kqemu так же распространяется под лицензией GNU GPL. Безусловно, это ещё один повод попробовать в действии эмулятор QEMU - о чём далее и рассказывается.

Что нового?
Помимо окончательного "освобождения" ускоряющего модуля эмулятора QEMU, к версии 0.9 накопилось порядочное количество улучшений. Из основного:
  • поддержка многопроцессорности (гипертреадинг простаивать не будет);
  • поддержка USB;
  • увеличение скорости эмуляции kqemu (наш ответ VMware);
  • улучшена поддержка звука;
  • возможность сетевого соединения между несколькими эмулируемыми ОС.
Этого было достаточно, чтобы попробовать поставить QEMU v0.9.0 и kqemu v 1.3.0pre11, о чём говорится далее.

Особенности установки

Собственно, со времён этого поста изменилось не так много. Для работы требуются те же пакеты, однако теперь установка ускоряющего kqemu занимает отдельную операцию.

Подготовка
Качаем последние версии эмулятора и ускорителя отсюда, распаковываем архив с qemu в какой-нибудь временный каталог (например, ~/temp/). Ускоритель распаковываем в подкаталог (в нашем примере ~/temp/kqemu-x.y.z соответственно версии). Заголовки ядра (той же версии ядра, что сейчас работает - это важно!) и нужные пакеты, как и говорилось тут предполагаются установленными.

Если старая версия эмулятора присутствует в системе и использовалась с kqemu, не забудьте выгрузить модуль:
rmmod kqemu
Всё - теперь сборка и установка.


Сборка
Процесс сборки, если всё выполнено правильно, проблем не составляет: выполняем
penta4rce:~/temp/qemu-0.9.0# ./configure
На что должны получить в ответ что-то вроде:

Install prefix /usr/local
BIOS directory /usr/local/share/qemu
binary directory /usr/local/bin
Manual directory /usr/local/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path /root/temp/qemu-0.9.0
C compiler gcc
Host C compiler gcc
make make
install install
host CPU i386
host big endian no
target list i386-linux-user arm-linux-user armeb-linux-user sparc-linux-user ppc-linux-user mips-linux-user mipsel-linux-user m68k-linux-user i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu mipsel-softmmu arm-softmmu
gprof enabled no
profiler no
static build no
SDL support yes
SDL static link no
mingw32 support no
Adlib support no
CoreAudio support no
ALSA support no
DSound support no
FMOD support no
kqemu support yes
Documentation no

Выделенное красным означает, что эмулятор сможет запускать ОС в графическом режиме и с ускорением. После этого выполняем там же
make
и созерцаем длинные сообщения компилятора. У меня (P4-630 3GHz, 2Gb RAM, WD Raptor 36Gb) процесс компиляции занял около 7 минут. После чего пишем:
make install
Это ещё не всё - ускоритель kqemu собирается отдельно. Переходим в подкаталог с kqemu и конфигурируем его:
penta4rce:~/temp/qemu-0.9.0/kqemu-1.3.0pre11# ./configure
На что получаем в ответ что-то вроде:
Source path /root/temp/qemu-0.9.0/kqemu-1.3.0pre11
C compiler gcc
Host C compiler gcc
make make
host CPU i386

kernel sources /lib/modules/2.6.15.7/build
kbuild type 2.6
Далее как обычно:
make
make install
Возможно, потребуется снова поменять права на файл устройства:
chmod 666 /dev/kqemu
Иначе при запуске эмулятора будете получать сообщение о том, что kqemu не активен.

Для обладателей самосборных ядер особое предупреждение: убедитесь, что версия заголовков ядра, которые будет использовать kqemu при компиляции, и версия в данный момент работающего у вас ядра точно совпадают - иначе при попытке загрузить модуль:
# modprobe kqemu
будете получать сообщение об ошибке вида
FATAL: Error inserting kqemu (/lib/modules/2.6.15.7/misc/kqemu.ko): Invalid module format
Загрузить модуль не от той версии, естественно, не выйдет.

Теперь можно посмотреть, загрузился ли модуль:
lsmod | grep kqemu
Должно выдать:
kqemu 124068 0
Если при запуске эмулятор в консоль выдаёт что-то вроде:
$ qemu win.img
Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal
error, but for better emulation accuracy either use a 2.6 host Linux kernel or
type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.
то просто набираем
sudo echo 1024 > /proc/sys/dev/rtc/max-user-freq
как и советует эмулятор.
Насколько я понял, для эмулятора (и для Mplayer, кстати, тоже) нужен таймер высокого разрешения - Realtime Clock Timer с нужной частотой. Чтобы он отсчитывал время с большей точностью, соответственно. Это можно выставить при сборке ядра, но можно исправить потом, передав модулю rtc значение частоты через файловую систему переменных proc. Как и пишет программа, это не смертельно, но неприятно.

Модуль в памяти и ждёт, пока мы его нагрузим чем-нибудь полезным. Ждать ему осталось недолго...

Впечатления
Первое и главное, что сразу бросается в глаза - новая версия быстрее по сравнению с 0.7.2 на глаз вдвое (тесты, которые скоро опубликую, во многом подтверждают это впечатление). Особенно это видно при опознавании устройств различными LiveCD и работе с графическим интерфейсом (притормаживания Windows XP стали существенно меньше). Теперь можно запускать более 4 эмуляторов и выделять много памяти каждой системе. Так что наш "эмулятор Windows" теперь можно использовать для того, чтобы запускать целый зоопарк операционных систем.

Дабы не быть голословным и оживить пост - ниже скриншот с пятью разными ОС, запущенными на моём Debian GNU/Linux.


На этом скриншоте - весь мой зоопарк: OpenBeOS/Haiku (сборка сентябрь 2006, запускается с kqemu нормально), Knoppix Linux v5.1.1, ReactOS v0.3.0 (запущено с kqemu), FreeSBIE v2.0 и Windows XP в эмуляторе QEMU.

Следует отметить, что помимо скорости, повышена и точность эмуляции: так, например, Haiku и ReactOS теперь запускаются и с ускорением kqemu.

В общем, по сравнению с предыдущими версиями:
  • повышена скорость и точность эмуляции;
  • есть поддержка USB, многопроцессорности;
  • сняты ограничения на количество выделяемой памяти одной ОС и количество одновременно запущенных эмуляторов;
  • теперь эмулятор полностью OpenSource! Более того, есть сообщения, что QEMU вместе с kqemu уже появился в экспериментальной ветке Deiban.

Одним словом, замечательный открытый эмулятор QEMU стал ещё лучше, быстрее и точнее.

21 комментарий:

  1. по работе использовал qemu под зло для эмуляции другого зла. тоже вполне достойно. особенно учитывая размер по сравнению с VMware и более грамотную эмуляцию железа :)

    ОтветитьУдалить
  2. А ещё для него есть вкусный qemu-launcher.

    ОтветитьУдалить
  3. 2 Michael
    очепятка. VMware, а не WMvare
    Исправлено. Спасибо.

    2 dpwiz
    А ещё для него есть вкусный qemu-launcher.
    Посмотрю, сам не использовал спасибо.

    ОтветитьУдалить
  4. А не пробовали затестить KVM в новом ядре 2.6.20?

    ОтветитьУдалить
  5. 2 savagex
    А не пробовали затестить KVM в новом ядре 2.6.20?
    Собираюсь потестить, когда на ноутбук новое ядро поставлю. QEMU, как говорит автор, скоро тоже будет поддерживать KVM.

    ОтветитьУдалить
  6. sudo echo 1024 > /proc/sys/dev/rtc/max-user-freq

    не отработает, надо так:

    sudo sh -c "echo 1024 > /proc/sys/dev/rtc/max-user-freq"

    ОтветитьУдалить
  7. 2 Anonymous said...
    не отработает, надо так:
    sudo sh -c "echo 1024 > /proc/sys/dev/rtc/max-user-freq"

    Хоть бы написал, где "надо так". В убунте? У меня в дебиане всё работает.

    ОтветитьУдалить
  8. И опять не Debian-way.
    Debian-way, это поставить qemu из experimental - там как раз 0.9.0 лежит

    ОтветитьУдалить
  9. По поводу echo:
    есть конечно built-in, но в нормальной системе должен быть для совместимости
    /bin/echo
    в дебиане и производных оно есть в пакете coreutils.

    ОтветитьУдалить
  10. 2 GQ said...
    И опять не Debian-way.
    Debian-way, это поставить qemu из experimental - там как раз 0.9.0 лежит

    А он уже с ускорителем? А к моему самосборному ядру kqemu подойдёт? И потом, среди меток этого поста нет "дебиан" - стало быть, решение дистрибутивонезависимо. Ну, до некоторой степени :-)

    За информацию спасибо: стало быть, дебиановцы уже законопатили новый эмулятор. Но по experimental-ам не хожу, на сарже сижу :-)

    ОтветитьУдалить
  11. kqemu-source, из которого при помощи module-assistant собирается пакет с модулем, тоже есть.
    Да, пока в experimental, т.к. в unstable заиваются обновления для etch.
    А вообще, я смотрю ты постоянно пробуешь новый софт, смысл тебе сидеть на стабильной ветке? переходи на тестинг или на смесь дистрибутивов.

    ОтветитьУдалить
  12. 2 GQ
    kqemu-source, из которого при помощи module-assistant собирается пакет с модулем, тоже есть.
    Я стараюсь не сильно заморачиваться на дебиан-вэй - как проще, так и делаю. Мне проще собрать из исходников пару вещей и не вспоминать об этом больше.

    Да, пока в experimental, т.к. в unstable заиваются обновления для etch.

    У меня основная машина - рабочая. Это значит, что эксперименты на ней исключены вообще - только под эмулятором. Мне статьи писать надо, а не в линуксе колупаться.

    А вообще, я смотрю ты постоянно пробуешь новый софт, смысл тебе сидеть на стабильной ветке?
    Только в эмуляторах - мне в дебиане нужна стабильность и простота установки софта. Экспериментаторство с реальным железом - это мы уже проходили :-)

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

    ОтветитьУдалить
  13. Чего-то не выходит каменный цветок. Пишет ошибку зараза. Хотя и ядро стандартное и заголовки совпадают по версии. А не хочет, гад такой. Пишет
    andrey@andrey:~/Desktop/kqemu-1.3.0pre11$ sudo modprobe kqemu
    FATAL: Error inserting kqemu (/lib/modules/2.6.17-11-generic/misc/kqemu.ko): Invalid module format

    Есть мнение. что это даёт о себе знать неснесённая предыдущая версия, но на make uninstall в папке с исходниками, пишет, что нет такой команды. Может быть уважаемый virens сталкивался с чем-нибудь подобным?

    ОтветитьУдалить
  14. 2 Guest
    Чего-то не выходит каменный цветок. Пишет ошибку зараза. Хотя и ядро стандартное и заголовки совпадают по версии.
    Ага, у меня тоже такое было. Каменный цветок не выходил до тех пор, пока я не загрузился с тем ядром, от которого у меня остались заголовки. До этого modprobe упорно отказывался загружать модуль.

    Есть мнение. что это даёт о
    себе знать неснесённая предыдущая версия

    Мыслите в правильном направлении:
    1. Ссылка на заголовки ядра не той версии, что на исходники.
    2. Загружены под другим ядром.

    но на make uninstall в папке с исходниками, пишет, что нет такой команды.
    ;-) Конечно нет - кто ж будет ядро так удалять!? apt-get remove kernel-headers какой у вас там версии и снова же их поставить.

    Может быть уважаемый virens сталкивался с чем-нибудь подобным?
    Будучи горячим финским парнем, на эти грабли не преминул наступить :-) В моём случае всё было так: исходники и заголовки от ядра 2.6.15.7w, а загружен под 2.6.15.7 - модуль-то где надо появляется, но грузиться не грузится. Гуглил полчаса, пока дошло :-)

    ОтветитьУдалить
  15. Ни у кого не было проблемы с поднятием tun/tap (виртуальный сетевой интерфейс) под новой кемой? В старой версии (0.7.1) всё работало, а в новой интерфейс не поднимается.

    ОтветитьУдалить
  16. 2 Anonymous
    Ни у кого не было проблемы с поднятием tun/tap (виртуальный сетевой интерфейс) под новой кемой?
    Аксакалы говорили, что со времён 0.8.2 что-то поломали. Я ещё не пробовал, о результатах отпишусь.

    ОтветитьУдалить
  17. Тем, у кого возникнут проблемы при сборке qemu с помощью gcc 4 добро пожаловать сюда: http://marc.abramowitz.info/archives/2006/06/29/how-to-build-qemu-on-dapper/

    ОтветитьУдалить
  18. Эх, а у меня 0.9.1 около 40 минут компилировался на Sempron-2500...

    ОтветитьУдалить
  19. Не понять что имеется ввиду

    "FATAL: Error inserting kqemu (/lib/modules/2.6.15.7/misc/kqemu.ko): Invalid module format
    Загрузить модуль не от той версии, естественно, не выйдет."

    У меня стоит ядро Linux 2.6.9-023stab040.1
    Компиляция Qemu-0.9.1 проходит успешно. При распаковки ускорителя и запуск следующее:
    linux:~/temp/qemu-0.9.1/kqemu-1.3.0pre11# ./configure
    Source path /root/temp/qemu-0.9.1/kqemu-1.3.0pre11
    C compiler gcc
    Host C compiler gcc
    make make
    host CPU i386

    kernel sources /usr/src/linux
    kbuild type 2.6

    Соответственно выдает FATAL: Error inserting kqemu (/lib/modules/2.6.15.7/misc/kqemu.ko)
    Мне кажется вместо
    kernel sources /usr/src/linux должно быть
    kernel sources /lib/modules.
    Но папка modules пуста.

    Что необходимо сделать и как установить ускоритель?

    ОтветитьУдалить
  20. Что такое.. куему поставил.. все вроде работает.. ставлю винду хп и когда дохожу до места с разметвой диска, то не получается разметить.. указываешь размер раздела, а он не создает его, а просто возвращает тебя к тому экраму где приведен список дисков и не чего при этом не создает... Попробовал ставить Debian, который у меня стоит.. тот тоже отказался отформатировать мне раздел под FAT32.. да и под другими ФС тоже.. Еще пробовал создать и отформатировать раздел в Disk Director Suite 10, он вапще повис при выполнении форматирования.. Может я что т оне так делаю..Подскажите что такое, кто знает и понял о чем я :)

    ОтветитьУдалить