среда, 22 августа 2012 г.

KVM и виртуальные диски



KVM виртуализация имеет много возможностей для оптимизации и ускорения работы гостевой ОС. И нередко узким место является дисковая система. Каждая система виртуализации решает эту проблему по разному.

Предлагаю разобраться в том: что же предлагает kvm?

Итак, на данный момент, в стабильной версии 1.1.1,
имеется следующий выбор опций и их возможные значения, для параметра drive, при запуске kvm:

Диски (file=): qcow2, raw, vdi, vmdk, vpc
Шина (if=): ide, virtio, sd, mtd, pflash, floppy, scsi
Кэширование (cache=): writethrough, writeback, none, unsafe
Запись (aio=): thread, native

Что же из этого использовать? Что даст большую производительность? Попробуем ответить на эти вопросы.

Для начала определимся с тем "что есть что".

Диски:
  • qcow2 - формат диска, наиболее универсальный формат. Размер диска можно указать большой, а фактическое место занимаемое диском будет расти пропорционально объему информации "внутри". Формат поддерживает увеличение объема, шифрование, сжатие и снимки.
  • raw - сырой формат, используется по умолчанию
  • vdi - VirtualBox совместимый формат
  • vmdk - VMWare совместимый формат
  • vpc - VirtualPC совместимый формат (VHD)
 Шина (дисковый драйвер):
  • ide - медленный драйвер передачи данных, организованный аналогично работе ide-диска
  • virtio - был выбран в качестве основной "платформы" для виртуализации ввода-вывода в KVM
  • устаревшие: sd, mtd, pflash (в версии 1.1.1 не обрабатываются в опции -drive)
  • специализированные: floppy, scsi
 Кэширование:
  • writethrough (используется по default'у) - организованно "насквозь", т.е. запись происходит в кеш, и из кеша пишется сразу же на диск
  • writeback - запись в кеш, на диск же сброс идет только при flush'е (т.е. в фоне)
  • none - запись на диск идет в обход кеша
  • unsafe - запись на диск происходит неизвестно когда и не гарантируется что все данные записанны из кэша на диск, даже после flush'a (используется для разработки, debug'a и прочего)
     Внимание: не стоит забывать, что помимо хост-системы, кэш имеется в guest-системе, и на жестком диске. Эти кэши также влияют на производительность. Кэш должен организовываться в правильном сочетании с кэшами диска и guest-системы, для получения нужных параметров скорости и надежности.

 Запись (механизм):
  • native - "нативная" Linux aio
  • thread - эмуляция POSIX асинхронного ввода\вывода с использованием пула тредов
     Внимание: при использовании aio=native ( особенно в сочетании с cache=none) на sparse-дисках с файловой системой ext4 или xfs, результат может быть filesystem corruption. Для того чтобы это недопустить, нужно использовать один из следующих вариантов: aio=thread, фс не ext4/xfs а например ext3, не sparse-disk или заполнить его до полного объема 0-ями, выравнить все партиции guest-системы по отношению к файловой системе на host-системе.
 
     Внимание: для правильной и оптимальной оптимизации работы дисковых подсистем, рекомендую пройти по ссылке linux.org.ru Выравнивание .

  Исходя из имеющейся информации и очень большого кол-во результатов тестов kvm, посвященных разным опциям для дисков. Приведу сразу результаты этих тестов, которые я вынес для себя:

для всех виртуальных машин рекомендуется:
  file=block device или lvm, if=virtio, cache=none, aio=native
и для использования преимущественно только для чтения оптимальным:
  file=qcow2, if=virtio, cache=writeback, aio=native

  Как заявленно программистами, virtualization overhead KVM'а состовляет в среднем 14-15% ( эти данные были получены при file=lvm, if=virtio, cache=none, aio=native ).

Комментариев нет:

Отправить комментарий