Облачная платформаAdvanced

Как проверить производительность моего диска?

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Меры предосторожности

В тесте производительности диска, если номер начального сектора не выровнен по 4‑КиБ, производительность диска будет сильно снижена. Убедитесь, что номер начального сектора выровнен по 4‑КиБ перед началом теста.

Note

Для тестирования производительности совместно используемого диска необходимо выполнить следующие требования:

  • Совместно используемый диск должен быть подключен к нескольким серверам.
  • Если совместно используемый диск подключен к нескольким ECS, эти ECS должны принадлежать одной группе антиаффинности ECS.

    Если эти ECS не соответствуют требованию антиаффинности, совместно используемый диск не сможет достичь оптимальной производительности.

Процесс тестирования для Windows и Linux отличается.

Windows

Способ тестирования производительности диска зависит от ОС сервера. В этом разделе в качестве примера используется Windows Server 2019 Standard 64‑битный. Для других ОС Windows см. соответствующую документацию по ОС.

Установите средство измерения производительности Iometer перед тестом. Вы можете получить средство по адресу http://www.iometer.org/.

  1. Войдите в сервер.
  2. Нажмите win+R чтобы открыть Выполнить окно. Введите msinfo32 и нажмите OK.

    Отображается окно системной информации.

  3. Выберите компоненты > хранилище > диски. На правой панели просмотрите смещение раздела.

    • Если 4096 может быть разделено на значение параметра, раздел выровнен по 4‑КиБ. Перейти к 4.
    • Если 4096 не может быть разделено на значение параметра, раздел не выровнен по 4‑КиБ. Обеспечьте выравнивание раздела по 4‑КиБ перед продолжением теста.
      Notice

      Если вы удалите раздел и выберете другой номер начального сектора для выравнивания по 4‑КиБ, вы потеряете все данные на этом разделе.

  4. Используйте Iometer для тестирования производительности диска. Подробности см. в документации продукта Iometer.

    При тестировании IOPS и пропускной способности диска параметры для Iometer и fio одинаковы. Подробности см Таблица 1.

    В следующем примере Iometer используется для тестирования производительности диска.

    1. Установите рабочий процесс.

    2. Установите время выполнения теста.

      В этом примере длительность выполнения теста задается в 10 минут с 60‑секундным временем разгона. Производительность диска тестируется после того, как записи стабилизируются.

    3. Set the data block size and read/write policy. In this example, the disk size is set to 64 KiB, the policy is 100% sequential write.

    4. Просмотрите результаты теста.

Linux

Если вы используете старую версию Linux OS, например CentOS 6.5, и запускаете fdisk по умолчанию начальный номер сектора будет не выровнен по 4‑KiB, что сильно влияет на производительность теста. По этой причине, если используется такая ОС, рекомендуется выбрать новый начальный номер сектора, выровненный по 4‑KiB, при создании разделов.

Способ тестирования производительности диска зависит от ОС сервера. В этом разделе в качестве примера используется CentOS 7.2 64‑bit. Для других Linux OSs см. соответствующую документацию ОС.

  1. Войдите на сервер и переключитесь на пользователя root.
  2. Установите инструмент тестирования производительности fio.

    yum install fio

  3. Перед началом теста выполните следующую команду, чтобы проверить, выровнен ли начальный номер сектора по 4‑KiB:

    fdisk -lu

    Отображается информация, подобная следующей:

    [root@ecs-centos sdc]# fdisk -lu
    Disk /dev/xvda: 10.7 GiB, 10737418240 bytes, 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x7db77aa5
    Device Boot Start End Blocks Id System
    /dev/xvda1 * 2048 20968919 10483436 83 Linux
    Disk /dev/xvdb: 10.7 GiB, 10737418240 bytes, 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/xvdc: 53.7 GiB, 53687091200 bytes, 104857600 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x3cf3265c
    Device Boot Start End Blocks Id System
    /dev/xvdc1 2048 41943039 20970496 83 Linux

    • Если 8 делится на номер начального сектора, то число выровнено по 4‑КиБ. Перейдите к 4.
    • Если 8 не делится на номер начального сектора, то число не выровнено по 4‑КиБ. Удалите раздел и выберите начальный сектор, выровненный по 4‑КиБ, для нового раздела перед продолжением теста.
      Notice

      Если вы удалите раздел и выберете другой номер начального сектора для выравнивания по 4‑КиБ, вы потеряете все данные на этом разделе.

  4. Выполните следующие команды и используйте fio для тестирования производительности диска:

    • Чтобы протестировать случайную запись IOPS, выполните следующую команду: fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Write_IOPS_Test
    • Чтобы протестировать случайные чтения IOPS, выполните следующую команду: fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_IOPS_Test
    • Чтобы протестировать пропускную способность записи, выполните следующую команду: fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Write_BandWidth_Test
    • Чтобы протестировать скорость чтения, выполните следующую команду: fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Read_BandWidth_Test
    • Для тестирования одноканальной очереди, случайной задержки чтения, выполните следующую команду: fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=60 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_LATE_Test
      Notice
      • При использовании fio для выполнения теста производительности raw‑диска убедитесь, что на диске не созданы разделы и файловые системы и на диске не хранится данные. Иначе тест raw‑диска повредит файловую систему, а данные на диске станут только для чтения. В этом случае ваш единственный вариант — удалить диск и приобрести новый для продолжения теста.
      • Не проводите тест на диске, содержащем служебные данные. Если такой тест обязателен, рекомендуется выполнить его следующим образом:
        • Создайте резервную копию данных диска перед тестом, так как вы можете повредить данные на диске.
        • Укажите файл, например -filename=/opt/fiotest/fiotest.txt, чтобы протестировать производительность файловой системы.

      Таблица 1 перечисляет параметры теста fio.

      Таблица 1 Описание параметра

      Параметр

      Описание

      direct

      Определяет, используется ли direct I/O.

      • Установить 0: используется буферизованный I/O.
      • Установить 1: используется direct I/O.

      iodepth

      Определяет глубину очереди I/O.

      Эта глубина очереди относится к глубине очереди каждого потока независимо от того, используется один поток или несколько потоков в тесте. Общее количество одновременных I/O fio = iodepth x numjobs Примеры:

      • Если есть один поток и -iodepth=32, глубина очереди I/O этого потока равна 32, а общее количество одновременных I/O fio равно 32 (32 x 1).
      • Если есть три потока и -iodepth=32, глубина очереди I/O каждого потока составляет 32 и общее количество одновременных I/O fio равно 96 (32 x 3).

      rw

      Определяет политику тестового чтения/записи.

      • randread: случайное чтение
      • randwrite: случайная запись
      • чтение: последовательное чтение
      • запись: последовательная запись
      • randrw: смешанное случайное чтение/запись

      ioengine

      Определяет, как fio обрабатывает запрос I/O (синхронно или асинхронно).

      • Синхронный I/O: За один раз обрабатывается только один запрос I/O, а ответ возвращается после того, как ядро обработало запрос. При этом глубина очереди I/O в одно‑поточной конфигурации всегда менее 1, и для решения подобных проблем можно использовать многопоточную конкурентную обработку. Обычно 16–32 конкурентных рабочих потока полностью заполняют глубину очереди I/O.
      • Асинхронный I/O: За один раз доставляются несколько запросов I/O с использованием libaio. Ожидайте завершения процесса и уменьшайте время взаимодействия для повышения эффективности.

      bs

      Определяет размер блока I/O. Единицей может быть KiB, Kb, MiB или Mb, а значение по умолчанию — 4 KiB.

      размер

      Определяет объём данных, обрабатываемый тестовыми I/O. Если параметры, такие как время выполнения, если они не указаны, тест завершается, когда fio обработает весь указанный объём данных.

      Значение может быть числом с единицей измерения или процентом. Число с единицей измерения указывает объём данных чтения/записи, например size=10G, указывая объём чтения/записи 10‑GiB. Процент указывает отношение объёма чтения/записи к общему размеру файлов, например size=20%, указывая, что объём чтения/записи составляет 20% от общего пространства файлов.

      numjobs

      Определяет количество одновременно работающих потоков.

      runtime

      Определяет время теста.

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

      group_reporting

      Определяет режим отображения результатов теста. Значение параметра отображает статистику на одном потоке вместо всех задач.

      filename

      Определяет имя тестового файла или устройства.

      • Если указан файл, тестируется производительность файловой системы. Пример: -filename=/opt/fiotest/fiotest.txt
      • Если указано имя устройства, производительность необработанного диска тестируется. Пример: -filename=/dev/vdb
        NOTICE:

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

      name

      Определяет имя задачи теста.