В сегодняшней статье разберём настройку одного из параметров конфигурации при заказе виртуального выделенного сервера. Речь пойдёт о типе накопителя, который будет использоваться для виртуалки. Попробуем вместе разобраться, чем виды накопителей отличаются друг от друга, и на что может повлиять тот или иной выбор.

При заказе виртуального сервера RUVDS наряду с другими настройками конфигурации существует возможность выбрать тип диска. На минимальных параметрах виртуалки доступны HDD RAID и SSD RAID. Но при повышении тактовой частоты CPU до значения в 3.4 ГГц выбор типа диска увеличивается на один пункт, а именно — NVMe.



Выбор из таких типов дисков, естественно, подразумевает, что операционная система и другие данные, которыми вы наполните виртуальную машину, будут размещаться на HDD-, SSD- или NVMe-накопителе.

Как выбрать? Что лучше? На что ориентироваться? Для начала окунёмся в теорию.

Немного теории


Быстро пробежимся по основным принципам работы рассматриваемых накопителей. Законы жанра, сами понимаете.

▍ HDD


Жёсткий диск (Hard Disk Drive, HDD) — это устройство для хранения данных, процесс записи и чтения информации, на котором основан на использовании магнитных полей дисков внутри устройства.

HDD состоит из одного или нескольких магнитных дисков, которые изготовлены из материала с магнитным покрытием, таким как оксид железа. Каждый диск состоит из нескольких слоёв, на которых информация записывается и хранится. Поверхность магнитного диска разделена на концентрические кольца, называемые дорожками, и области, называемые секторами. Каждый сектор содержит определённое количество данных. Внутри корпуса HDD находятся магнитные головки, которые перемещаются над поверхностью диска. Именно они используются для записи и считывания данных с магнитных дисков.

При записи данных на диск магнитные головки HDD создают магнитное поле, которое изменяет ориентацию магнитных частиц на поверхности магнитного диска. Информация кодируется в виде последовательности магнитных изменений, например, намагниченных и не намагниченных областей, которые представляют собой бинарные данные — 0 и 1. Чтобы произвести запись, магнитные головки перемещаются над поверхностью диска и в нужном месте меняют магнитное поле. Такие изменения в магнитном поле сохраняются на поверхности магнитного диска и используются для представления информации.

При чтении данных магнитные головки считывают магнитные изменения на поверхности магнитного диска. Эти магнитные изменения интерпретируются как бинарные данные, то есть 0 или 1. Последовательность этих значений представляет собой информацию, сохранённую на диске. Для того, чтобы считать данные, магнитные головки перемещаются над поверхностью диска. Считанные данные передаются в контроллер HDD и далее в компьютер или другое устройство для обработки и дальнейшего использования.

Для доступа к определённым данным на HDD используется система индексации, которая указывает, где находятся данные на поверхности диска и как они организованы. Контроллер HDD управляет доступом к данным, перемещая магнитные головки и читая/записывая данные в соответствии с запросами пользователя.

▍ SSD


SSD (Solid State Drive) представляет собой накопитель, который использует флеш-память для хранения информации без использования подвижных механических компонентов, таких как вращающиеся диски и магнитные головки, присутствующие в HDD.

Основными компонентами SSD являются флеш-чипы, например, NAND-флеш, контроллер и интерфейс для подключения к компьютеру или другому устройству. Флеш-память SSD состоит из ячеек памяти, которые хранят биты информации в виде заряда электричества. Каждая ячейка может хранить несколько битов, обычно 1, 2 или 3 — SLC, MLC и TLC соответственно. Для записи данных в ячейку памяти контроллер SSD применяет определённое напряжение, что изменяет заряд ячейки и сохраняет информацию. Контроллер SSD управляет чтением и записью данных в ячейках флеш-памяти. А также отвечает за управление износом ячеек памяти и равномерным распределением операций записи по ячейкам для увеличения срока службы SSD. Поскольку флеш-память не имеет подвижных частей, доступ к данным на SSD осуществляется электронным образом, что делает его значительно быстрее по сравнению с HDD.

▍ NVMe


В 2011 году был представлен протокол NVMe (Non-Volatile Memory Express) как стандарт для работы с устройствами хранения данных на основе флеш-памяти, такими как SSD. Он был разработан для оптимизации производительности и улучшения управления флеш-памятью за счёт использования более эффективных методов передачи данных и управления командами чтения/записи.

NVMe поддерживает множество очередей команд чтения/записи и обеспечивает параллельную обработку этих команд. Каждая очередь команд может содержать множество команд, которые обрабатываются параллельно, что позволяет увеличить пропускную способность и уменьшить задержку доступа к данным. Плюс к этому, NVMe поддерживает многопоточность для параллельной обработки команд чтения/записи и управления данными, что позволяет более эффективно использовать ресурсы процессора и ускоряет обработку данных на устройствах хранения данных.

