====**Что нужно знать**====
<{Принцип работы лимитов
IO лимиты на текущий момент ограничивают только **чтение**, лимиты на запись будут реализованы позднее.

Пользователь на текущий момент может выставить два параметра на том: гарантию и лимит в мегабайтах в секунду. //Гарантия// используется при планировании пода, на самой ноде никак не отражена. Наоборот, //лимит// учитывается на ноде и никак не влияет на размещение пода. Чтобы указать гарантию требуется соответствующая квота в ABC / Dispenser. В будущем лимит будет выставлен автоматом в зависимости от гарантии чтобы избежать злоупотребления.

У IO есть два измерения: bandwidth и iops. Лимит ограничивает оба измерения (только чтение):
#|
|| | bandwidth | iops ||
|| read | ✓ | ✓ ||
|| write | ✗ | ✗ ||
|#

Кол-во iops в секунду зависит от указанного bandwidth по формуле:

%%(math outline)
\frac {bandwidth * sr\_bandwidth\_factor}{rr\_iops\_divisor}
%%

Значения коэффициентов для разных типов дисков взяты из ((https://a.yandex-team.ru/arc/trunk/arcadia/infra/yp_export/models/disks.json arcadia)):
#|
|| storage_class[[*1]] | rr_iops_divisor | sr_bandwidth_factor | iops per MiB/s ||
|| hdd | 131072 | 1 | 8 ||
|| ssd | 8192 | 1 | 128 ||
|| nvme | 4096 | 1 | 256 ||
|#
[[#1]] для массивов пропускная способность дисков суммируется

Потребление сервиса можно посмотреть по ссылкам на панель Porto-container из Nanny:
600x0:https://jing.yandex-team.ru/files/dldmitry/2020-02-03_12-26-42%20%282%29.png

Примеры графиков[[#3]]:
((https://yasm.yandex-team.ru/template/panel/Porto-container/hosts=kpi24qv5l7iw7sxd.vla.yp-c.yandex.net;itype=netmonclickhouse;ctype=nocsla;prj=netmon;node=vla1-3417.search.yandex.net/15/?from=1580117062232&to=1580721862232 600x0:https://yasm.yandex-team.ru/img/3aeea5e69fc77423a842b8622f84c024.png))
((https://yasm.yandex-team.ru/template/panel/Porto-container/hosts=kpi24qv5l7iw7sxd.vla.yp-c.yandex.net;itype=netmonclickhouse;ctype=nocsla;prj=netmon;node=vla1-3417.search.yandex.net/16/?from=1580117089257&to=1580721889257 600x0:https://yasm.yandex-team.ru/img/4f81b69d6ac6a7f347e8134454384d61.png))
[[#3]] статистика доступна только со всего диска целиком, разбиения по томам нет

С ключами %%hosts=ASEARCH%% и %%nanny=название_няня_сервиса%% в Головане можно смотреть скорость чтения сразу по всему сервису. Например, график сервиса **yp_netmon_clickhouse_noc_sla** выглядит ((https://yasm.yandex-team.ru/chart/itype%3Dnetmonclickhouse%3Bctype%3Dnocsla%3Bgeo%3Dvla%3Bnanny%3Dyp_netmon_clickhouse_noc_sla%3Bhosts%3DASEARCH%3Bsignals%3D%7Bconv(quant(portoinst-io_read_bps_%2Fssd_hgram%2C95)%2CMi)%2Cconv(quant(portoinst-io_read_bps_%2Fplace_hgram%2C95)%2CMi)%7D/?range=2592000000 так)).
((https://yasm.yandex-team.ru/chart/itype%3Dnetmonclickhouse%3Bctype%3Dnocsla%3Bgeo%3Dvla%3Bnanny%3Dyp_netmon_clickhouse_noc_sla%3Bhosts%3DASEARCH%3Bsignals%3D%7Bconv%28quant%28portoinst-io_read_bps_%2Fssd_hgram%2C95%29%2CMi%29%2Cconv%28quant%28portoinst-io_read_bps_%2Fplace_hgram%2C95%29%2CMi%29%7D/?from=1578186000000&to=1578218400000 https://yasm.yandex-team.ru/img/3a0c57a36a2a086f3b81fb9579efba2c.png))
%%
itype=netmonclickhouse;
ctype=nocsla;
geo=vla;
nanny=yp_netmon_clickhouse_noc_sla;
hosts=ASEARCH;
signals=
    {
        conv(quant(portoinst-io_read_bps_/ssd_hgram, 95), Mi),
        conv(quant(portoinst-io_read_bps_/place_hgram, 95), Mi)
    }
%%
}>
<{Методика подбора лимитов
В тикете ссылки на форму реаллокации подов содержат в себе заранее подобранные значения bandwidth для томов на ssd.

Лимиты подобраны как **95-ый перцентиль** потребления сервисом bandwidth на ssd, bandwidth оценивается по метрике %%portoinst-io_read_bytes_/ssd_tmmv%%. Перед взятием квантили нули удаляются из серии, квантиль считается по данным за две недели.

**Проблемы** модели:
* гранулярность метрик - 5 секунд, модель использует усреднённое значение за этот интервал. Если для вас важно пиковое потребление, то предложенное значение лимита может оказаться недостаточным.
* часть метрик при старте пода может быть потеряно, т.к. метрики начинают собираться ассинхронно
* для некоторых подов пик потребления приходится на выкладку сервиса, сервис был выложен последний раз несколько месяцев назад
* модель не знает про потребление томов, поэтому гарантия раскидывается между томами сервиса равномерно, лимит же ставится один для всех томов чтобы не вызвать проблем при миграции на LVM

**Важно** проверить что сервис сможет запуститься за ожидаемое время, особенно если сервис рассчитывает на дисковый кэш. Поэтому рекомендуется сделать %%vmtouch -e <files|directories>%% на те файлы или директории, которые должны быть в кэше, после чего перевыложить сервис.

Подробно про описание поиска подходящих лимитов можно почитать ((https://wiki.yandex-team.ru/users/akorobkov/IO-statistika-po-podam-YP/ здесь))
}>

