Кэширование в Qemu-KVM

< Назад
Содержание

Управляя режимом кэширования, можно влиять на производительность виртуальных окружений. В KVM и QEMU реализовано несколько режимов кэширования.

Иногда на хостовой машине может наблюдаться большой расход swap раздела. При полном заполнении swap раздела происходит резкое падение производительности сервера. Найти виновника пожирания swap раздела можно по этой статье…

Если виновником пожирания swap оказался процесс qemu-kvm, то можно отрегулировать этот момент. Например, можно вообще отключить использование swap хостовой машине в целях гостевой системы, или выбрать оптимальный режим кэширования.

Для ускорения операций ввода/вывода, операционная система обслуживает так называемый страничный кэш (page cache). Операции записи считаются завершенными после того как данные попадут в кэш. Операции чтения также могут выполняться быстрее если данные будут найдены в кэше. Страничный кэш периодически сбрасывает данные на диск используя системный вызов fsync. Запросы прямого ввода/вывода (Direct I/O) обходят страничный кэш и используют непосредственно сам диск. В KVM окружениях, собственный страничный кэш может быть как в хост-системе, так и в гостевом окружении, таким образом может получиться так, что одни и те же данные могут находиться в двух кэшах одновременно. В общем случае, будет лучше если отказаться от использования одного из кэшей. Если приложение в виртуальном окружении будет использовать запросы прямого ввода/вывода (Direct I/O), то кэш виртуального окружения не будет использоваться. Если же гостевое окружение запущено без использования средств кэширования, то простаивать уже будет кэш хост-системы и все запросы ввода/вывода гостевого окружения для хост-системы будут считаться прямыми запросами ввода/вывода.
Также известно что и у дисков есть свой собственный кэш (disk write cache).

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

KVM и QEMU поддерживают следующие режимы поддержки кэширования:

writethrough

  • Этот режим используется по умолчанию.
  • Использует только кэш хост-системы.
  • Дисковый кэш не используется.
  • Гарантируется целостность данных.
  • Производительность операций чтения значительно лучше (т.к. используется страничный кэш хост-системы).
  • Производительность операций записи может быть хуже (т.к. использование кэша дисковой записи запрещено).

writeback

  • Использует кэш хост-системы.
  • Используется дисковый кэш.
  • Высокая производительность операций чтения и записи.
  • Риск потери данных в случае сбоя питания.
  • Рекомендуется в случаях когда не страшна потеря данных.

none

  • Кэш хост-системы не используется.
  • Используется только дисковый кэш.
  • Операции записи будут быстрее т.к. запросы будут обходить кэш ОС и попадать сразу в дисковый кэш.
  • Целостность данных гарантируется в случае использования BBU или соответствующих средств файловых систем (опция монтирования barrier).
  • Производительность операций чтения будет хуже чем в writethrough-режиме (ограничение на использование страничного кэша ОС).

unsafe

  • Риск потери данных.
  • Рекомендуется использовать только там где не страшно потерять данные.
  • Не рекомендуется использовать в production окружениях.

Для локальных хранилищ или DAS (Direct-attached storage — дисковые полки) рекомендуется использовать writethrough режим, поскольку он гарантирует целостность данных и приемлемую производительность ввода/вывода. Для удаленных хранилищ (NFS или iSCSI) рекомендуется использовать режим none, т.к. операции прямого ввода/вывода (O_DIRECT) дают лучшую производительность чем синхронные (O_SYNC).

Управление кэшем дисковых устройств в QEMU определяется через параметр cacheуказываемый при определении дисков:

-drive if=virtio,file=/dev/vg01/kvm302-frontend-root,index=0,media=disk,cache=none

Для настройки надо открыть файл конфигурации виртуальной машины и подправить примерно так:

Или воспользоваться Virtual Manager

Или командой virsh edit <Имя виртуальной машины>

Настройки делаем при выключенной виртуальной машине. После запуска будет использоваться новый режим кэширования.

Авторизация
*
*

17 − семь =

Регистрация
*
*
*

10 + 3 =

Генерация пароля

10 + девять =