NVMe работает поверх шины PCI Express, что обеспечивает высокую пропускную способность и широкую совместимость с современными компьютерами и серверами.

Попробуем потестить


Итак, мы исходим из того, что HDD обладает меньшей скоростью чтения/записи информации, при этом является более доступным для хранения информации в больших объёмах. SSD и NVMe — более производительные и оперируют бо́льшими скоростями при обмене данными, хотя стоимость их эксплуатации, естественно, выше.

Но это в теории. Так ли это работает на виртуальных серверах? Мы заказали три виртуалки одинаковой конфигурации, работающие под управлением Windows 2022 и расположенные в одном дата-центре. Отличие одно — на наших виртуальных машинах установлены накопители различных типов.

Для оценки скорости чтения и записи накопителей в Windows-системах мы будем использовать две простые утилиты: CrystalDiskMark и ATTO Disk Benchmark. Обе они являются популярными бесплатными программами для бенчмаркинга дисков.

▍ CrystalDiskMark


У CrystalDiskMark простой и интуитивно понятный интерфейс. После запуска теста утилита выводит результаты в виде таблицы, показывающей скорость чтения и записи данных в различных условиях.

Мы запускали тест в CrystalDiskMark на дефолтных настройках, и вот что из этого получилось.

Результаты теста для виртуалки, работающей на HDD, — на скриншоте ниже:


А это значения показателей замера скорости чтения и записи SSD-накопителя:


И наконец, результаты теста накопителя NVMe:


Полученные показатели в данных тестах означают следующее:

  • SEQ1M Q8T1 — тест последовательного чтения или записи блоками в 1 МБ, глубиной очереди в 8 и один поток.
  • SEQ1M Q1T1 — тест последовательного чтения или записи блоками в 1 МБ, глубиной очереди в 1 и один поток.
  • RND4K Q32T1 — тест случайного чтения или записи блоками в 4 МБ, глубиной очереди в 32 и один поток.
  • RND4K Q1T1 — тест случайного чтения или записи блоками в 4 МБ, глубиной очереди в 1 и один поток.

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



То же, но для показателей оценки скорости записи:



Как видно, CrystalDiskMark демонстрирует преимущество в скорости при использовании на виртуальной машине NVMe-накопителя.

▍ ATTO Disk Benchmark


Такую же проверку скорости чтения/записи мы проведём с использованием ATTO Disk Benchmark. Утилита отображает результаты теста в виде графика, который показывает скорость передачи данных в зависимости от размера блока данных.

Мы нагрузили систему тестом при помощи файла объёмом 32 ГБ и глубиной очереди 256. На нашем VPS с HDD-диском тест скорости выглядел следующим образом:


А так, отобразились результаты проверки виртуалки на SSD-накопителе:


На скриншоте ниже — показатели теста накопителя NVMe:


Тест диска C: при помощи ATTO Disk тоже демонстрирует преимущество в скорости виртуального сервера, который размещён на NVMe-накопителе.

Вместо заключения


В общем случае выбор между HDD, SSD и NVMe зависит от конкретных потребностей, бюджета и ожиданий от производительности.

Если важна ёмкость хранения и вы готовы пожертвовать некоторой производительностью, в таком случае HDD может быть более подходящим вариантом.

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

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

  • Виртуальные серверы с SSD подходят для размещения сайтов и приложений, таких как форумы, корпоративные сайты и т. п.
  • Накопитель SSD — идеальная платформа для развёртывания виртуальных машин, что должно обеспечить достаточную производительность и отзывчивость при работе с различными ОС и приложениями.
  • Сюда же мы можем отнести хостинг игровых серверов, где важен быстрый доступ к ресурсу.

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

  • Поскольку NVMe-накопители обеспечивают высокую пропускную способность и низкую задержку, они идеально подходят для хранения и обработки данных, например, в MySQL, PostgreSQL, MongoDB и других системах управления БД.
  • Виртуалку на NVMe также можно использовать для выполнения вычислительно интенсивных задач, таких как машинное обучение, обработка видео и аудио.

