Страницы

Сохранить статью у себя в соцсети:

четверг, 14 июня 2012 г.

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

KVM guest caching.

Управляя режимом кэширования, можно влиять на производительность виртуальных окружений. В KVM и QEMU реализовано несколько режимов кэширования.
Для ускорения операций ввода/вывода, операционная система обслуживает так называемый страничный кэш (page cache). Операции записи считаются завершенными после того как данные попадут в кэш. Операции чтения также могут выполняться быстрее если данные будут найдены в кэше. Страничный кэш периодически сбрасывает данные на диск используя системный вызов fsync(2). Запросы прямого ввода/вывода (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


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

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

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика