Proxmox ssd emulation что это

Обновлено: 05.07.2024

Приветсвую! Есть 2 практических вопроса мучающих мучающих меня при сборке нового сервера.

1. Если гипервизор (в частности proxmox) будет стоять на SSD с f2fs файловой системой (в целях бережного обращения с SSD), то виртуальные машины (KVM) имея например ext4 внутри себя, физически на SSD будут писаться в рамках f2fs? Т.е. получается что на ВМ все равно какая файловая система?

2. F2fs призвана продлить работу SSD путем того что запись производится равномерно. А если стоит контроллер рейд и используется рейд 5 например? На это все ставится f2fs, то она будет иметь какое-то значение, ведь физикой управлять будет рейд контроллер?

Хочу узнать ваши мнения. Может кто напишет что дельное.


> 1. Если гипервизор (в частности proxmox) будет стоять на SSD с f2fs
> файловой системой (в целях бережного обращения с SSD), то виртуальные машины
> (KVM) имея например ext4 внутри себя, физически на SSD будут писаться
> в рамках f2fs? Т.е. получается что на ВМ все равно какая
> файловая система?

Да. Нет. Вы забываете про кеширование и IOPS.

> 2. F2fs призвана продлить работу SSD путем того что запись производится равномерно.
> А если стоит контроллер рейд и используется рейд 5 например? На
> это все ставится f2fs, то она будет иметь какое-то значение, ведь
> физикой управлять будет рейд контроллер?

Дисками все равно будет рулить RAID. Про степень износа ячеек и равномерность он не в курсе.
Даже TRIM не все RAID контроллеры понимают.


lavr, спасибо за подробный ответ и статьи! Буду изучать.
Понимаю что мало пока понимаю. Но делать вот надо. придется вникать.
> Планируется 2 SSD в рейд-1 и 2 HDD в рейд-1.

Сдается мне что велика вероятность смерти двух SSD одновременно. износ ячеек теоретически одинаковый, а писаться будет одновременно в одинаковые ячейки.
Без spare-disk мне кажется сомнительная штука.

>> Планируется 2 SSD в рейд-1 и 2 HDD в рейд-1.
> Сдается мне что велика вероятность смерти двух SSD одновременно. износ ячеек теоретически
> одинаковый, а писаться будет одновременно в одинаковые ячейки.
> Без spare-disk мне кажется сомнительная штука.

а все кто использует SLOG на SSD для ZFS "и не знали", используют себе
по 2xSSD с ZIL в mirror, а некоторые в добавок и L2ARC в mirror.

SSD != HDD, вылетают блоки, SSD продолжает работать, разумеется что это
не может радовать, но есть некий timeout.

Собственно, интересней доклад Google об их опыте использования SSD и
неожиданных выводах.

image

Если кому интересно, мы тут недавно потестили производительность чтение/запись внутри windows машины на ноде с Proxmox 4.3.

Хостовая система была установленна на raid10 реализованный двумя разными способами (zfs и mdadm+lvm)

Тесты проводились на Windows-госте, так-как в первую очередь интересовала производительность именно этой ОС.

Должен признать, это вторая версия статьи, в первой была допущена фатальная ошибка:
zfs тестировался на local storage, а не на zvol, т.к. я до последнего думал, что proxmox не поддерживает zvol.
Огромное спасибо winduzoid за то, что заметил данное недоразумение.

Мысль о написании данной статьи навели коментарии к недавней статье про Установку PROXMOX 4.3 на Soft-RAID 10 GPT от vasyakrg. Не холивара ради, но я решил опубликовать наши недавние результаты.

Водные данные:

CPU: Intel® Core(TM) i7-3820 CPU @ 3.60GHz
RAM: 20GB (1334 MHz)
HDD: 4x500GIB (ST500NM0011, ST500NM0011, ST3500418AS, WDC WD5000AAKX-22ERMA0)
SSD: 250GiB (PLEXTOR PX-256M5Pro)
OS: Proxmox Virtual Environment 4.3-10

