Тонкая настройка виртуальной машины с поддержкой SPICE

Обычные приложения в основном не требуют тонкой настройки SPICE, однако если вы решили запустить игру, тонкая настройка виртуальной машины вам может пригодится. Так как virt-manager не предоставляет возможности настройки всех параметров виртуальной машины, придется воспользоваться как консолью или редактором доменов virsh. 

Экран

Как известно гипервизор QEMU не поддерживает 3D-ускорение, по этой причине запуск современных игр не представляется возможным без проброса видеокарты. Однако старые добрые игры, не требующие 3D-ускорения можно запустить без проблем с помощью SPICE.

Однако очень часто возникает проблема плохой прорисовки экрана виртуальной машины в процессе игры. 

Чтобы улучшить качество прорисовки QEMU принимает специальные параметры при запуске виртуальной машины определяющие параметры экрана:

  • image-compression
  • jpeg-wan-compression
  • zlib-glz-wan-compression
  • streaming-video

Внимание: Данный список параметров экрана получен из файла "qemu-options.hx" который формируется при компиляции исходного года QEMU (qemu - 1.2, spice - 0.12). Информация изложенная в черновом руководстве пользователя SPICE Draft #10 [http://spice-space.org/docs/spice_user_manual.pdf] - является устаревшей.
 
Параметр "image-compression" определяет алгоритм сжатия изображений, выводимых на экран виртуальной машины. В настоящее время применяются алгоритмы без потерь. Доступные значения:

  • "off" - не использовать алгоритмы сжатия изображений.
  • "quic" - использовать алгоритм основанный на базе алгоритма SFALIC  
  • "lz" - использовать алгоритм Lempel-Ziv
  • "glz" - использовать алгоритм Lempel-Ziv с основаным на истории глобальным словарем.
  • "auto_glz" - автоматический выбор между значениями lz, glz и quic.
  • "auto_lz" - автоматический выбор между значениями lz, glz и quic.

По-умолчанию используется значение "auto_glz".

Параметры "jpeg-wan-compression" и "zlib-glz-wan-compression" определяют будут или нет сжиматься изображения при передаче трафика через интернет по алгоритму jpeg и zlib соответственно. Доступные значения для обоих параметров:

  • "auto" - автоматический выбор в зависимости от скорости соединения.
  • "never" - никогда не сжимать.
  • "always" - всегда сжимать.

По-умолчанию используется значение "auto" - для обоих параметров.

Параметр "streaming-video" определяет будет или нет осуществляться обнаружение потокового видео. Доступные значения:

  • "off" - определение отключено
  • "all" - определение включено
  • "filter" - фильтрация содержимого

Примеры указания параметров при запуске из консоли

Сжатие изображений алгоритмом Lempel-Ziv с основаным на истории глобальным словарем:

kvm freedos.img -m 256 -smp 1,sockets=1,cores=1,threads=1 --spice port=5900,disable-ticketing,image-compression=glz -vga qxl

Сжатие изображений алгоритмом Lempel-Ziv без определения потокового видео

kvm freedos.img -m 256 -smp 1,sockets=1,cores=1,threads=1 --spice port=5900,disable-ticketing,image-compression=lz,streaming-video=off -vga qxl

Запуск из libvirt

Libvirt позволяет указывать параметры SPICE путем добавления соответствующих потомков в узел "graphics" XML-описания домена виртуальной машины.

Рассмотрим указание значений следующих параметров экрана

  • "image-compression" через атрибут compression узла image
  • "streaming-video" через атрибут mode узла streaming

