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

    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.


    Результаты:


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


    raid10(mdadm)+lvm, cache=none
    -----------------------------------------------------------------------
    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)

    raid10(mdadm)+lvm, cache=writeback
    -----------------------------------------------------------------------
    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(zfs), cache=none
    -----------------------------------------------------------------------
    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) :  1428.912 MB/s
      Sequential Write (Q= 32,T= 1) :   281.715 MB/s
      Random Read 4KiB (Q= 32,T= 1) :    76.261 MB/s  18618.4 IOPS
     Random Write 4KiB (Q= 32,T= 1) :    64.809 MB/s  15822.5 IOPS
             Sequential Read (T= 1) :  1337.939 MB/s
            Sequential Write (T= 1) :   247.119 MB/s
       Random Read 4KiB (Q= 1,T= 1) :    27.926 MB/s   6817.9 IOPS
      Random Write 4KiB (Q= 1,T= 1) :    21.005 MB/s   5128.2 IOPS
    
      Test : 32768 MiB E: 0.1% (0.1/60.0 GiB) (x5)  Interval=5 sec
      Date : 2016/11/16 14:42:05
        OS : Windows Server 2008 R2 Server Standard (full installation) SP1 6.1 Build 7601 (x64)

    raid10(zfs), cache=writeback
    -----------------------------------------------------------------------
    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) :   379.678 MB/s
      Sequential Write (Q= 32,T= 1) :   373.262 MB/s
      Random Read 4KiB (Q= 32,T= 1) :    12.409 MB/s   3029.5 IOPS
     Random Write 4KiB (Q= 32,T= 1) :   150.885 MB/s  36837.2 IOPS
             Sequential Read (T= 1) :   931.972 MB/s
            Sequential Write (T= 1) :   187.517 MB/s
       Random Read 4KiB (Q= 1,T= 1) :    14.106 MB/s   3443.8 IOPS
      Random Write 4KiB (Q= 1,T= 1) :    54.419 MB/s  13285.9 IOPS
    
      Test : 32768 MiB E: 0.1% (0.1/60.0 GiB) (x5)  Interval=5 sec
      Date : 2016/11/16 14:21:47
        OS : Windows Server 2008 R2 Server Standard (full installation) SP1 6.1 Build 7601 (x64)

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


    raid10(zfs+ssd), cache=none
    -----------------------------------------------------------------------
    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) :  1518.768 MB/s
      Sequential Write (Q= 32,T= 1) :   312.825 MB/s
      Random Read 4KiB (Q= 32,T= 1) :   157.763 MB/s  38516.4 IOPS
     Random Write 4KiB (Q= 32,T= 1) :    96.962 MB/s  23672.4 IOPS
             Sequential Read (T= 1) :  1474.409 MB/s
            Sequential Write (T= 1) :   236.638 MB/s
       Random Read 4KiB (Q= 1,T= 1) :    28.693 MB/s   7005.1 IOPS
      Random Write 4KiB (Q= 1,T= 1) :    24.380 MB/s   5952.1 IOPS
    
      Test : 32768 MiB E: 0.1% (0.1/60.0 GiB) (x5)  Interval=5 sec
      Date : 2016/11/16 17:07:45
        OS : Windows Server 2008 R2 Server Standard (full installation) SP1 6.1 Build 7601 (x64)

    raid10(zfs+ssd), cache=writeback
    -----------------------------------------------------------------------
    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) :   353.932 MB/s
      Sequential Write (Q= 32,T= 1) :   401.659 MB/s
      Random Read 4KiB (Q= 32,T= 1) :    30.015 MB/s   7327.9 IOPS
     Random Write 4KiB (Q= 32,T= 1) :   110.644 MB/s  27012.7 IOPS
             Sequential Read (T= 1) :   923.238 MB/s
            Sequential Write (T= 1) :   167.356 MB/s
       Random Read 4KiB (Q= 1,T= 1) :    31.210 MB/s   7619.6 IOPS
      Random Write 4KiB (Q= 1,T= 1) :    56.429 MB/s  13776.6 IOPS
    
      Test : 32768 MiB E: 0.1% (0.1/60.0 GiB) (x5)  Interval=5 sec
      Date : 2016/11/16 17:24:12
        OS : Windows Server 2008 R2 Server Standard (full installation) SP1 6.1 Build 7601 (x64)

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


    ssd+lvm, cache=none
    -----------------------------------------------------------------------
    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)

    ssd+lvm, cache=writeback
    -----------------------------------------------------------------------
    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)

    Графики:


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


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

    image
    image


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

    image
    image


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

    image
    image


    Выводы:


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


    Насколько сильно опция cache=writeback увеличивает риск потери данных мне пока-что выяснить не удалось, но на официальном форуме proxmox есть сообщение, что эта информация является устаревшей и в новых версиях ядра и qemu, она является рекомендуемой, во всяком случае, для дисков размещенных в 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.

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


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

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

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 23
    • 0
      Для более полной картины стоило бы протестировать ещё btrfs для комплекта к zfs.
      • 0

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

        • 0
          Уже несколько лет назад. А вот про ZSF такой информации у меня нет.
          • 0

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


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

            • 0

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

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

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

          • 0

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

            • 0

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

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

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


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

                • 0
                  А есть ли смысл в proxmox использовать ssd + lvm?
                  • 0

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

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

                    Странно. У меня все образы 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
                      Вот-вот. И, кстати, zvol позволяет использовать «cache=none»
                      • +1

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

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

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

                          • 0
                            На сколько я понимаю, это довольно спорный вопрос. Кроме того на официальном форуме 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.

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

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.