Виртуальная машина:

CPU: 8 (1 sockets, 8 cores)
RAM: 6.00 GiB
HDD: 60 GiB (virtio)
OS: Windows Server 2008 R2 Server Standard (full installation) SP1 [6.1 Build 7601] (x64)

Все результаты получены с помощью утилиты CrystalDiskMark 5.2.0 x64.
Каждый тест проводился в 5 итераций по 32GB.
Никаких дополнительных твиков и изменений не указанных в статье не вносилось ни в конфигурацию гипервизора ни в конфигурацию виртуальной машины. То есть использовался просто свежеустановленный Proxmox и восстановленная из бэкапа виртуалка с Windows.

Результаты:

Итак сами результаты:

Позже мы добавили в наш zfs-пул кэширующий SSD.

Ради интереса мы так же запустили тесты на одном SSD:

Графики:

Для наглядности я решил нарисовать несколько графиков

Скорость на последовательное чтение и запись:

image

image

Скорость на случайное чтение и запись:

image

image

Количество IOPS на случайное чтение и запись:

image

image

Выводы:

Не смотря на то, что результаты получились довольно необычные, а местами даже странные, можно заметить что raid10 собранный на zfs, с опцией cache=none для диска показал более хороший результат, нежели raid10 собранный на mdadm + lvm как на чтение, так и на запись.
Однако, с опцией cache=writeback raid10 собранный на mdadm + lvm заметно выходит вперед.

you refer to an old post, newer kernels and newer qemu version are in place now. for zfs, cache=writeback is the recommended setting.

Кроме того IlyaEvseev в своей статье писал, что writeback кэш дает хорошие результаты для виртулок с Windows.

По субъективной оценке, для ВМ с Windows оптимален writeback, для ВМ с Linux и FreeBSD — none.

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

Расскажу про свой опыт установки панели в Proxmox в KVM и задействовании режима trim для дисков.
Как говорит документация по Proxmox нужно с дисках включать режим discard, делать тип контроллера -VirtIO SCSI, а диски не VirtIO Block, а SCSI !
Опция discard включается галочкой (в русской версии называется "Отклонить"!).
Также я на всякий случай включил галочку "SSD emulation".
1. Сделал 2 диска: 80 под систему, 300 под папку /home
2. Ставил с CentOS-7-x86_64-Minimal-1908.iso
Выбрал ручное разбиение. LVM, Автоматическое разбиение, потом руками подправлял. Сделал 2 VirtualGroup по каждому диску в группе.
Ставил на ext4.

Переходим к предварительной настройке ОС.
3. Обновил систему
4. Установить qemu-guest-agent
5. Включить trim
5.1 По инструкции

Далее по инструкции
5.2 Добавил опцию discard в каждый диск (включая swap) в /etc/crypttab (он у меня пустой, поскольку шифрование не включал) и /etc/fstab
по принципу:
/dev/sda1 /boot ext4 defaults,discard 1 2
5.3 Установил issue_discards = 1 в /etc/lvm/lvm.conf
5.4 Перестроил initramfs ПЕРЕГРУЗИТЬСЯ.
Настройка trim завершена. Проверял - работает.
Вручную перед бекапом делать обязательно.

и будет вам счастье.

Можно включить почасово

6. Удалил старые ядра
2-е добавилось после начального обновления системы. Т.е. я старое удалил, новое оставил.

Установил в /etc/yum.conf installonly_limit=2 на будущее.

7. Удалить неиспользуемые локали, перестроить архив локалей

При этом консоли ssh закроются.
Подождать немного, что бы архив локалей перестроился и перегрузить.
Таким образом /usr/lib/locale/locale-archive уменьшается с 105мб до 5,5мб.

8. Я еще ставил себе ncdu - полезная утилита для просмотра размеров папок. Ну это кому нужно:

Для исключения ошибок (которые будут на этом этапе), установите gcc и ncurses

При желании вы можете удалить ncdu-1.14.2.tar.gz файл и каталог, в который были извлечены исходные файлы, так как они вам больше не нужны.

9. Установить brainycp
После установки всего-всего панель с системой у меня заняла 5,8Гб.
(правда я немного jail_skeleton подрезал)

Все.
Надеюсь, кому-то поможет.
Я с этим trim'ом день промучался и наэкспериментировался, но именно так все работает.

Добавлю еще свои фичи по настройке.
1) Со временем обнаружилось, что atop, как сервис, пишет много логов.
Отключил:

2) Далее возникла проблема с тем, что trim дисков делается, но на разделе swap все равно есть занятые блоки и он в бекап proxmox'a попадает, как занятое пространство.Для справки: proxmox считает блок на диске гостевой kvm пустым, если там записаны нули. Если не нули - блок занят.
trim на дисках работает, поэтому их не нужно забивать нулями, а со swap такое не проходит.
Поэтому перед бекапом я делал:

Почистил руками все архивные старые логи. Оставил только последние, без дат.
Не забываем проверить и удалить старые ядра. См. предыдущий пост. Если вы установили опцию installonly_limit=2 в /etc/yum.conf, то больше 2-х не будет.
Потом чистка неиспользуемых блоков на swap-разделе.

Соответственно подправьте для своих разделов /dev/dm-1 - у меня swap (узнать это можно через swapon -s)

Забивать нулями для swap нужно, поскольку я думаю, что swapoff только отключает и не очищает.
Раздел swap после забития нулями перестает быть разделом swap поэтому его нужно заново пересоздать mkswap.
После этого бекап в proxmox минимален.

Я хочу построить небольшой домашний сервер виртуализации на базе ProxMox. Требования к подсистеме хранения такие:

дедупликация при небольшом потреблении памяти. не обязательно inline, можно просто по расписанию. ZFS - все круто (“искаропки” есть кеширование, дедупликация и сжатие). Однако, дедупликация требует очень много памяти (>5GB на 1Tb данных). А также на производительность влияет неотключаемый Copy-On-Write. ext3/4 over LVM - быстрая и стабильная. можно сделать кеширование на SSD. Нет дедупликации. Нет сжатия. BTRFS over LVM - можно сделать кеширование на SSD. Есть дедупликация по запросу. Есть сжатие. Можно отключить Copy-On-Write (но тогда отключится сжатие). Virtual Data Optimizer - VDO суперштука. Модуль ядра, который реализует inline-дедупликацию и сжатие для томов LVM. Пока что доступен только в RedHat и непонятно что со стабильностью/производительностью/ресурсами.

Выбор пал на связку BTRFS over LVM. Она позволяет дедуплицировать данные по расписанию (с помощью duperemove), кешировать данные на SSD с помощью lvmcache.
Файлы образов дисков должны быть в формате qcow2, что позволит делать снепшоты.
Файловые системы контейнеров LXC можно хранить как в виде образов, так и просто в папках на BTRFS. Последний вариант будет скорее всего быстрее (вследствие отсутствия loop-устройства), позволит дедуплицировать и\или сжимать файлы контейнеров средствами BTRFS.
Забегая вперед, скажу, что SSD кеш делает виртуальные машины ГОРАЗДО отзывчивее. Даже в условиях нехватки оперативной памяти.

ВНИМАНИЕ.

Всем, кто решит использовать BTRFS + lvmcache на хосте ProxMox нужно помнить следующее:

lvmcache НЕ совместим с различными вариантами hibernate. Если вы попытаетесь выполнить pm-hibernate на хосте кешированными томами, то никакого hibernate не произойдет. Система просто перезагрузится, а данные на дисках будут повреждены. Я пробывал. использование BTRFS с флагом nodatacow (то есть отключение Copy-On-Write) наверное, немного поднимет производительность, но взамен сделает и без того не самую надежную файловую систему абсолютно неремонтопригодной. Отключится весь функционал, обеспечивающий надежность хранения (CoW и контрольные суммы). В результате, при повреждения файловой системы даже btrfs check использовать не получится (по причине отсутствия ctree).

