LINUX.ORG.RU

Крайне замедленная реакция виртуальной машины на нажатие клавиш

 , ,


0

1

Привет All!

Есть проблема с временем реакции.

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

В качестве guest machine используется Windows XP. Что интересно, когда у меня эта же виртуальная машина работала под Debian 7, задержки срабатывания конечно были, но не столь сильными. Но после того, как был установлен Debian 8, положение стало просто катастрофическим...

Первой мыслью было, что по каким-то причинам в новом окружении Windows XP стала некорректно обрабатывать нажатия на клавиши. После этого были внесены соответствующие правки в реестр, но успеха это не принесло.

Следующей мыслью было предположение, что сервер VNC по каким-то причинам стал медленнее работать под Debian 8. Был использован сервер spice и драйвер QXL. Результаты если и были, то крайне незначительными.

Третьей мыслью было предположение, что тормозит обмен по сети. Был установлен драйвер NetKVM/: Virtio Network driver. Проверка скорости на Speedtest.net by Ookla дала скорость 30 мб/с, т. е. ту скорость, которую дает провайдер. Таким образом, с сетевым интерфейсом вроде все в порядке.

Для проверки под Windows была написана программа, обновляющая графический экран 300 раз, и было определено время ее исполнения. На виртуальной машине время работы программы было 14-18 с в полноэкранном режиме и 12-14 с в окне. Для сравнения, та же программа под обычной Windows 7 выполняется за 5-7 с. Т.е. виртуализация тормозит конечно работу, но не столь катастрофически.

Да, чуть не забыл. В процессе всех экспериментов один раз удалось добиться нормального времени реакции. Но после перезагрузки виртуальной машины эффект не воспроизвелся...

Вопрос классический — что делать?

Всего хорошего. V. G.

Ответ на: комментарий от o-

Большое спасибо!

Предыдущие попытки поправить реестр успеха не принесли. Правка реестра по ссылке оказалась вполне удачной.

При нажатии на клавиши вертикального перемещения курсора в режиме автоповтора он иногда перемещается плавно, иногда - скачками, но перемещается!

Я правильно понимаю, что если использовать эмуляцию USB клавиатуры, то во время работы с виртуальной машиной нельзя будет работать с клавиатуры на host-машине?

Остались еще некоторые глюки, связанные, по-видимому с spice/QXL. Но это уже не так страшно.

Всего хорошего. V. G.

VG-2016 ()
Ответ на: комментарий от VG-2016

При нажатии на клавиши вертикального перемещения курсора в режиме автоповтора он иногда перемещается плавно, иногда - скачками, но перемещается!

Зачем ты вообще курсор двигаешь клавишами? Если у тебя там проблема с мышкой (когда она неправильно двигается, это вроде всегда на XP есть), то тебе надо просто в виртуалке сделать девайс ввода tablet. Тогда мышка будет просто работать.

Я правильно понимаю, что если использовать эмуляцию USB клавиатуры, то во время работы с виртуальной машиной нельзя будет работать с клавиатуры на host-машине?

Вообще я не очень понимаю, что ты имеешь ввиду под «работать с клавиатуры на host-машине» и у меня есть два варианта:

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

В общем ничего не измениться, просто девайс будет USB.

o- ()
Ответ на: комментарий от o-

Зачем ты вообще курсор двигаешь клавишами? Если у тебя там проблема с мышкой (когда она неправильно двигается, это вроде всегда на XP есть), то тебе надо просто в виртуалке сделать девайс ввода tablet. Тогда мышка будет просто работать.

Например, при редактировании текста. Либо, при прокрутке списка файлов в Far. Перемещение страницами (Page Up и Page Down) не всегда удобно.

Вообще я не очень понимаю, что ты имеешь ввиду под «работать с клавиатуры на host-машине» и у меня есть два варианта:

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

В общем ничего не измениться, просто девайс будет USB.

Вопрос возник вот по какой причине. Если работать с USB диском в host - машине, а после этого запустить виртуальную машину с этим же диском, то он отключается от host-машины и подключается к виртуальной машине. И понятно почему. Если работать с диском и с виртуальной машины и с host-машины одновременно, то будут последствия. Весьма неприятные. Хотя это достаточно странно, поскольку KVM работает через ядро и поддерживать когерентность файловых систем и там и там вроде бы сам бог велел. Но увы.... Собственно по аналогии я решил, что при запуске виртуальной машины с эмуляцией USB клавиатуры поток информации с неё будет поступать только в виртуальную машину. А при переключении - переходе в окно приложения на host-машине (при работающей виртуальной машине) требуются еще какие-то действия для перенаправления потока информации с клавиатуры из виртуальной машины в host-машину, как это необходимо делать с USB диском.

Всего хорошего. V.G.

VG-2016 ()
Ответ на: комментарий от VG-2016

Ясно.

Собственно по аналогии я решил, что при запуске виртуальной машины с эмуляцией USB клавиатуры поток информации с неё будет поступать только в виртуальную машину.

Для хостовой системы эмулируемых девайсов не существует. Даже если ты используешь захват ввод через окно QEMU / SPICE девайс все равно остается на хосте, даже хоткеи работают.

Другое дело если ты в виртуалку пробросишь мышку тем или иным способом, тогда да, на хосте её не будет.

o- ()
Ответ на: комментарий от o-

Для хостовой системы эмулируемых девайсов не существует. Даже если ты используешь захват ввод через окно QEMU / SPICE девайс все равно остается на хосте, даже хоткеи работают.

Т.е. если я сейчас работаю с виртуальной машиной в окне (или в полноэкранном режиме), то ввод с клавиатуры попадает в виртуальную машину. Если я переключился на приложение host-машины и окно, например, LibreOffice сейчас активно, то ввод с клавиатуры пойдет в это окно, а в виртуальную машину не пойдет. Я правильно понял?

Другое дело если ты в виртуалку пробросишь мышку тем или иным способом, тогда да, на хосте её не будет.

Собственно, под эмуляцией USB клавиатуры я и понимал что-то вроде проброса клавиатуры в виртуальную машину.

Всего хорошего. V. G.

VG-2016 ()
Ответ на: комментарий от VG-2016

Я правильно понял?

Правильно. Виртуальная машина это обычный юзерспейсный процесс у которого прямого доступа к железу нет если ты сам его ей не дал. Если ты её запускаешь с libvirt, то она работает вообще от другого пользователя и не имеет доступа к твоим иксам и вводу. В убунте libvirt вообще автоматически накрывается AppArmor и ни к чему лишнему доступа не имеет.

Конечно когда ты включаешь клиент SPICE (тоже было бы если бы ты запускал QEMU из под своего юзера ручками) он может зачем-то слушать твой вод постоянно, но оно конечно так не делает т.к такая «фитча» никому не нужна.

Собственно, под эмуляцией USB клавиатуры я и понимал что-то вроде проброса клавиатуры в виртуальную машину.

Нет, эмуляция это именно эмуляция. Если ты захочешь пробросить свою клавиатуру это можно сделать либо напрямую отдав девайс виртуалке, либо через SPICE (там есть опция USB redirect, но надо перед этим добавить к виртуалке USB redirector «spicevmc»).

o- ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.