Тонкости эмулятора QEMU и хитрости ускорителя kqemu

Некоторое время назад я уже писал о найденных финтах QEMU - но со времён версии 0.7.2 эти финты несколько "заржавели", и к ним добавились новые. Так, в версиях QEMU 0.8 и далее есть поддержка USB и многопроцессорности, а ещё добавилось возможностей у kqemu. Об этом я расскажу ниже в посте.

Ускоритель kqemu
У него прибавилось возможностей, которые позволяют ещё более ускорить работу эмулируемой ОС. Основная изюминка нового kqemu - возможность полной виртуализации: не только пользовательского кода ОС, но и кода ядра. Это существенно ускоряет дисковые операции и отрисовку интерфейса.

Полная виртуализация
Для этого нужно добавить ключ -kernel-kqemu в вызов эмулятора. Сие существенно ускоряет эмуляцию некоторых ОС. Фабрис Беллард для простых смертных в общих чертах объясняет тут, что ускорение от этого ключа будет для гостевых ОС на базе Linux 2.4.* максимальным, меньше для Linux 2.6.*, а так же для Зла2000 и ЗлаХП (но это нельзя использовать при инсталляции).

Здесь углублённая техническая документация по ускорителю kqemu - так как я мало что из неё понял (ибо не программист), просто дам ссылку.

Поэтому при вызове эмулятора:

'-no-kqemu' пишем, если эмулируем экзотические ОС (типа ReactOS, Haiku, MenuetOS и тому подобное). Это позволит нормально запуститься гостевой ОС и работать устойчиво. Но это существенно снижает скорость работы гостевой ОС и повышает нагрузку на вентилятор процессора :-)

'-kernel-kqemu'
- пишем, чтобы включить полную виртуализацию для Linux 2.4, Linux 2.6, Зла2000 и ЗлаХП. Это приводит к заметному ускорению эмуляции (1.5-2 раза) гостевых ОС без потери точности эмуляции. При этом, если запросить у эмулятора (CTRL+ALT+ цифра 2) info kqemu, он должен написать kqemu support: enabled for user and kernel code

- если не писать ничего, то только пользовательский код выполняется на процессоре хост-системы, а код ядра динамически транслируется. При этом (CTRL+ALT+ цифра 2) info kqemu будет писать kqemu support: enabled for user code

Поддержка полной виртуализации есть для 32-разрядных систем - для 64-разрядных только в экспериментальной стадии. В случае Зла2000/Хп нельзя использовать полную виртуализацию при установке!

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

Распараллеливание эмуляции
Для этого существует ключ '-smp n', где n - число процессоров (по умолчанию 1). Странно, но у меня при тестировании это привело не к ускорению, а к замедлению эмуляции: тот же Кноппикс опознавал систему как двухпроцессорную, но при этом работал медленнее, чем при однопроцессорном режиме.

Заключение
Это, конечно же, не все возможности QEMU и kqemu - в этом посте упор делается на описание возможностей kqemu по части полной виртуализации и ускорения тем самым эмулируемых ОС. При этом использовалась информация отсюда хотя и на английском.

4 комментариев: |высказаться!| RSS-лента дискуссии.|
Анонимный комментирует...

Доброго времени суток, уважаемый virens. Вопрос следующий. Необходимо эмулировать процесс установки и дальнейшую работу на "слабой" машине, например Р2 266. Как подставить в эмулятор процессор который хотелось бы увидеть в действии? С памятью, дисплеем, винтом все описано в манах, потому вопрос не возникает. Заранее благодарен за любые ответы!

virens комментирует...

Последние версии QEMU позволяют эмулировать процессоры при помощи ключа -cpu

Анонимный комментирует...

Запускаю qemu под зломХР. Ставлю гостевую ось тоже ЗлоХР. В командной строке запуска опция -kernel-kqemu есть, но info kqemu всё-равно выдает disabled. Как то можно включить этот режим под злом для зла? :)

Анонимный комментирует...

30.01.2009 11:28:00
Ещё вроде модуль kqemu нужно скомпилировать.

И ключ не "-kernel-kqemu", а "-enable-kvm". Видимо поменялось что-то в новых версиях.

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.