Создание кешированного тома LVM

Пример конфигурации такой. два диска - /dev/vdb (SSD) и /dev/vdc (HDD). Создаем физичесике тома и группу томов test:

Создаем том с кешем на SSD:

Создаем том с данными:

И теперь собираем конструкцию:

Отсоединить кеш от тома можно командой:

Состояние тома можно поглядеть командой:

Тип кеша можно поменять командами:

Создание хранилища Proxmox

Для начала надо смонтировать том с параметрами noatime,nodiratime

Тестирование FIO

То есть тест блоками по 4k, случайные чтение и запись, глубина очереди 32, размер тестового файла - 1Gb, без кеширования на уровне Windows (direct=1).
Тесты запускались по три раза, чтобы тестовый файл попал в SSD-кеш.

LVM Cache/PM Cache/Format Read, MiB/s Write MiB/s Read IOPS avg, k Write IOPS avg, k CPU Read, % CPU Write, %
WB/NC/qcow2 133 100 34.0 25.6 26 0
WB/NC/raw 127 104 32.5 26,6 25 0
WB/WB/qcow2 158 107 40.5 27,4 0 0
WB/WT/qcow2 166 5.3 42.6 1.324 0 4
WB/WT/raw 154 5.47 39.5 1.335 0 3.5
WB/WB/raw 150 118 38.3 30.1 0 23
WT/WT/qcow2 213 0.046 54.5 0.011 21 0
WT/WB/qcow2 159 9.5 40.8 2.37 0 0.9
WT/NC/qcow2 128 0.612 32.8 0.152 12.5 0
WT/NC/raw 121 0.832 30.9 0.208 0 0
WT/WT/raw 288 0.041 73.7 0.010 56 0
WT/WB/raw 137 16.8 35.1 4.303 0 3.3
NC/WB/raw 146 4.4 37.3 1.099 0 0.4
NC/WT/raw 148 0.0476 37.8 0.011 0 0
NC/NC/raw 1.766 0.694 0.441 0.173 0 0.33
NC/NC/qcow2 1.830 0.244 0.457 0.061 0.86 0
NC/WT/qcow2 1.7 0.0465 0.449 0.011 0 0
NC/WB/qcow2 3.578 4.889 0.894 1.222 0 0.47

Результаты тестирования fio

Предсказуемо, стабильно высокие результаты при минимальной загрузке VCPU показал вариант, когда включено кеширование на LVM и Proxmox в режимах WriteBack. Его недостатком можно считать вероятность потери данных при выходе из строя SSD или отключении питания. Не сильно отстает конфигурация с кешированием только на SSD в режиме WriteBack. От выхода из строя SSD можно защититься, использовав два накопителя в зеркальном массиве. Разница между форматами qcow2 и raw несущественна, при большей функциональности qcow2. В режимах Writeback на уровне proxmox без кеширования на SSD на уровне lvm, скорость записи очень нестабильна. Она может быть как довольно высокой (3000-4000 IOPS), так и довольно низкой (500-1000 IOPS) и меняется произвольным образом. Режимы кеширования ProxMox WriteThrough - существенно ускоряют чтение (в 100 раз), но замедляют запись (в 5-20 раз) по сравнению с режимами без кеширования и writeback.

Тестирование с помощью CrystalDiskMark 6.0.2 x64

Тестирование производилось на VM - Windows Server 2008 R2, 4GB mem, 2 cores. Для тестирования виртуальной машине добавлен отдельный пустой диск 32Gb.
В качестве SSD cache выступал том LVM на SATA диске OCZ Vertex V2 EX.
Тест в Crystal Mark запускался по 3 раза, чтобы данные успевали закешироваться. В таблице приведены данные после третьего замера.
Параметры CrystalMark - 5, 1GiB.
Boot Time - время загрузки ОС от включения до появления приглашения Press Ctrl+Alt+Del.

1 - lvm cache - On WriteBack, proxmox cache - no cache, qcow2
2 - lvm cache - On WriteBack, proxmox cache - no cache, raw
3 - lvm cache - On WriteBack, proxmox cache - WriteBack, qcow2 . WARNING - Very High CPU Load while tests. Very Long test.
4 - lvm cache - On WriteBack, proxmox cache - WriteThrough, qcow2 WARNING - Very High CPU Load while tests. Very Long test.
5 - lvm cache - On WriteBack, proxmox cache - WriteThrough, raw WARNING - Very High CPU Load while tests. Very Long test.
6 - lvm cache - On WriteBack, proxmox cache - WriteBack, raw . WARNING - Very High CPU Load while tests. Very Long test.

Проверена скорость работы дисковой системы при хранении образов в общей хранилке с подключением по CIFS. Также она сравнивается с ранее измеренной скоростью работы Ceph.

Содержание

Две конфигурации. Одна для FIO с тестированием NAS/HCI и вторая для SYSBENCH, где и кластер Ceph расширен с 3 до 5.

  • 2x Xeon E5-2690 (8C/16T 3ГГц на процессор)
  • 194 GB ОЗУ
  • 1G Ethernet
  • HDD: adaptec 71605Q
  • Oracle Linux 8 с ZFS и Samba
  • Хранение: на контроллере Adaptec с 1ГБ ОЗУ и 12 HDD 3 ТБ HGST экспортированы как простые тома, на них из ОС создается ZFS RAIDZ3 c ashit=12 (4к). Дополнительно на контроллере включается MaxCache3.0 на двух SSD 480 ГБ Kingstone E50 в RAID1 с writeback на контроллере (т.е. вся запись идет на SSD и лишь затем на HDD, SSD суммарным объемом 480 ГБ используется как кеш на чтение и запись для ZFS и при всем времени теста емкость тестовых данных вмещалась в SSD).

5 серверов с одинаковой конфигурацией, на которых есть как локальный HDD, так и Ceph с двумя пулами, один на HDD и второй на SSD. Для тестов FIO использовались только 3 сервера в кластере с фактором репликации в 3.

  • 2x Xeon X5650 (6C/12T 2.5 ГГц на процессор);
  • 92 GB ОЗУ;
  • 1G Ethernet;
  • Proxmox 7.0-11;
  • Контроллер HP 410i без кеша на SSD, но с writeback;
  • local SSD: 1x480GB 2.5" Sata3 Kingstone 50E в качестве OSD Ceph;
  • local HDD: 3x300GB 2.5" 10k SAS в качестве OSD Ceph;
  • local HDD: 1x300GB 2.5" 10k SAS в качестве локальной системы хранения.

Oracle Linux 8 QEMU4/KVM 10 ГБ ОЗУ 100 ГБ диск qcow2 с включенным сжатием

Образ виртуальной машины находится на общей хранилке, поключенной по CIFS/Samba.

С помощью fio запускаются тесты на случайные чтение и записи по 4k и последовательные чтение-запись на 1М с большой очередью в 64 операции.

Тесты запускаются на самой хранилке (local native), с хоста на удаленной хранилке (remove native) и из виртуальной машины (remote qcow2). Нас интересует средняя латентность, пропускная способность и IOPS.

Для проведения тестирования надо задать папку, в которой будут тестовые файлы. Примеры ниже.

Кроме пропускной способности (bandwith) и IOPS измеряем латентность.

Также данные нормируем. local native по факту пишет со скоростью локального SSD, поэтому на эту скорость нормируем IOPS и приводим их относительно local native(но это плохо при чтении из ОЗУ). Также раз у нас пропускная способность канала 128 МБ/c, на неё нормируем пропускную способность

