---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/user-guide/data-processing/scheduler/job-cpu-monitor.md
  - https://ytsaurus.tech/docs/ru/user-guide/data-processing/scheduler/job-cpu-monitor.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/user-guide/data-processing/scheduler/job-cpu-monitor.md -->
# Динамический учёт потребления CPU

В случае, когда джоб потребляет существенно меньше CPU, чем было заказано в спецификации операции, гарантия CPU джоба может быть уменьшена. Освободившиеся ресурсы могут быть переданы другим джобам, работающим в операциях конкретного пула. За потреблением и изменением гарантий CPU джобов следит процесс `job-cpu-monitor`.


Периодически с контейнера с джобом снимается значение потребленного CPU за период (`check_period`). К этому значению применяется экспоненциальное сглаживание с параметром `smoothing_factor`. Далее рассматриваются последние `vote_window_size` сглаженных значений и интервал (`relative_lower_bound*current_cpu_limit`, `relative_upper_bound*current_cpu_limit`), где `current_cpu_limit` — текущий лимит, выставленный на контейнере.
После этого каждое значение преобразуется по правилу:

* `-1` — значение < `relative_lower_bound*current_cpu_limit`;
* `1` — значение > `relative_upper_bound*current_cpu_limit`;
* `0` — в остальных случаях.

Полученные значения суммируются в переменную `votes_sum`, текущее ограничение `current_cpu_limit` пересчитывается:

* `votes_sum > votes_decision_threshold => current_cpu_limit *= increase_coefficient`
* `votes_sum < -votes_decision_threshold => current_cpu_limit *= decrease_coefficient`

Значение `current_cpu_limit` ограничено снизу опцией `min_cpu_limit` из конфигурации `job-cpu-monitor` и сверху опцией `cpu_limit` из спецификации операции.
В случае, если значение переменной `current_cpu_limit` изменилось, новое значение выставляется на контейнер и отправляется планировщику, чтобы актуализировать потребление ресурсов в пуле.

`job-cpu-monitor` стремится держать текущее потребление CPU в интервале между `relative_lower_bound` и `relative_upper_bound` от выставленного на контейнере, и сдвигает указанный интервал в большую или меньшую сторону, если потребление выходит за его границы.

Значения по умолчанию (актуальные могут отличаться):

* `check_period = 1000` (ms);
* `smoothing_factor = 0.1`;
* `relative_upper_bound = 0.9`;
* `relative_lower_bound = 0.6`;
* `increase_coefficient = 1.45`;
* `decrease_coefficient = 0.97`;
* `vote_window_size = 5`;
* `vote_decision_threshold = 3`;
* `min_cpu_limit = 1`.

Перечисленные настройки можно задать в спецификации операции в секции `job-cpu-monitor`. В секции можно указать опцию `enable_cpu_reclaim`, которая включает/отключает изменение ограничения CPU. Актуальные значения опций можно посмотреть в веб-интерфейсе на странице операции, на вкладке `Specification` -> `Resulting specification` -> `job-cpu-monitor`.
<!-- endsource: ru/_includes/user-guide/data-processing/scheduler/job-cpu-monitor.md -->