И ещё. До конца марта в RUVDS действуют скидки при заказе виртуального выделенного сервера на NVMe. Здесь можно арендовать такой VPS по цене от 1344 рублей в месяц. Всё же это не так дорого, как может показаться.

Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (65)


  1. Ava256
    26.03.2024 13:57
    +5

    Сравнение конечно «доя самых маленьких». А почему латентность не поменяли? Кому нужна эта скорость без латентности ). Не удивлюсь что тестовая машина размещена на отдельном тестовом луне, чтобы исключить влияние других машин.


    1. oldadmin Автор
      26.03.2024 13:57

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


      1. Grigory_Otrepyev
        26.03.2024 13:57
        +5

        И про латентность: вряд ли этими приложениями можно изменить латентность, поскольку определяется она физическими характеристиками накопителя.

        Кек. Не стыдно не уметь использовать стандартные счетчики?

        $diskReadLatency = Get-Counter -Counter "\PhysicalDisk(_Total)\Avg. Disk Read Latency"
        $diskWriteLatency = Get-Counter -Counter "\PhysicalDisk(_Total)\Avg. Disk Write Latency"
        $diskReadLatency.CounterSamples | Select-Object -Property InstanceName, CookedValue
        $diskWriteLatency.CounterSamples | Select-Object -Property InstanceName, CookedValue

        https://learn.microsoft.com/en-us/answers/questions/1339120/disk-latency


      1. AntonVirtual
        26.03.2024 13:57

        Размещалась на отдельном луне...

        Ну давайте немного подушню.
        Начнем с того, что лун (LUN) - это вообще способ адресации в системе SCSI. А вы скорее всего имели в виду том, а не лун.
        Далее, том может быть тонким и делить дисковые группы с другими томами в пуле.

        Нет в русском языке слово "латентность" в отрыве от "латентный гомосексуалист", а в случае СХД употребляется не "латентность", а "задержки".

        И определяются задержки не физическими характеристиками накопителя, а дисковы стеком ОС, гипервизора, сетью хранения, производительностью контроллеров СХД, задержками в сети хранения между контроллерами, кэшами, софтом СХД, общей нагрузкой на СХД и в последнюю очередь физическими характеристиками накопителя (диска)


    1. edo1h
      26.03.2024 13:57

      А почему латентность не поменяли? Кому нужна эта скорость без латентности )

      Вы имели в виду «не померили»? Особой нужды в этом нет, задержки/iops/пропускная способность при фиксированных размере блока и глубине очереди связаны друг с другом и могут быть выведены одно из другого (например, при qd1 и блоке 1МБ задержка в 1мс даст 1000 iops и 1000МБ/с)


      1. Regis
        26.03.2024 13:57

        Ну-ка, расскажите, как вы выведете латентность из пропусконой способности, если вам нужно прочитать один единственный блок (в котором лежит индекс БД, например)?


        1. edo1h
          26.03.2024 13:57

          Вы внимательно прочитали то, на что отвечаете?
          Я писал, что в тестах зачастую не нужно измерять три показателя — задержку, iops, пропускную способность, достаточно одной, а две остальные можно вычислить.


          1. AntonVirtual
            26.03.2024 13:57

            нельзя в отрыве от профиля нагрузки. Причем из трех важны только две, а третья теряет смысл, а зачастую вообще упирается в одну.

            Например при случайном доступе малым блоком вообще бессмысленно считать МБ/с. А при последовательном задержки.
            Если у вас при этом идет поток большой и не совсем синхронный, то задержка в 1мс вам даст 1000 IOPS на один поток, но общая производительность может быть 100 000 IOPS.


            1. edo1h
              26.03.2024 13:57

              нельзя в отрыве от профиля нагрузки

              ещё раз, я говорю про измерение показателей в синтетике.
              пусть для определённости random read, 4k, qd1.
              тогда при задержках чтения в 100мкс мы получаем за секунду 1e6/100=10e3 чтений, то есть 10k iops, а пропускная способность 10e3*4=40e3 КБ/с, то есть 40 МБ/с
              все эти показатели жёстко связаны друг с другом.


  1. Grigory_Otrepyev
    26.03.2024 13:57
    +1

    CrystalDiskMark и ATTO Disk Benchmark.

    еще лет 5, и освоите DISKSPD ?

    и глубиной очереди 256.

    зачем?

    в MySQL, PostgreSQL, MongoDB и других системах управления БД.

    Это теперь системы управления БД? И SQL Server Management Studio (SSMS) или pgAdmin - это у вас база данных?

    Поскольку NVMe-накопители обеспечивают высокую пропускную способность и низкую задержку, они идеально подходят для хранения и обработки данных

    Я так понимаю, выносить tempDB на NVME у вас не умеют.


    1. JuryPol
      26.03.2024 13:57
      +7

      I

      в MySQL, PostgreSQL, MongoDB и других системах управления БД. 

      Это теперь системы управления БД?

      А что не так? Даже интересно стало…


      1. Grigory_Otrepyev
        26.03.2024 13:57

        А что не так? Даже интересно стало…

        Все так, если использовать автоперевод, где это все DBMS -

        A database management system (DBMS) is a program used to create, update, and manage databases. RDBMS means a relational database management system, and it helps to create, update and manage relational databases. One of such RDBMS is Microsoft SQL server.

        MS SQL Server Management Studio is a software which provides graphical interface to manage the underlying RDBMS, MS SQL Server. If you want to see what the databases in your MS SQL Server are, looking at those through MS SQL Server Management Studio is more visually comfortable and appealing. Furthermore, MS SQL Server Management Studio makes the administrative and troubleshooting activities of the databases easier.

        Если же столкнуться вживую с установкой хотя бы MS SQL, где ставится с 15+ сервисов, начиная от SQL Server Database Engine и SQL Server Agent, https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions?view=sql-server-ver16
        то может возникнуть желание называть менеджмент - менеджментом, а Database Engine - движком.


        1. alexalok
          26.03.2024 13:57
          +9

          Тот случай, когда хотел выставить дураком другого, но что-то пошло не так..)


          1. Grigory_Otrepyev
            26.03.2024 13:57

            Тот случай, когда хотел выставить дураком другого, но что-то пошло не так..)

            У автора HDD быстрее SSD, и то как он пишет стандартную пасту про SQL - всего лишь кукурузинка на тортике из говнеца.


        1. JuryPol
          26.03.2024 13:57
          +2

          Вот вы о чем…

          А я что-то привык к устоявшейся трактовке термина. Именно как к обозначению совокупности всех компонентов.


          1. Grigory_Otrepyev
            26.03.2024 13:57

            А я что-то привык к устоявшейся трактовке термина. Именно как к обозначению совокупности всех компонентов.

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


            1. JuryPol
              26.03.2024 13:57

              Когда в 1983 году мы у себя на заводе запускали АСУ Заказ с использованием СУБД Ока (IDMS от IBM, если не ошибаюсь) и системы телеобработки данных Кама, про маркетологов никто и слыхом не слыхивал. Так базами данных с тех пор и занимаюсь. И уж чего я только с того времени «вживую не ставил»… вот и привык к СУБД. Хотя наличие составных частей не отрицаю, и замену, скажем, средств администрирования и разработки на продукты других фирм очень даже приветствую. Oracle, например, ничем сходным по функциональности с Toad так и не порадовал.:-)


        1. K0styan
          26.03.2024 13:57

          Так не надо использовать автоперевод, надо просто вспомнить аббревиатуру СУБД. Которая означает не то же, что DBMS, хотя вроде бы из тех же слов (с поправкой на перевод) сложена.


          1. edo1h
            26.03.2024 13:57
            +1

            А в чём различие между СУБД и DBMS?


    1. AntonVirtual
      26.03.2024 13:57
      +1

      КристалДиск с 7й версии как минимум умеет измерять IOPS, и если не ошибаюсь, внутри содержит как раз diskspd.
      Но чтобы мерять IOPS надо думать.

      Зачем думать, когда надо просто фигачить статьи потоком?


  1. KorP
    26.03.2024 13:57

    Судя по картинке - NVMe ещё и без отказоустойчивости? :)


    1. oldadmin Автор
      26.03.2024 13:57
      +3

      Это осознанное решение компании – писали о причинах тут и тут. Если коротко, при использовании NVMe в RAID скорость будет ниже, чем у SSD. Плюс из таких дисков невозможно собрать рейд-массив.


      1. Grigory_Otrepyev
        26.03.2024 13:57
        +3

        . Если коротко, при использовании NVMe в RAID скорость будет ниже, чем у SSD.

        по первой ссылке - "мы что-то нарукожопили с драйверами и решили отложить до второй части".
        Вторую вы, видимо, не читали -

        Как только мы начали распределять виртуалки по NUMA-нодам, внезапно всё заработало с нужной скоростью.

        Плюс из таких дисков невозможно собрать рейд-массив.

        По второй же ссылке написано - возможно, НО скорость страдает.


        1. ElvenSailor
          26.03.2024 13:57

          Storage Space могут собрать рейд из чего угодно.

          Кроме загрузочного диска.


      1. Alexx_B
        26.03.2024 13:57

        есть контроллеры для nvme, но можно обойтись и по крестьянско-пролетарски - собрать софтовый рейд. Например, по нашим тестам между одним NVME и двумя в S2D разницы нет (ну, кроме увеличения стоимости решения х2)


        1. Grigory_Otrepyev
          26.03.2024 13:57
          +2

          есть контроллеры для nvme, но можно обойтись и по крестьянско-пролетарски - собрать софтовый рейд.

          с тем же VROC можно говна поесть просто лопатой.


    1. Sap_ru
      26.03.2024 13:57

      Тут они правы. Даже SSD плохо в RAID собирается (скорость падает и время доступа пляшет), а с NVME совсем тоска-печаль. Есть некоторые модели NVME, где ситуация лучше, но там другие приколы.