Для учета влияния задержек в сети, латентность с хоста на хранилку пингками по 4к составила 0.3 мс.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 700 732 694 1 5,47
CIFS, remote QEMU 275 2740 274 0,39 2,15
CIFS, remote native 111 4144 111 0,16 0,87
Ceph SSD, LXC 181 6624 177 0,26 1,41
Ceph HDD, LXC 133 6947 129 0,19 1,04
Local HDD, LXC 167 2632 166 0,24 1,30
Ceph SSD, QEMU 125 7074 118 0,17 0,98
Ceph HDD, QEMU 120 10690 114 0,16 0,94
Local HDD, QEMU 300 3464 296 0,43 2,34
Ceph SSD LXC/QEMU 1,50 QEMU в полтора раза медленнее на SSD
Ceph HDD LXC/QEMU 1,13 на HDD разница не существенна
Ceph LXC SSD/HDD 1,36 В Ceph SSD только на треть быстрее HDD
QEMU (CIFS remote) / (Ceph SSD) 2,32 Ceph SSD оказался медленнее удалённого CIFS в 2 раза

При последовательной записи QEMU сжала диск и поэтому пропускная способность больше пропускной способности сети (в 128 МБ/c) и видимо по этой же причине ниже латентность.

Т.е. использование сжатия на уровне образа ускоряет последовательную запись сжимаемых данных.

В целом SSD значительного преимущества не даёт, а от нативной производительности хранилки остаётся от 16 до 39%.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 26 10 6586 1 0,20
CIFS, remote QEMU 9 213 2410 0,37 0,07
CIFS, remote native 0,7 332 193 0,03 0,01
Ceph SSD, LXC 20 12 5169 0,78 0,16
Ceph HDD, LXC 21 11 5400 0,82 0,16
Local HDD, LXC 3,2 77 829 0,13 0,03
Ceph SSD, QEMU 25 80 6412 0,97 0,20
Ceph HDD, QEMU 3,2 621 829 0,13 0,03
Local HDD, QEMU 5 378 1291 0,20 0,04
Ceph SSD LXC/QEMU 0,81 видимо за счёт сжатия QEMU оказался на 20% быстрее LXC
Ceph HDD LXC/QEMU 6,51 для HDD LXC существенно быстрее QEMU
Ceph LXC SSD/HDD 0,95 в Ceph на случайное записи разницы между HDD и SSD существенной нет
QEMU (CIFS remote) / (Ceph SSD) 0,38 Ceph оказался быстрее CIFS

Случайная удалённая запись в QEMU раза в три медленнее по IOPS/MB и в 20 по латентности по сравнению с нативной скоростью общей хранилки.

Удивительно, но при случайной записи в Ceph разницы между SSD и HDD не наблюдается. Можно предположить, что это из-за записи через журнал и так как при линейной записи разница SSD/HDD не слишком велика, SSD особого прироста не даёт.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 9149 56 9149 1 72
CIFS, remote QEMU 11143 47 11137 1,22 87
CIFS, remote native 119 4661 116 0,01 0,93
Ceph SSD, LXC 18551 28 18648 2,04 145
Ceph HDD, LXC 18247 28 18242 1,99 145
Local HDD, LXC 156 2512 155 0,02 1,22
Ceph SSD, QEMU 10439 49 10435 1,14 81,55
Ceph HDD, QEMU 170 18480 164 0,02 1,33
Local HDD, QEMU 118 5111 115 0,01 0,92
Ceph SSD LXC/QEMU 1,79 Чтение из ОЗУ смысла сравнивать нет
Ceph HDD LXC/QEMU 111,23 Чтение из памяти сравнивать смысла нет
Ceph LXC SSD/HDD 1,02 Чтение из памяти сравнивать смысла нет
QEMU (CIFS remote) / (Ceph SSD) 1,07 Данные нет смысла сравнивать, а отсутствие разницы объясняется, что чтение и в том и в другом случае шло из ОЗУ

