Чрезвычайно медленный диск IO в qemu-kvm VM

У меня есть VM рабочий Debian Woody (ядро 2.4.18). Qemu-2.1.2, 2 ядра процессора, 512M RAM, qcow2 изображение, соединенное как IDE, ext3. Проблема - то, что диск IO является медленным. Вот является результат dd "сравнительным тестом" прямо после перезагрузки VM:

(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.2MB/s. Сам жесткий диск в порядке, запишите, что скорость о 70MB/s. Я попробовал различные настройки VM (incl "поточная обработка", и "usafe"), преобразовывая изображение в сырые данные, перемещая изображение в недавно отформатированную файловую систему (попробовал ext4 и btrfs). Никакое видимое различие.

Я также заметил проблемы скорости IO для другого VM's с более свежими ядрами, но не имел достаточного количества времени для тестирования их хорошо и использовал 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
2
задан 5 February 2015 в 23:48
2 ответа

Я все равно собирался это сделать, поэтому сделал несколько установок.

По умолчанию устройства в стиле 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. Удачи тебе.

2
ответ дан 3 December 2019 в 11:39

Я использую kvm с libvirt, используя небезопасные настройки и потоки для ввода-вывода сделать виртуальную машину действительно быстрой, конечно, небезопасно - значит НЕ использовать в продакшене. Для формата я использую raw без lvm

0
ответ дан 3 December 2019 в 11:39

Теги

Похожие вопросы