Limit IOps: ограничиваем дисковые операции

Начну в порядке от самой простой реализации до самой сложной.

Solaris

В 11.4 появился механизм ограничения операций I/O, которые доступны как свойства ZFS (аналогов в OpenZFS нет):

  • writelimit – максимальное количество байт за секунду которые может записать dataset
  • readlimit – максимальное количество байт за секунду которые может прочитать dataset
  • defaultwritelimit – максимальное количество байт за секунду которые могут записать потомки dataset’a
  • defaultreadlimit – максимальное количество байт за секунду которые могут прочитать потомки dataset’a
  • effectivewritelimit – отчёт о том, какое максимальное количество байт за секунду которые может записать dataset
  • effectivereadlimit – отчёт о том, какое максимальное количество байт за секунду которые может прочитать dataset

Минимальное возможное значение — 500К. Это не гарантированная пропускная способность, а лишь верхняя граница. В реальности скорость может быть ниже

FreeBSD

Это можно сделать через rctl, который появился в 9.0, но сами ресурсы управления I/O добавились лишь в 11.0

# rctl
rctl: RACCT/RCTL present, but disabled; enable using kern.racct.enable=1 tunable

Тут доступны такие «ресурсы»

  • writebps – максимальное количество байт за секунду которые может записать файловая система
  • readbps – максимальное количество байт за секунду которые может прочитать dataset
  • writeiops – максимальное количество операций за секунду которые может записать файловая система
  • readiops – максимальное количество операций за секунду которые может прочитать файловая система

Linux

Самый простой вариант — использовать утилиту ionice. Но она не всегда удобна: нужно переписывать скрипты и везде вставлять её.

Правильный и сложный вариант — использовать cgroup и механизм blkio controller. Но в нём очень много возможностей: от приоритетов I/O до количества секторов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *