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

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

Лавина fsync fsync storms

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

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

Запрос записать данные на диск «гарантированно» занимает от 0,1 ms до десятков ms в зависимости от диска, а когда таких запросов много, очередь растёт.

Почему Периодические сохранения и массовый выход из игры дают пачку запросов на гарантированную запись → Следствие Очередь к диску растёт → На экране Лаги в моменты сохранения, задержки при выходе из игры и смене канала

Симптомы
Микрофризы, Задержка ввода
Факторы
Остановка, Задержка
У кого
Весь сервер
Когда
С постоянным периодом, При наплыве игроков
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура, Команда инфраструктуры · Инфраструктура БД
Команда разработки: задачи
Группировать сохранения (несколько сохранений на один fsync), разносить сохранения по времени.
Команда инфраструктуры: задачи
Серверы и ОС: серверные SSD с защитой от потери питания, мониторинг длины очереди к диску и задержки fsync. Серверы БД: если сохранения идут в БД, диск журнала БД тоже на таком SSD, мониторинг задержки коммитов.
Цифры для ориентира
Время одного вызова зависит от оборудования, но примерно так: серверный SSD (с защитой от потери питания) 0,1 ms, обычный SSD от 1 до нескольких ms, облачный диск 1–2 ms, HDD 10 ms и больше. Если один поток ждёт вызовы по одному, HDD не успевает выполнить и 100 вызовов в секунду.
На графике
Всплески с постоянным периодом · длина очереди к диску, задержка сброса (flush) и записи
Где смотреть
Накладывать на время периодических сохранений и выходов из игры f/s и f_await из iostat -x 1 (число сбросов, обработанных диском, и их длительность), а также w/s, aqu-sz и w_await. Старые версии sysstat показывают aqu-sz как avgqu-sz. Для облачного диска смотреть VolumeQueueLength и VolumeAvgWriteLatency в EBS
Подтверждает
В моменты сохранений и массового выхода число сбросов и длина очереди растут вместе, w_await и f_await в несколько раз выше обычного. В это время задерживаются сохранения и смена канала
Опровергает
Если очередь растёт в моменты, не связанные с сохранениями и выходами, это бэкап или сжатие (dk-backup) либо лимит IOPS (dk-iops). Если число сбросов прежнее, а всё замедлилось, вероятнее исчерпание burst-кредитов (dk-burst)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)

Источники

  1. fsync(2) — Linux manual page Linux man-pages
    fsync сбрасывает в том числе кэш диска и блокирует вызов, пока устройство не сообщит о завершении
  2. Reliability (PostgreSQL Documentation) PostgreSQL
    У обычных SATA-дисков и многих SSD есть кэш записи, который теряется при отключении питания, поэтому для гарантированной записи нужен кэш с батареей или защитой от потери питания
  3. Amazon EBS General Purpose SSD volumes AWS
    Задержка стандартного облачного диска (gp3): единицы ms, у io2 Block Express в среднем меньше 500 µs на операцию размером 16 KiB
  4. Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
    Одно позиционирование головки HDD 10 ms
  5. iostat(1) — Linux manual page sysstat
    -x: f/s и f_await (число запросов на сброс, обработанных диском, и их среднее время), w/s, w_await, aqu-sz (прежнее название avgqu-sz)
  6. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeQueueLength (число запросов, ожидающих завершения), VolumeAvgWriteLatency (средняя задержка записи за 1 минуту, инстансы Nitro)

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

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

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

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