Видно, что и QEMU и нативное чтение на хранилке идут из ОЗУ. ZFS видимо игнорирует direct-чтение. Причем QEMU читает не из ОЗУ сетевой хранилки, а из собственной памяти.

А вот удаленное чтение из хоста оказывается медленным.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 580 0,006 149427 1 4,53
CIFS, remote QEMU 117 11 30183 0,20 0,91
CIFS, remote native 1,2 202 318 0,0021 0,01
Ceph SSD, LXC 1216 205 311347 2,08 9,50
Ceph HDD, LXC 660 0,3 168969 1,13 5,16
Local HDD, LXC 3 85 760 0,01 0,02
Ceph SSD, QEMU 61 33 15735 0,11 0,48
Ceph HDD, QEMU 2,3 587 900 0,01 0,02
Local HDD, QEMU 1,6 1097 473 0,0032 0,01
Ceph SSD LXC/QEMU 19,79 Чтение из ОЗУ сравнивать смысла нет
Ceph HDD LXC/QEMU 187,74 Чтение из ОЗУ сравнивать смысла нет
Ceph LXC SSD/HDD 1,84 Чтение из ОЗУ сравнивать смысла нет
QEMU (CIFS remote) / (Ceph SSD) 1,92 Сравнивать смысла нет так как чтение из ОЗУ

Результаты опять неадекватные.

Тестам на чтение доверять нельзя, так как в действительности оно может идти из ОЗУ.

По записи удивительно то, что на сжимаемых данных QEMU может оказаться быстрее аналогичной записи из хоста. Это можно связать с особенностями архитекторы qcow2.

При последовательной записи Ceph в 2 раза медленнее удалённого хранения CIFS, но только если в QEMU используется сжатие. Локальный жесткий диск даёт производительность сравнимую с Ceph SSD и может превосходить запись по сети на SSD.

При случайной записи по 4k Ceph оказался быстрее удалённого хранилища по CIFS. Можно предположить, что это в результате того, что один из OSD Ceph оказывается локальным диском и оверхед Ceph при записи на локальный диск оказывается меньше оверхеда на запись по сети на CIFS. Но при случайных операциях на Ceph существенной разницы между SSD и HDD нет при использовании LXC, но есть разница в 6 раз при использовании QEMU. Можно предположить, что это из-за большого оверхеда QEMU на случайных записях.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 355 0,05 21488 1 2,77
CIFS, remote QEMU 326 0,05 20880 0,97 2,55
CIFS, remote native 89 0,17 5722 0,27 0,70
Ceph SSD 28 0,55 1803 0,08 0,22
Ceph HDD 25 0,62 1596 0,07 0,20
local HDD 174 0,09 11129 0,52 1,36

Видимо SYSBENCH пишет хорошо сжимаемые данные и они настолько хорошо жмутся, что QEMU их пишет почти на скорости локального хранилища и запись упирается в возможности хранилки, при этом формально превышая скорость подключения к хранилке по Ethernet в 120 МБ/c.

Ceph SSD и Ceph HDD оказались малоразличимы между собой, при этом их задержка примерно в три раза больше задержки записи хоста по CIFS и во столько же раз ниже IOPS/bandwith.

Интересно, что локальный диск обогнал сетевые хранилища даже с SSD.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 3503 0 224219 1 27,37
CIFS, remote QEMU 154 0,1 9874 0,04 1,20
CIFS, remote native 29 0,53 1886 0,01 0,23
Ceph SSD 18 0,85 1180 0,01 0,14
Ceph HDD 16 1 1003 0,0045 0,13
local HDD 151 0,1 9633 0,04 1,18

Нативная скорость чтения хранилки показала скорость обмена с ОЗУ (3.5 ГБ/c) и 224 тыс. IOPS на чтение.

QEMU опять хорошо сжался и превысил скорость канала и опять опередил в 6 раз несжатую скорость хоста.

Ceph SSD/HDD опять аутсайдеры и опять мало отличаются между собой.

