Параметр cache=none показал наилучшие результаты в производительности и используется по умолчанию в Proxmox 2.x
- Родительский сервер не кеширует данные
- Диск виртуальной машины работает в режиме writeback
- Внимание: Как и при включении режиме кеширования writeback, в случае внезапного отключения питания существует большой риск потери данных. При использовании ядра < 2.6.37 на виртуальных серверах, следует использовать параметр barrier в настройках подключения дисковых разделов для предотвращения повреждения файловой системы.
Этот режим при использовании с qemu-kvm использует метод O_DIRECT при работе с образом виртуального диска или блочным устройством. И кеширование происходит прозрачно и дисковая подсистема работает напрямую между буферами виртуальной машины и устройством хранения данных. Поэтому когда текущее устройство хранения данных сообщит об удачном завершении записи при помещении данных в очередь записи, диск виртуальной машины будет уведомлен о том, что это именно writeback-кеш и виртуальная машина будет ожидать окончания записи перед сбросом своего дискового кеша.
Эквивалентно прямому доступу к диску родительского сервера. Отличное соотношение скорости и надежности.
cache=writethrough
- Родительский сервер использует кеш при чтении
- Диск виртуальной машины работает в режиме writethrough.
Writethrough выполняет fsync (синхронизация находящихся данных в памяти с диском) для каждой записи. Это более безопасный режим кеширования, так как возможность потери данных стремится к нулю. Но это сказывается на скорости работы в худшую сторону.
Этот режим при использовании с qemu-kvm использует метод O_DSYNC при работе с образом виртуального диска или блочным устройством. При этом методе кеширования информация об окончании записи поступает только тогда, когда данные были действительно помещены на устройство хранения.
Виртуальная машина принимает во внимание то, что кеширование writeback не используется, поэтому дисковый кеш не сбрасывается.
cache=directsync
- Родительский сервер не использует кеширование.
- Диск виртуальной машины работает в режиме writethrough.
Данный режим похож на writethrough, fsync производится для каждой записи.
Этот режим при использовании с qemu-kvm использует и O_DSYNC, и O_DIRECT методы при работе с образом виртуального диска или блочным устройством. В этом случае запись помечается завершенной только после того, как данные действительно помещены на устройство хранения и подходят для прозрачного кеширования на родительском сервере.
Как и при cache=writethrough это полезно для виртуальных машин тем, что они не сбрасывают дисковый кеш.
cache=writeback
- Родительский сервер использует кеш при чтении и записи
- Диск виртуальной машины работает в режиме writeback
- Внимание: В случае внезапного отключения питания существует большой риск потери данных. При использовании ядра < 2.6.37 на виртуальных серверах, следует использовать параметр barrier в настройках подключения дисковых разделов для предотвращения повреждения файловой системы.
Этот режим при использовании с qemu-kvm не использует ни O_DSYNC, ни O_DIRECT методы, поэтому виртуальная машина получает уведомление об удачной записи при помещении данных в кеш родительского сервера.
Виртуальная машина уведомлена о том, что используется writeback-кеш, поэтому будет ожидать отправки команды на сброс кеша. Аналогом может служить рейд-контролер с кешем в ОЗУ.
А каким образом cache=none мог показать наилучшие результаты? Смысл тогда использовать chache? Не упомянут важный момент на счет драйверов VirtIO или SCSI итд… ? Вобщем тема раскрыта поверхностно )
Статью читали вообще? Там русским по белому про кеши хоста и гостя написано.
А так то это выборочный перевод https://pve.proxmox.com/wiki/Performance_Tweaks#Disk_Cache