한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L11 Диск

Лимит IOPS и насыщение очереди IOPS limit / queue saturation

ID причины dk-iops · Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера, Команда инфраструктуры · Инфраструктура БД

Открыть карточку в основной версии с иллюстрациями и экспериментами →

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

Почему Запросы на чтение и запись приближаются к пределу производительности диска → Следствие Очередь растёт (обычно резко при утилизации от 90%) → На экране Задержки сохранения и загрузки, а при синхронных вызовах фризы

Симптомы
Задержка ввода, Фриз
Факторы
Задержка, Остановка
У кого
Весь сервер
Когда
При наплыве игроков, Вечерний пик
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера, Команда инфраструктуры · Инфраструктура БД
Команда разработки: задачи
Объединять запросы, кэшировать часто читаемые данные, делать ввод-вывод асинхронным, чтобы игровой поток не ждал диск.
Команда инфраструктуры: задачи
Серверы и ОС: более быстрые диски, проверка лимитов дисковой пропускной способности и IOPS для типа инстанса, алерты на утилизацию и очередь диска, копирование больших файлов в часы низкой нагрузки. Серверы БД: алерты на утилизацию IOPS и пропускной способности дисков БД, проверка дисковых лимитов конфигурации инстанса БД.
Цифры для ориентира
HDD около 150 IOPS, SATA SSD десятки тысяч, NVMe сотни тысяч. Стандартный облачный диск (AWS gp3) даёт 3 000 IOPS и 125 MiB/s, и если копирование большого файла исчерпывает лимит на объём передачи в секунду, который не зависит от IOPS, застревают даже мелкие записи.
На графике
Упор в лимит (плато) · IOPS, длина очереди к диску
Где смотреть
Смотреть r/s, w/s, rkB/s, wkB/s, aqu-sz, r_await и w_await в iostat -x 1. В облаке смотреть VolumeReadOps, VolumeWriteOps, VolumeQueueLength в EBS и признаки превышения лимита VolumeIOPSExceededCheck и VolumeThroughputExceededCheck, а со стороны инстанса InstanceEBSIOPSExceededCheck и InstanceEBSThroughputExceededCheck
Подтверждает
Число запросов или объём передачи в секунду выходит на плато на значении лимита, а aqu-sz и await вместе взлетают. В облаке метрики проверки превышения равны 1
Опровергает
Даже при %util 100% запас может оставаться, если await низкий. На SSD и RAID, которые обрабатывают запросы параллельно, %util не означает упор в лимит. Если лимит не достигнут, а высок только await, это собственная задержка диска (dk-hdd) или fsync (dk-fsync)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
В облаке помимо лимитов диска есть лимиты дисковой пропускной способности и IOPS для каждой конфигурации сервера (типа инстанса). Даже если подключить дорогой диск, на маленьком сервере всё упрётся в лимит инстанса.

Источники

  1. Exos X18 Data Sheet Seagate
    Случайное чтение блоками 4K на серверном HDD 7 200 rpm: 170 IOPS (QD16)
  2. D3-S4520 SSD Solidigm
    Серверный SATA SSD: случайное чтение и запись блоками 4 KB до 92K/48K IOPS
  3. Solidigm™ D7-P5520 and D7-P5620 Product Brief Solidigm
    Серверный NVMe SSD: случайное чтение и запись 1 000K/200K IOPS
  4. Amazon EBS General Purpose SSD volumes AWS
    Базовая производительность gp3: 3 000 IOPS и 125 MiB/s, это два отдельных лимита, каждый можно увеличить независимо
  5. Amazon EBS-optimized instance types AWS
    Для каждого типа инстанса есть свои базовые и максимальные лимиты EBS по пропускной способности, объёму передачи и IOPS
  6. iostat(1) — Linux manual page sysstat
    -x: r/s и w/s, rkB/s и wkB/s, aqu-sz (прежнее название avgqu-sz), r_await и w_await, %util. На RAID и современных SSD, которые обрабатывают запросы параллельно, %util не показывает предел производительности
  7. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeIOPSExceededCheck и VolumeThroughputExceededCheck: 1, если была попытка превысить лимит IOPS или объёма передачи тома (инстансы Nitro), VolumeQueueLength
  8. CloudWatch metrics that are available for your instances AWS
    InstanceEBSIOPSExceededCheck и InstanceEBSThroughputExceededCheck: 1, если была попытка превысить лимит EBS по IOPS или объёму передачи для инстанса

Смотрите также

Тот же слой: L11 Диск

Причины с тем же симптомом (Задержка ввода) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами