Как улучшить производительность таймера 1 мс в Linux в реальном времени?

Я работаю над проектом для встроенного Linux, использующего дистрибутив arago, который, вероятно, около версии 3.3.

Я настроил таймер Linux с высоким разрешением, чтобы запускать мой процесс один раз в миллисекунду. Это работает нормально, но есть две проблемы со временем:

  1. Джиттер во время пробуждения
  2. Изменчивость времени обработки при бодрствовании, несмотря на то, что обработка, выполняемая процессом, является постоянной.

Я связываю эти проблемы с низкой производительностью Linux в режиме реального времени. Но мне нужно исследовать способы улучшения производительности в реальном времени.

Я проверил, что ядро ​​настроено с опцией ядра CONFIG_PREEMPT, которая хороша в режиме реального времени.

Я также применил класс планирования SCHED_FIFO к своему процессу:

struct sched_param schedparm;
memset(&schedparm, 0, sizeof(schedparm));
schedparm.sched_priority = 1; // lowest rt priority
sched_setscheduler(0, SCHED_FIFO, &schedparm);

но это не имело значения.

Я предполагаю, что логичным шагом является применение исправления PREEMPT_RT к сборке ядра, но я пока не определил, как это сделать.

Что еще я могу сделать, чтобы улучшить изменчивость джиттера / длительности?

Или кто-нибудь может предложить доступное руководство по применению патча PREEMPT_RT?

2 ответа

Кажется, PREEMPT_RT - следующий логический шаг. Вы пробовали этот урок?

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO

Обновление: я предлагаю вам посмотреть, как другие строят упреждающее ядро, например, здесь: https://aur.archlinux.org/packages/linux-rt/

Вы можете прочитать PKGBUILD, чтобы понять, что сделано.

Если вы используете тестирование Debian или LMDE в этом отношении, они имеют предварительно скомпилированное ядро ​​PREEMPT_RT в репозитории для архитектур x86 и amd64.

apt-get install linux-image-rt-686-pae

или же

apt-get install linux-image-rt-amd64
Другие вопросы по тегам