Дополнительная информация о параметрах домена изложена на соответствующей странице документации libvirt [http://libvirt.org/formatdomain.html].

Например, узел graphics может иметь следующее содержимое:
 
  <graphics type='spice' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
      <image compression='glz'/>
      <streaming mode='off'/>
  </graphics>

Чтобы осуществить редактирование XML-описания домена виртуальной машины с помощью вашего любимого текстового редактора вы можете выполнить команду:

EDITOR=<редактор> virsh edit <имя_машины>

например:

EDITOR=nano virsh edit freedos

Результаты экспериментов

В результате многочисленных экспериментов выяснилось что сжатие изображений алгоритмом Lempel-Ziv (image-compression=lz) без обнаружения потокового видео (streaming-video=off) обеспечивает оптмальную производительность с незначительными искажениями при запуске игр.

Также выяснилось что для повышения производительности видеосистемы по возможности следует использовать видеокарту "qxl". Но к сожалению видеокарта QXL не поддерживает режим 256 цветов что не позволяет запускать некоторые игры.

При запуске игр, устаревший клиент Spicec отлично показывает себя даже на старых компьютерах, современные клиенты Spicy и RemoteViewer уступают ему в качестве прорисовки и в объеме потребляемых ресурсов.

Прочие параметры

Мышь

Параметр "agent-mouse" определяет будет или нет передоваться события мыши от vdagent. Доступные значения:

  • "on" - передача событий от vdagent включена
  • "off" - передача событий от vdagent отключена

По-умолчанию используется значение "on"

Если при запуске приложения курсор мыши перемещается резко как например в случае запуска игры "Fallout" необходимо отключить передачу событий мыши через vdagent с помощью данного параметра. В случае использования Libvirt в элемент "<graphics type='spice'..." можно добавить элемент-потомок следующего вида: 

<mouse mode='server'/> 

Где атрибут "mode" со значением "server" отключает использование vdagent в качестве источника событий мыши, значение 'client' включает  использование vdagent в качестве источника событий мыши.

Звук

Параметр playback-compression определяет будет или нет осуществляться потоковое сжатие звука (с помощью кодека CELT версии 0.5.1).

  • "on" - сжатие включено
  • "off" - сжатие отключено

По-умолчанию используется значение "on".

Буфер обмена

Для отключения буфера обмена необходимо добавить элемент в XML описание домена Libvirt:
<clipboard copypaste='no'/>
или добавить параметр "disable-copy-paste" в строку spice-параметров при запуске виртуальной машины из консоли.

Bonus: Добавление звуковой карты

В случае если вы решили поиграть в старые добрые игры из под DOS, вам не обойтись без эмуляции звуковых карт SoundBlaster (воспроизведение звуков) и Adlib (воспроизведение MIDI-мелодий). Для того чтобы приступить к использованию данных виртуальных звуковых карт вам необходимо убедится в том что их поддержка имеется в эмуляторе KVM с помощбю команды:

qemu-system-i386 -soundhw ?

Должен получится вывод вида:  
pcspk       PC speaker
sb16        Creative Sound Blaster 16
cs4231a     CS4231A
adlib       Yamaha YM3812 (OPL2)
gus         Gravis Ultrasound GF1
ac97        Intel 82801AA AC97 Audio
es1370      ENSONIQ AudioPCI ES1370
hda         Intel HD Audio

 
Если в списке в первом столбце отсутствуют значения "sb16" и "adlib" - значит в вашем распоряжении эмулятор без поддержки звуковых карт SoundBlaster и Adlib. Для того чтобы решить данную проблему вам потребуется установить из другого репозитория или самостоятельно скомпилировать эмулятор. 

В случае если данные звуковые карты доступны добавьте их в строку запуска виртуальной машины:

/usr/bin/kvm -M pc-1.0 -m 256 -hda freedos.img -vga std -soundhw sb16,adlib

или настройте домен libvirt путем добавления элементов:

<qemu:commandline>
  <qemu:arg value='-soundhw'/>
  <qemu:arg value='sb16,adlib'/>
</qemu:commandline>

в элемент "domain".

Внимание: Работа виртуальных звуковых карт SoundBlaster и Adlib в среде DOS не стабильна и может вызвать зависания виртуальной машины, по этой причине руководствуйтесь методом перебора (от простого к сложному) при настройке DOS-приложений.