Локальный диск по случайному совпадению оказался близок к работе QEMU.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 337 0,42 21589 1 2,63
CIFS, remote QEMU 16 8,93 1018 0,05 0,13
CIFS, remote native 95 1,49 6110 0,28 0,74
Ceph SSD 5,52 25,7 353 0,02 0,04
Ceph HDD 5,37 26,3 344 0,02 0,04
local HDD 135 1,0 8647 0,40 1,05

Локальная запись на хранилке опять уперлась в 21 тыс. IOPS.

QEMU сильно просел и оказался в 6 раз медленнее скорости записи хоста по сети.

Ceph SSD/HDD опять показал самый низкий результат со смешными 350 IOPS и латентностью как у HDD.

Локальный диск опередил сетевую запись.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 4179 0,04 267511 1 32
CIFS, remote QEMU 118 1,32 7591 0,03 0,92
CIFS, remote native 110 1,41 7065 0,03 0,86
Ceph SSD 170 0,9 10930 0,04 1,33
Ceph HDD 58 2,7 3714 0,01 0,45
local HDD 154 1,0 9854 0,04 1,20

Чтение на хранилище идет из ОЗУ на скорости 4 ГБ.

QEMU и чтение хоста по сети показывают близкие результаты примерно на скорости интерфейса.

Ceph SSD впервые в тесте значительно отличается от Ceph HDD (в 3 раза), но при этом Ceph SSD лишь немного опережает локальный HDD.

То, что Ceph SSD больше 120 МБ/c можно объяснить тем, что часть данных считалось с локального OSD.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 76 1,87 4838 1 0,59
CIFS, remote QEMU 56 2,54 3574 0,74 0,44
CIFS, remote native 61 2,32 3905 0,81 0,48
Ceph SSD 52 2,7 3337 0,69 0,41
Ceph HDD 47 3,0 3002 0,62 0,37
local HDD 24 5,9 1534 0,32 0,19

Максимальная скорость здесь у хранилища при локальном чтении дисков, но только лишь 76 МБ/c при 4838 IOPS. Т.е. уперлись в систему хранения даже не смотря на использование SSD-кеша на запись.

Производительность QEMU и хоста при работе с сетью несколько меньше и сравнимы с Ceph SSD.

Явным аутсайдером является только локальный HDD, но и он смог выдать 1.5 тыс. IOPS, что неплохо для одиночного жесткого диска.

system bandwith avg, (MB/s) latency avg, (msec) IOPS avg iops normalized bw / (128 MB/s)
CIFS, local native 1958 0,08 125358 1 15
CIFS, remote QEMU 118 1,3 7590 0,06 0,92
CIFS, remote native 109 1,41 7000 0,06 0,85
Ceph SSD 114 1,35 8100 0,06 0,89
Ceph HDD 15 10,3 948 0,01 0,12
local HDD 6,1 23,2 391 0,0031 0,05

Для чтения с хранилки опять читаем из ОЗУ.

QEMU, чтение хоста по сети и Ceph SSD опять оказались близки друг к другу и работают примерно на скорости сети.

Чтение с HDD хоть с Ceph HDD, хоть с локального HDD оказалось очень медленным, всего 6015 МБ/c, что типично для HDD при случайных операциях.

Поведение при случайных операциях и последовательных принципиально отличается.

При случайных операциях QEMU, Ceph SSD, обращение с хоста по сети выдают близкие результаты. Локальный HDD оказывается аутсайдером, а Ceph HDD оказывается быстрее локального HDD, видимо за счет распараллеливания запросов.

При последовательном чтении такого единства нет и QEMU может читать из ОЗУ даже при флаге DIRECT, а локальный жесткий диск может превосходить сетевые по скорости и даже подключенные по сети SSD.

Для ряда задач уперлись в скорость сети, также следует обращать внимание на латентность и переход на 10G может не только снять ограничение там где скорости близки к 120 МБ/c, но и снизить латентность и повысить IOPS для случайных операций.

Читайте также: