У меня есть виртуальная машина под управлением Debian Woody (ядро 2.4.18). Qemu-2.1.2, 2 ядра процессора, 512 МБ ОЗУ, образ qcow2, подключенный как IDE, ext3. Проблема в том, что дисковый ввод-вывод выполняется медленно. Вот результат dd "бенчмарка" сразу после перезагрузки ВМ:
(none):~# time dd if=/dev/zero of=test1 bs=102400 count=100 100+0 records in 100+0 records out real 0m0.035s user 0m0.000s sys 0m0.020s (none):~# time dd if=/dev/zero of=test1 bs=102400 count=100 100+0 records in 100+0 records out real 0m0.022s user 0m0.000s sys 0m0.020s (none):~# time dd if=/dev/zero of=test1 bs=102400 count=100 100+0 records in 100+0 records out real 0m55.589s user 0m0.020s sys 0m0.560s
Если я посмотрю, что происходит на хосте, я вижу, что процесс qemu потребляет ~ 90% ЦП (из общего числа 600%), а чтение и запись составляет около 1,2 МБ / с. Сам HDD в порядке, скорость записи около 70МБ / с. Я пробовал различные настройки виртуальной машины (включая «потоки» и «usafe»), преобразовывал изображение в необработанное, перемещал изображение в свежеформатированную файловую систему (пробовал ext4 и btrfs). Никакой видимой разницы.
Я также заметил проблемы со скоростью ввода-вывода для других виртуальных машин с более свежими ядрами, но у меня не было достаточно времени, чтобы хорошо их протестировать, и я использовал монтирование NFS, чтобы обойти проблему.
Что здесь не так?
UPD Четный mount -t nfs ...
зависает. strace
Говорит, что mount()
вызов сам замирает:
mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS (Function not implemented) mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS (Function not implemented) mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS (Function not implemented) mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920[here it freezes for a several minutes]) = 0
Я все равно собирался это сделать, поэтому сделал несколько установок.
По умолчанию устройства в стиле IDE в этой настройке, похоже, работают со скоростью режима PIO, хотя haparm заявляет о DMA ... выполнение этого внутри виртуальной машины делает его примерно в 70 раз быстрее на моей машине.
hdparm -d1 /dev/hda
echo hdparm -d1 /dev/hda > /etc/rcS.d/S00hdparm.sh
chmod +x /etc/rcS.d/S00hdparm.sh
Другой вариант - использовать эмуляцию диска SCSI, в командной строке qemu замените это
-hda $DISK
с этим
-drive if=scsi,file=$DISK
дает эмуляцию устройства, совместимого с "sym53c8xx", которую программа установки определяет автоматически. Это дает хороший эффект: устройство будет называться «/ dev / sda», а не «/ dev / hda» в старом стиле.
Но будьте осторожны, переключить это на уже установленную систему непросто.
Примечание: использование ahci не сработает; Debian Woody появился раньше SATA.
PS: Мой дымовой тест на совместимость кажется в основном успешно, всего пара тупых флагов GCC. Удачи с твоей.
Я использую kvm с libvirt, используя небезопасные настройки и потоки для ввода-вывода, которые делают виртуальную машину действительно быстрой, конечно, небезопасно означает использовать НЕ в производстве. Для формата я использую raw без lvm