Назад | Перейти на главную страницу

Как эффективно поделиться папкой хоста с гостями KVM?

Я настраиваю службу, которая хранит множество файлов, загруженных nginx, в каталог / srv / storage на хост-системе. Эти файлы обрабатываются рабочими гостями KVM, которые могут создавать новые файлы или назначать расширенные атрибуты существующим. Файлы никогда не перезаписываются, но в конечном итоге удаляются одним из рабочих.

Таким образом, хост-сервер имеет скорость записи файлов около 177 МБ / с. Образ KVM - это файл QCOW2, хранящийся в файловой системе хоста, и благодаря этой настройке virtio изображение достигает ~ 155 МБ / с внутри экземпляра KVM:

<driver name='qemu' type='raw' cache='none' io='native'/>

Однако я не могу получить такие результаты для общей папки. Я получил макс 40 МБ / с с Virtfs он же virtio 9p. Похоже, для монтирования нет эквивалента AIO:

mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage

Я также думал о:

Итак, как эффективно поделиться папкой хоста с гостями KVM с работающими расширенными атрибутами).

Если ваша проблема связана с пропускной способностью, вам может быть полезно увеличить максимальный размер пакета. По умолчанию это 8 КиБ (msize = 8192).

Оптимальное значение может потребовать некоторых экспериментов и может варьироваться в зависимости от вашего использования и базовой файловой системы, но я обнаружил, что 256 KiB (msize = 262144) хорошо подходят для моих целей. Это увеличило пропускную способность с ~ 150 МБ / с до ~ 1,5 ГБ / с.

Смотрите также: https://lime-technology.com/forum/index.php?topic=36345.15

CIFS может делать расширенные атрибуты. Вы можете настроить его с помощью Samba в Linux.

Если вы решите предоставить общий доступ к LV-тому напрямую или через iSCSI, вы не сможете поделиться им как r / w без кластеризованной файловой системы. Если вам не хватает места, вы можете совместно использовать два тома, один для чтения / записи на хосте, а другой - на гостевом, в то время как другой pary будет иметь права только на чтение на томе, отличном от r / w. И синхронизируйте их с drbd или rsync.

Довольно уродливо, но именно это вы создаете, когда не можете использовать NFS

Наконец, я переключился с KVM на контейнеризацию LXC + Docker, которая поддерживает привязку монтирования. Выбранные каталоги хоста монтируются внутри контейнера. Поскольку нет подключения к сети или перевода, производительность такая же, как на хост-машине. Кроме того, несколько контейнеров могут записывать на один «том» одновременно без каких-либо эксклюзивных блокировок.