Используя sched_rt_period_us для установки максимального времени между вызовами задачи порядка 10 мс

У меня была та же проблема. tl; доктор:

Если последний АРГУМЕНТ [позволенных] оценивает к 0, позвольте возвратам 1; позвольте возвратам 0 иначе.

5
10.08.2013, 15:18
2 ответа

Нет много для нахождения связанным с этим вопросом, но я действительно находил этот поток. Это немного датировано с 2009, и это расценивает 2.6. X Ядер Linux, но казались склонными.

Заголовок этого потока, Предмета: вопрос на sched-rt ограничении выделения группы: sched_rt_runtime_us - message#01766.

выборка

Я записал маленькую тестовую программу что:

(a) ветвления два потока, один SCHED_FIFO и один SCHED_OTHER (этот поток является reniced к-20) и связывают их обоих с определенным ядром.

(b) выполнения оба потоки в жестком цикле (то же количество повторений для обоих потоков) до потока SCHED_FIFO завершаются.

(c) вычисляет количество завершенных повторений регулярного потока SCHED_OTHER против постоянного числа повторений потока SCHED_FIFO. Это затем вычисляет процент на основе этого.

Я выполняю вышеупомянутую рабочую нагрузку против варьирования sched_rt_runtime_us значения (200 мс к 700 мс) хранение sched_rt_period_us константы на уровне 1 000 мс. Я также экспериментировал немного путем уменьшения значения sched_rt_period_us (таким образом увеличивающий sched гранулярность) без очевидного изменения в поведении.

Мои наблюдения перечислены в табличной форме:

Отношение # завершенных повторений reg распараллеливает / sched_rt_runtime_us / # повторений потока RT (в %) sched_rt_runtime_us

  • 0.2 100% (регулярный поток завершил все свои повторения).
  • 0.3 73%
  • 0.4 45%
  • 0.5 17%
  • 0.6 0% (поток SCHED_OTHER полностью отрегулировал. Никогда не работал),
  • 0.7 0%
0
27.01.2020, 20:41
  • 1
    К сожалению, это для sched_rt_period_us = 1 с и тяжелая рабочая нагрузка - система, наверху почти незначительная для управления задачами для рабочего времени. Мой случай является в значительной степени противоположным, очень коротким периодом, легкой рабочей нагрузкой, чрезвычайно частое переключение задач = большая система наверху. –  SF. 30.11.2013, 18:15
  • 2
    @SF - да это - то, чего я боялся. Этот поток был о единственной вещи, которую я мог вскопать связанный с этим. Я думаю, что Вы, возможно, должны были бы сделать как этот автор и создать немного сценария приложения тестирования, подобного их и развернуть диапазон значений для наблюдения то, что происходит. –  slm♦ 30.11.2013, 18:22

Это такой старый вопрос, давайте попробуем. Как я понял, вы используете механизм защиты от тупиков ( this ), чтобы избежать остановки ваших обычных процессов из-за вашего RT-процесса.

Вы говорите, что

у меня есть простая работа, которая требует не более миллисекунды или около того процессорного времени на вызов

Это короткая периодическая задача или короткая задача, запускаемая внешним входом?

Для первого случая ( краткосрочные задачи ): вы должны знать, что в Linux ядре 3.14 стало доступно SCHED_DEADLINE ]класс. Это позволяет вам установить политику планирования для ваших процессов, чтобы у них периодически выделялось как минимум столько процессорного времени. Взгляните на его документацию , вы также найдете понятную диаграмму в разделе SCHED_DEADLINE в man 7 sched . Если триггер внешний (случайный, а не периодический), то он не может быть решением.

Для второго случая ( короткая спорадическая задача ): если вы можете утверждать, что ваша программа будет выполнять только короткую работу каждый раз, когда это необходимо, вы можете попробовать отказаться от использования приоритетов и просто позвонить по номеру sched_yield после того, как ваша работа будет сделана. Это ба-подход, если занятый пул. Если вам действительно нужны приоритеты, то, возможно, вы можете дополнить его usleep , процессы, не относящиеся к rt, будут выполняться, пока этот процесс RT спит. Вы также можете знать, что если он запускается прерываниями, то, возможно, вам следует использовать нижние половины , более сложный подход.

Мммм и кое-что еще: вы должны иметь в виду, что может появиться больше процессов реального времени, чем у вас. Например, есть потоки ядра .

3
27.01.2020, 20:41

Теги

Похожие вопросы