СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

H Немного о дисковой производительности Windows VM в Proxmox VE. Резултаты бенчмарков ZFS и LVM в черновиках

image


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


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


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


Забегая вперед скажу, что mdadm+lvm почти по во всех тестах показал себя с более хорошей стороны нежели чем zfs, даже не смотря на то, что в zfs был добавлен кэширующий SSD.
Так же в результатах теста можно увидеть насколько writeback кэш влияет на скорось чтения и записи.



Мысль о написании данной статьи навели коментарии к недавней статье про Установку 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


Результаты:


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


raid10 on zfs + ssd (writeback cache):

-----------------------------------------------------------------------
CrystalDiskMark 5.2.0 x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :   532.160 MB/s
  Sequential Write (Q= 32,T= 1) :   281.028 MB/s
  Random Read 4KiB (Q= 32,T= 1) :    20.564 MB/s [  5020.5 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     7.821 MB/s [  1909.4 IOPS]
         Sequential Read (T= 1) :   854.433 MB/s
        Sequential Write (T= 1) :   249.158 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     2.620 MB/s [   639.6 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     7.613 MB/s [  1858.6 IOPS]

  Test : 32768 MiB [E: 0.1% (0.1/60.0 GiB)] (x5)  [Interval=5 sec]
  Date : 2016/11/08 10:15:08
    OS : Windows Server 2008 R2 Server Standard (full installation) SP1 [6.1 Build 7601] (x64)

запуск виртуалок на zfs без кэша не поддерживается, так что результатов с 'no cache' не будет.


raid10 on mdadm + lvm (wrtiteback cache):

-----------------------------------------------------------------------
CrystalDiskMark 5.2.0 x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :  1084.752 MB/s
  Sequential Write (Q= 32,T= 1) :   503.291 MB/s
  Random Read 4KiB (Q= 32,T= 1) :    31.148 MB/s [  7604.5 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :   203.832 MB/s [ 49763.7 IOPS]
         Sequential Read (T= 1) :  1890.617 MB/s
        Sequential Write (T= 1) :   268.878 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    33.369 MB/s [  8146.7 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :    54.938 MB/s [ 13412.6 IOPS]

  Test : 32768 MiB [E: 0.1% (0.1/60.0 GiB)] (x5)  [Interval=5 sec]
  Date : 2016/11/08 14:55:15
    OS : Windows Server 2008 R2 Server Standard (full installation) SP1 [6.1 Build 7601] (x64)

raid10 on mdadm + lvm (no cache):

-----------------------------------------------------------------------
CrystalDiskMark 5.2.0 x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :   274.338 MB/s
  Sequential Write (Q= 32,T= 1) :   171.358 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     3.489 MB/s [   851.8 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     0.927 MB/s [   226.3 IOPS]
         Sequential Read (T= 1) :   233.437 MB/s
        Sequential Write (T= 1) :   183.158 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     0.522 MB/s [   127.4 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     2.499 MB/s [   610.1 IOPS]

  Test : 32768 MiB [E: 0.1% (0.1/60.0 GiB)] (x5)  [Interval=5 sec]
  Date : 2016/11/08 15:21:41
    OS : Windows Server 2008 R2 Server Standard (full installation) SP1 [6.1 Build 7601] (x64)

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


ssd-drive (wrtiteback cache):

-----------------------------------------------------------------------
CrystalDiskMark 5.2.0 x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :  1587.672 MB/s
  Sequential Write (Q= 32,T= 1) :   524.242 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   248.953 MB/s [ 60779.5 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :   320.532 MB/s [ 78254.9 IOPS]
         Sequential Read (T= 1) :  2481.313 MB/s
        Sequential Write (T= 1) :   825.351 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    58.060 MB/s [ 14174.8 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :    59.725 MB/s [ 14581.3 IOPS]

  Test : 32768 MiB [F: 0.1% (0.1/60.0 GiB)] (x5)  [Interval=5 sec]
  Date : 2016/11/09 13:28:20
    OS : Windows Server 2008 R2 Server Standard (full installation) SP1 [6.1 Build 7601] (x64)

ssd-drive (no cache):

-----------------------------------------------------------------------
CrystalDiskMark 5.2.0 x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :   526.147 MB/s
  Sequential Write (Q= 32,T= 1) :   361.292 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   189.502 MB/s [ 46265.1 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    78.780 MB/s [ 19233.4 IOPS]
         Sequential Read (T= 1) :   456.598 MB/s
        Sequential Write (T= 1) :   368.912 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    18.632 MB/s [  4548.8 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :    32.528 MB/s [  7941.4 IOPS]

  Test : 32768 MiB [F: 0.1% (0.1/60.0 GiB)] (x5)  [Interval=5 sec]
  Date : 2016/11/09 12:56:31
    OS : Windows Server 2008 R2 Server Standard (full installation) SP1 [6.1 Build 7601] (x64)

Графики:


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


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

image


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

image


Количество IOPS на чтение:

image


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

image


Выводы:


Я хотел потестировать zfs в режиме zvol (блочные устройства), мне кажется здесь он мог бы показать результаты получше. Но в настоящее время zfs-драйвер в proxmox поддерживает размещение дисков только в файловой системе.


Для себя мы решили, что zfs в той конфигурации что сейчас есть, не смотря на активное продвижение со стороны proxmox, пока что не в состоянии обеспечить такую же производительность, какую способна обеспечить класическая связка mdadm+lvm.


Так же достаточно хороших результатов позволяет добится включение writeback-кэша для Windows виртуальных машин. Но стоит отметить, что для Linux-виртуалок эта опция не прибавит производительности. (они и так хорошо работают)


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

+3
~1100

комментарии (23)

0
MaksVasilev ,  
Для более полной картины стоило бы протестировать ещё btrfs для комплекта к zfs.
0
kvaps ,  

Btrfs уже вывел из беты свою raid-подсистему?

0
+1 –1
MaksVasilev ,  
Уже несколько лет назад. А вот про ZSF такой информации у меня нет.
0
kvaps ,  

Хм, не знал, спасибо за информацию, надо будет затестить.


Но есть проблема и заключается она в том, что btrfs не поддерживает создание виртуальных блочных устройств как lvm или zfs, а для образов виртуальных машин, хранящихся в файловой системе, предлагают отключать copy-on-write, что бы иметь хорошие показатели, что вообще теряет всякий смысл использовать btrfs для хранения образов файловой системы.
Производительность точно будт не лучше чем на lvm.

0
kvaps ,   * (был изменён)

Тем не менее поддержка raid в zfs была реализована еще в самых первых релизах, а raidz (улучшенный raid5) является одной из ключевых особенностей этой системы, чего нельзя сказать про btrfs.

+2
ildarz ,   * (был изменён)
Когда с 4-х SATA дисков снимается 7-8К IOPS на случайном чтении, сразу возникает вопрос, а что именно вы такое странное натестировали.
0
kvaps ,  

Согласен, результаты получились довольно необычные, но на мой взгляд достаточно показательные :)

0
evg_krsk ,  

У вас получается, что включение writeback-кэша на запись в разы ускоряет последовательное чтение с SSD. Разве такое может быть?

0
kvaps ,  

Я привел только голые цифры, никаких дополнительных твиков не описанных в статье я не применял.
На сколько я понимаю режим cahce=writeback кэширует как операции записи так и чтение с диска.

0
1exx ,  
Да, может, и не только с SSD — в режим writeback чтение/запись гостевой системы кешируются хостом, что и даёт большую производительность ввода/вывода
0
maxitop ,  
У меня наоборот, выключение writeback-кэша для Windows виртуальных машин, добавило производительности в целом.
0
gotch ,  
Как вы считаете, в чем причина такого результата?
+1
kvaps ,  

Во первых: proxmox не использует блочные тома zfs (zvol), а хранит диски прямо в файловой системе. В отличии от lvm, где обращение идет напрямую к тому минуя файловую систему, а это согласитесь уже на уровень абстракций меньше.


Во вторых: я думаю что дело в особенностях работы самой zfs. Zfs вопреки своей гибкости и динамичности содержит более сложные алгоритмы сохранения данных, в следствии чего приходится расплачиваться бо́льшим количеством ресурсов.

+1
gotch ,  
Спасибо!
0
pessom ,  
А есть ли смысл в proxmox использовать ssd + lvm?
0
kvaps ,  

Имеет, в большинстве случаев это даст вам бо́льшую производительность, чем хранение образов в файловой системе.

0
pessom ,  
Спасибо, по наблюдениям заметил это как раз с HDD.
т.к. до какого то времени proxmox из коробки не использовал lvm и хранил образа в виде файлов в ФС.
И когда я мигрировал на сервер с lvm скорость по ощущениям возрастала.
+1
winduzoid ,   * (был изменён)

Странно. У меня все образы KVM-машин лежат именно в zvol:


root@pve02 ~ # zfs list -t volume
NAME                        USED  AVAIL  REFER  MOUNTPOINT
storage/kvm/vm-100-disk-1  2.70G  2.46T  2.70G  -
storage/kvm/vm-101-disk-1  4.92G  2.46T  4.92G  -
...

Вы точно при создании хранилища указали его тип, как "ZFS"?

0
ClayRabbit ,  
Вот-вот. И, кстати, zvol позволяет использовать «cache=none»
+1
kvaps ,  

Да, должен признать, я действительно ошибся, proxmox все таки умеет zvol, а конфигурация моего хранилища осталась в результате обновления с предыдущих версий proxmox, где zfs был только как local storage.
В новых версиях Proxmox используется уже zvol, так что переписал статью с тестами на zvol.
Спасибо за замечание!

0
amarao ,  
Потрясающая победа writeback над здравым смыслом. Сохранность данных не является приоритетом.
0
winduzoid ,  

Очень часто это действительно так.

0
kvaps ,  
На сколько я понимаю, это довольно спорный вопрос. Кроме того на официальном форуме proxmox есть информация о том что это устаревшая информация, и опция `cache=writeback` является рекомендуемой, во всяком случае, для zfs:
you refer to an old post, newer kernels and newer qemu version are in place now. for zfs, cache=writeback is the recommended setting.

Буду рад любым пояснениям на этот счет.