Как улучшить производительность таймера 1 мс в Linux в реальном времени?
Я работаю над проектом для встроенного Linux, использующего дистрибутив arago, который, вероятно, около версии 3.3.
Я настроил таймер Linux с высоким разрешением, чтобы запускать мой процесс один раз в миллисекунду. Это работает нормально, но есть две проблемы со временем:
- Джиттер во время пробуждения
- Изменчивость времени обработки при бодрствовании, несмотря на то, что обработка, выполняемая процессом, является постоянной.
Я связываю эти проблемы с низкой производительностью 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