6

Я создаю новую настройку для своих виртуальных машин и проверяю, какой метод хранения самый быстрый. Моя тестовая среда состоит из жесткого диска с LVM на LUKS. Я создал один LV для диска виртуальной машины и повторно использовал его для обоих тестов, чтобы поддерживать одинаковое место на жестком диске для обеспечения постоянной производительности (скорость чтения / записи жесткого диска зависит от физического положения).

  • Ведущий: Arch Linux, ядро 4.12.8
  • Гость: Ubuntu Desktop 17.04

Производительность проверена командой:

    dd if=/dev/zero of=test bs=16M count=100 conv=sync

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

Команда:

qemu-system-x86_64 \
  -drive format=raw,file=/dev/mapper/vg_vm-lv_vm_test,if=virtio,aio=native,cache.direct=on \
  -net nic,model=virtio \
  -net user \
  -vga virtio \
  -display gtk,gl=on \
  -smp 3 \
  -cpu host \
  -machine type=pc,accel=kvm \
  -m 3G

Результаты (каждое значение представляет один прогон):

  • Создание нового файла: 98,4 МБ / с; 112 МБ / с
  • Запись в существующий файл: 62,5 МБ / с; 68,7 МБ / с; 64,8 МБ / с

Второй тест: создание ext4 на LV и помещение файла с необработанным изображением

Команда:

qemu-system-x86_64 \
  -drive format=raw,file=./ubuntu_17,if=virtio,aio=native,cache.direct=on \
  -net nic,model=virtio \
  -net user \
  -vga virtio \
  -display gtk,gl=on \
  -smp 3 \
  -cpu host \
  -machine type=pc,accel=kvm \
  -m 3G

Результаты (каждое значение представляет один прогон):

  • Создание нового файла: 254 МБ / с; 242 МБ / с
  • Запись в существующий файл: 187 МБ / с; 189 МБ / с; 190 МБ / с

Третий тест: использование LV непосредственно в качестве диска виртуальной машины, различные настройки

Команда:

qemu-system-x86_64 \
  -drive format=raw,file=/dev/mapper/vg_vm-lv_vm_test,if=virtio,cache=none \
  -net nic,model=virtio \
  -net user \
  -vga virtio \
  -display gtk,gl=on \
  -smp 3 \
  -cpu host \
  -machine type=pc,accel=kvm \
  -m 3G

Результаты (каждое значение представляет один прогон):

  • Создание нового файла: 129 МБ / с; 125 МБ / с
  • Запись в существующий файл: 103 МБ / с; 97 МБ / с; 81,9 МБ / с

Вопрос

Ясно, что между этими двумя решениями есть разница, однако я ожидал, что необработанное блочное устройство будет, по крайней мере, так же быстро, как файл образа, потому что не должно быть никаких накладных расходов на файловую систему хоста. Я полагаю, что некоторое промежуточное кэширование происходит для образа файла или параметры для необработанного блочного устройства не оптимальны. Почему сырой ЛЖ медленнее в этом случае? Что я могу сделать, чтобы улучшить его производительность? Или если это должно быть медленнее, то почему?

РЕДАКТИРОВАТЬ: я добавил третий тестовый пример, используя настройки: http://www.linux-kvm.org/page/Tuning_KVM. Оказывается немного быстрее, но все же медленнее, чем изображение файла. Я также заметил, что с каждым запуском для существующего файла он становится медленнее - однако фрагментации не должно происходить при перезаписи файла, поэтому я не уверен, почему это происходит.

1 ответ1

6

Несоответствие размера блока может быть проблемой.

В идеале вы хотите сопоставить свою файловую систему с размером основного блока носителя. Хотя вы не поделились тем, что выбрали для размеров блоков, я думаю, у вас есть 4 килобайта для попытки Ext4 и 512 байт для LV. Если размер вашего основного носителя составляет 4 килобайта, то я думаю, что это объясняет как проблему скорости, так и скорость уменьшения. Поскольку вы, возможно, записываете только 512 в блок 4k, вы теряете 75% блока, и последующие записи будут использовать больше блоков, что приведет к дополнительным затратам и растрате.

Повторите тест, выбрав красиво подобранный размер блока файловой системы, соответствующий базовому размеру медиа блока. В этом случае попробуйте свой LV с размером блока 4k.

LVM добавляет немного больше накладных расходов, чем Ext4. Ответ на переполнение стека Итак, я думаю, это объясняет, почему это немного медленнее. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .