Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Compute Cloud
  • Yandex Container Solution
    • Взаимосвязь ресурсов
    • Графические ускорители GPU
      • Обзор
      • Диски
      • Снимки дисков
      • Создание снимков по расписаниям
      • Группы размещения нереплицируемых дисков
      • Файловые хранилища
      • Операции чтения и записи
    • Образы
    • Выделенный хост
    • Шифрование
    • Резервное копирование
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Производительность дисков и файловых хранилищ
  • Тестирование производительности дисков
  • Примеры сценариев
  • Троттлинг
  1. Концепции
  2. Диски и файловые хранилища
  3. Операции чтения и записи

Операции чтения и записи

Статья создана
Yandex Cloud
Обновлена 12 марта 2025 г.
  • Производительность дисков и файловых хранилищ
    • Тестирование производительности дисков
    • Примеры сценариев
    • Троттлинг

Для дисков и файловых хранилищ действуют технические ограничения на операции чтения и записи. Ограничения относятся как к целым диску или хранилищу, так и к каждой отдельной единице выделения дискового пространства — блоку размещения (allocation unit). Величина блока размещения зависит от типа диска или хранилища.

Операции чтения и записи имеют предельные возможные значения по следующим параметрам:

  • Максимальное значение IOPS — максимальное количество операций чтения и записи в секунду.
  • Максимальная пропускная способность (bandwidth) — суммарное количество байт, которые можно прочитать или записать в секунду.

Фактическое значение IOPS зависит как от характеристик диска или хранилища, так и от совокупного значения пропускной способности и размера запроса в байтах. Обеспечиваемый IOPS определяется по формуле:

Где:

  • Макс. IOPS — максимальное значение IOPS для диска или хранилища.
  • Макс. bandwidth — максимальное значение пропускной способности для диска или хранилища.

Операции чтения и записи потребляют один и тот же дисковый ресурс — чем больше производится операций чтения, тем меньше операций записи, и наоборот. Суммарное количество операций и чтения, и записи в секунду определяется по формуле:

Где:

  • — доля операций записи из общего количества операций чтения и записи, выполняемых в секунду. Возможные значения — α∈[0,1].
  • WriteIOPS — значение IOPS на запись, полученное по формуле расчета фактического значения IOPS.
  • ReadIOPS — значение IOPS на чтение, полученное по формуле расчета фактического значения IOPS.

Подробнее про максимально допустимые значения IOPS и пропускной способности читайте в разделе Квоты и лимиты.

Производительность дисков и файловых хранилищПроизводительность дисков и файловых хранилищ

Максимальные значения IOPS достигаются на операциях чтения и записи размером 4 КБ. Сетевые SSD-диски и файловые хранилища предоставляют существенно большие значения IOPS на чтение, а также меньшие значения времени обработки запроса.

Чтобы получить максимальные значения пропускной способности, рекомендуется делать чтения и записи размером 4 МБ.

Производительность диска или хранилища зависит от его объема — чем выше количество блоков размещения, тем выше значения IOPS и пропускной способности.

Для HDD-дисков небольшого размера предусмотрен механизм увеличения характеристик до уровня дисков размером 1 ТБ на период повышенной нагрузки. Работая на базовом уровне производительности в течение 12 часов, небольшой диск накапливает «кредиты на операции», которые будут потрачены автоматически при увеличении нагрузки (например, при старте ВМ). Небольшие HDD-диски могут работать с увеличенными характеристиками около 30 минут в день. «Кредиты на операции» могут быть потрачены как за один раз, так и небольшими промежутками. Для HDD-хранилищ механизм не предусмотрен.

Тестирование производительности дисковТестирование производительности дисков

Для тестирования производительности сетевых дисков можно воспользоваться утилитой fio:

  1. Подключите диск к ВМ.

  2. Установите утилиту fio на ВМ:

    Пример команды для ОС Ubuntu:

    sudo apt-get update && sudo apt-get install fio -y
    
  3. Запустите утилиту fio и выполните сценарий:

    sudo fio \
    --name=<имя_задачи>
    --filename=<путь_к_точке_монтирования>/testfile.bin \
    --filesize=1G \
    --direct=1 \
    --rw=write \
    --bs=4k \
    --ioengine=libaio \
    --iodepth=64 \
    --runtime=120 \
    --numjobs=8 \
    --time_based \
    --group_reporting \
    --eta-newline=1
    

    Где:

    • --name — произвольное имя задания.

    • --filename — путь к точке монтирования того диска, производительность которого вы хотите протестировать.

      Внимание

      При тестировании операций записи не используйте идентификатор диска (например, /dev/vdb) в качестве значения для параметра --filename. Все данные на диске могут быть потеряны.

    • --direct — использование буферизации, где 0 — использовать, 1 — не использовать.

    • --rw — шаблон нагрузки. Возможные значения:

      • read — последовательное чтение;
      • write — последовательная запись;
      • rw — последовательные чтения/записи;
      • randrw — случайные чтение/запись;
      • randwrite — случайная запись;
      • randread — случайное чтение.
    • --bs — размер блока чтения/записи. Чтобы получить лучший результат, укажите значение меньше или равное размеру блока диска.

    • --iodepth — глубина блоков io на каждое задание (job).

    • --runtime — длительность тестирования, в секундах.

    • --numjobs — количество заданий чтения/записи.

Примеры сценариевПримеры сценариев

Тестирование IOPS, последовательная записьТестирование IOPS, последовательная запись

sudo fio \
--name=readio \
--filename=<путь_к_точке_монтирования>/testfile.bin \
--filesize=1G \
--direct=1 \
--rw=write \
--bs=4k \
--ioengine=libaio \
--iodepth=96 \
--runtime=120 \
--numjobs=4 \
--time_based \
--group_reporting \
--eta-newline=1

Результат:

---
  write: IOPS=39.7k, BW=155MiB/s (162MB/s)(5112MiB/33001msec); 0 zone resets
    slat (usec): min=2, max=19776, avg= 5.25, stdev=47.15
    clat (usec): min=874, max=5035.1k, avg=9677.38, stdev=40976.63
     lat (usec): min=889, max=5035.1k, avg=9682.81, stdev=40976.66
---

Тестирование IOPS, случайная записьТестирование IOPS, случайная запись

sudo fio \
--name=randwrite \
--filename=<путь_к_точке_монтирования>/testfile.bin \
--filesize=1G \
--direct=1 \
--rw=randwrite \
--bs=4k \
--ioengine=libaio \
--iodepth=96 \
--runtime=120 \
--numjobs=1 \
--time_based \
--group_reporting \
--eta-newline=1

Результат:

---
write: IOPS=9596, BW=37.5MiB/s (39.3MB/s)(4499MiB/120011msec); 0 zone resets
    slat (usec): min=2, max=338, avg= 5.21, stdev= 4.52
    clat (usec): min=680, max=161320, avg=9996.54, stdev=10695.67
     lat (usec): min=698, max=161323, avg=10001.94, stdev=10695.77
---

Тестирование пропускной способности, последовательная записьТестирование пропускной способности, последовательная запись

sudo fio \
--name=writebw \
--filename=<путь_к_точке_монтирования>/testfile.bin \
--filesize=1G \
--direct=1 \
--rw=write \
--bs=4M \
--ioengine=libaio \
--iodepth=32 \
--runtime=120 \
--numjobs=1 \
--time_based \
--group_reporting \
--eta-newline=1

Результат:

---
   write: IOPS=112, BW=449MiB/s (471MB/s)(52.8GiB/120237msec); 0 zone resets
    slat (usec): min=166, max=270963, avg=8814.82, stdev=10995.16
    clat (msec): min=58, max=661, avg=276.06, stdev=28.21
     lat (msec): min=60, max=679, avg=284.88, stdev=27.91
---

Тестирование IOPS, последовательное чтениеТестирование IOPS, последовательное чтение

sudo fio \
--name=readio \
--filename=<путь_к_точке_монтирования>/testfile.bin \
--filesize=1G \
--direct=1 \
--rw=read \
--bs=4k \
--ioengine=libaio \
--iodepth=128 \
--runtime=120 \
--numjobs=8 \
--time_based \
--group_reporting \
--eta-newline=1

Результат:

---
  read: IOPS=62.2k, BW=243MiB/s (255MB/s)(28.5GiB/120008msec)
    slat (usec): min=2, max=123901, avg= 6.88, stdev=151.96
    clat (usec): min=859, max=168609, avg=16450.99, stdev=8226.23
     lat (usec): min=877, max=168611, avg=16458.07, stdev=8229.16
---

Тестирование пропускной способности на чтениеТестирование пропускной способности на чтение

sudo fio \
--name=readbw \
--filename=<путь_к_точке_монтирования>/testfile.bin \
--filesize=1G \
--direct=1 \
--rw=read \
--bs=4M \
--ioengine=libaio \
--iodepth=32 \
--runtime=120 \
--numjobs=1 \
--time_based \
--group_reporting \
--eta-newline=1

Результат:

---
  read: IOPS=112, BW=449MiB/s (470MB/s)(52.7GiB/120227msec)
    slat (usec): min=85, max=177850, avg=8878.47, stdev=9824.19
    clat (msec): min=50, max=4898, avg=276.36, stdev=45.16
     lat (msec): min=52, max=4898, avg=285.24, stdev=44.94
---

Тестирование IOPS, случайное чтениеТестирование IOPS, случайное чтение

sudo fio \
--name=randread \
--filename=<путь_к_точке_монтирования>/testfile.bin \
--filesize=1G \
--direct=1 \
--rw=randread \
--bs=4k \
--ioengine=libaio \
--iodepth=16 \
--runtime=120 \
--numjobs=8 \
--time_based \
--group_reporting \
--eta-newline=1

Результат:

---
 read: IOPS=17.0k, BW=66.4MiB/s (69.6MB/s)(7966MiB/120006msec)
    slat (usec): min=2, max=114, avg= 9.05, stdev= 5.36
    clat (usec): min=172, max=251507, avg=7519.93, stdev=6463.84
     lat (usec): min=179, max=251511, avg=7529.25, stdev=6464.41
---

ТроттлингТроттлинг

Если в какой-то промежуток времени ВМ не укладывается в дисковые лимиты, срабатывает троттлинг.

Троттлинг — это принудительное ограничение быстродействия. При срабатывании троттлинга дисковые операции откладываются. В этот момент повышается показатель ожидания выполнения дисковых операций — iowait. Так как обработка всех операций чтения и записи происходит в одном потоке (vCPU), при сильной нагрузке на системные диски могут наблюдаться сетевые проблемы. Это возможно как с виртуальной машиной, так и с любым физическим сервером.

Например, лимит 300 IOPS на запись. Лимит разбивается на 10 частей и отрабатывает раз в 100 мс. Таким образом, будет разрешено сделать 300 / 10 = 30 IOPS на запись в 100 мс. Если разово отправить 30 запросов и затем в течение 100 мс еще 30 запросов (равномерно распределив их по интервалу в 100 мс), сработает троттлинг и отправятся только первые 30. Остальные попадут в очередь и будут обработаны в следующие 100 мс. Если запись производить скачкообразно, троттлинг может создавать довольно большие задержки. В некоторые моменты на диске будет до N IOPS запросов за 100 мс.

Производительность диска зависит от его объема. Для повышения общего быстродействия дисковой подсистемы используйте ВМ с сетевыми SSD-дисками (network-ssd). С каждым шагом 32 ГБ увеличивается количество блоков размещения и, соответственно, быстродействие.

Выбрать тип накопителя можно только при создании ВМ. Однако вы можете сделать снимок диска и создать новую ВМ из этого снимка с network-ssd.

Была ли статья полезна?

Предыдущая
Файловые хранилища
Следующая
Образы
Проект Яндекса
© 2025 ООО «Яндекс.Облако»