20 лет спустя Linux реального времени добрался до ядра.
Работа, проделанная над Linux реального времени, в течение многих лет приносила пользу ОС с открытым исходным кодом, но только на этой неделе Линус Торвальдс включил свою последнюю часть в основное ядро. Что именно заняло так много времени?
Старший разработчик Linux реального времени Стивен Ростедт и ваш покорный слуга Стивен Воан-Николс на Linux Summit Europe в Вене.
ВЕНА -- Спустя 20 лет Real-Time Linux (PREEMPT_RT) наконец-то наконец-то появился в основном ядре. Линус Торвальдс благословил код, когда был на европейском саммите Open Source. Почему это так важно? Давайте начнем с объяснения, что такое операционная система реального времени (RTOS) и для чего она нужна.
Что такое ОСРВ?
ОСРВ — это специализированная операционная система, предназначенная для точного и надежного выполнения срочных задач. В отличие от операционных систем общего назначения, таких как Windows или macOS, RTOS создана для реагирования на события и обработки данных в пределах строгих ограничений по времени, часто измеряемых миллисекундами или микросекундами. Как выразился Стивен Ростедт, известный разработчик Linux в реальном времени и инженер Google: «Реальное время — это самый быстрый и худший сценарий».
Он имеет в виду, что основной характеристикой ОСРВ является ее детерминированное поведение. ОСРВ гарантирует, что критически важные задачи будут выполнены в установленные сроки. Многие люди предполагают, что ОСРВ предназначена для быстрых процессов. Это не так. В ОСРВ важна не скорость, а надежность. Эта предсказуемость имеет решающее значение в приложениях, где время имеет важное значение, таких как промышленные системы управления, медицинское оборудование и аэрокосмическое оборудование.
Одним из примеров операционных систем реального времени, используемых сегодня, является VxWorks, которая используется в марсоходах НАСА для управления ими, а также в самолете Boeing 787 Dreamliner для управления системами авионики, обеспечивая оперативность управления полетом в реальном времени. Другим примером является QNX Neutrino, который широко используется в автомобилях для информационно-развлекательных целей и передовых систем помощи водителю, таких как антиблокировочная система тормозов.
История Linux в реальном времени
Код Linux, работающий в режиме реального времени, теперь встроен во все дистрибутивы Linux, начиная с будущего ядра Linux 6.12. Это означает, что вскоре Linux начнет появляться в большем количестве критически важных устройств и промышленного оборудования. Но путь сюда занял приятное время.
История Linux реального времени началась в конце 1990-х годов, когда возникла растущая потребность в Linux для поддержки приложений реального времени. Первоначальные усилия были сосредоточены на создании отдельных ядер реального времени, которые работали бы вместе с ядром Linux. Сюда входили академические проекты, такие как KURT из Канзасского университета; RTAI из Миланского университета; и RTLinux Института горного дела и технологий Нью-Мексико.
Инго Молнар, старший разработчик ядра Linux, начал собирать и перерабатывать части этих технологий в 2004 году, чтобы создать основу для набора патчей с приоритетом в реальном времени PREEMPT_RT.
Этот подход отличался от более ранних решений Linux для работы в реальном времени, поскольку он модифицировал существующее ядро Linux, а не создавал отдельное ядро реального времени. К 2006 году он приобрел достаточную популярность, и Линус Торвальдс заметил: «Управлять лазером с помощью Linux — это безумие, но каждый в этой комнате сумасшедший по-своему. Так что, если вы хотите использовать Linux для управления промышленным сварочным лазером, у меня есть нет проблем с использованием PREEMPT_RT».
К 2009 году небольшая группа разработчиков ядра, в которую входили Томас Гляйкснер, Питер Зилстра и Ростедт, завершила объединение предыдущих прототипных разработок в единый набор патчей вне дерева. Именно тогда многие компании начали использовать этот набор патчей для создания промышленных систем, требующих жестких свойств реального времени с точностью до миллисекунды.
По мере продвижения проекта многие его элементы переносились в ядро. Ростедт сказал мне, что в каком-то смысле неправильно говорить, что режим реального времени появился только сейчас в Linux. Многие из его функций были внедрены в основной Linux на протяжении многих лет. Некоторые из них действительно необходимы для Linux, которым вы пользуетесь каждый день.
Например, скорее всего, вы никогда не слышали о «NO_HZ», который снижает энергопотребление в простаивающих системах. NO_HZ — это то, что позволяет Linux эффективно работать на машинах с тысячами процессоров. «Вы не представляете, насколько улучшился Linux благодаря патчу реального времени», — подчеркнул Ростедт. «Единственная причина, по которой Linux сегодня работает в центрах обработки данных, — это проделанная нами работа».
Таким образом, без NO_HZ Linux не мог бы использовать практически все центры обработки данных. Это, в свою очередь, объясняет, почему Linux использует облако. Я не знаю точно, как бы выглядел мир без этого вклада в реальном времени, но он не выглядел бы так, как сегодня.
Linux реального времени также оказался полезным, о чем никто и не мечтал вначале. Ростедт вспоминал: «Еще в 2005 году я получил отчет об ошибках в режиме реального времени, отправил патч и сказал: «Эй, вот исправление. Можете ли вы его применить?» А парень такой: «Я не знаю, что делаю». Я ответил: «Подожди, ты разве не разработчик ядра?» Он ответил: «Я гитарист».
Оказалось, что он использовал ранние патчи реального времени, потому что использовал JACK, звуковой сервер для аудиосоединений с малой задержкой. Он использовал его, потому что, как и большинство музыкантов, он был слишком беден, чтобы покупать высококачественное оборудование, поэтому, продолжил Ростедт, «он купил дешевый ноутбук с Linux и JACK, потому что с патчем реального времени он вместо этого мог бы хорошо записывать». пропуска времени записи на жесткий диск».
Оказывается, многие музыканты были первыми пользователями Linux в режиме реального времени, потому что он позволял им создавать высококачественные записи по дешевке. Кто знал? Другие функции Linux, работающие в режиме реального времени, которые с годами проникли в основное ядро, включают:
- Введение мьютексов
- Ftrace, возможно, самый важный инструмент отладки Linux.
- Наследование приоритетов для приложений пользовательского пространства
Почему Real-Time Linux занял так много времени?
Так почему же Real-Time Linux только сейчас полностью благословлен в ядре? «На самом деле мы бы не стали предлагать что-то, если бы не считали, что это готово», — объяснил Ростедт. «Почти все обычно переписывалось как минимум трижды, прежде чем попасть в основную версию, потому что у нас была очень высокая планка того, что будет включено».
Кроме того, путь к основной линии был связан не только с техническими проблемами. Политика и восприятие также сыграли свою роль. «Вначале мы даже не могли упомянуть режим реального времени», — вспоминает Ростедт. «Все говорили: «О, нам плевать на режим реального времени».
Еще одной проблемой были деньги. В течение многих лет финансирование Linux реального времени было нестабильным. В 2015 году Linux Foundation учредил совместный проект Real-Time Linux (RTL) для координации усилий по включению PREEMPT_RT.
Последним препятствием на пути полной интеграции была переработка функции ядра print_k, важнейшего инструмента отладки, появившегося в 1991 году. Торвальдс особенно защищал printk — он написал исходный код и до сих пор использует его для отладки. Однако printk также создает жесткую задержку в программе Linux при каждом ее вызове. Такое замедление неприемлемо в системах реального времени.
Ростедт объяснил: «В Printk есть тысяча хаков для обработки тысячи различных ситуаций. Всякий раз, когда мы модифицировали printk, чтобы что-то сделать, это нарушало один из этих случаев. Особенность printk в отладке заключается в том, что вы можете точно знать, где вы были, когда процесс падал, когда я очень, очень сильно нагружал систему, и задержка в основном составляла около 30 микросекунд, а затем внезапно она подскакивала до пяти миллисекунд». Эта задержка была сообщением printk.
После долгой работы, многих жарких дискуссий и нескольких отклоненных предложений в начале этого года был достигнут компромисс. Торвальдс счастлив, разработчики Linux реального времени счастливы, пользователи printk счастливы, и, наконец, Linux реального времени реален.
После двух десятилетий разработки патч реального времени для Linux наконец был объединен с основным ядром. Эта веха знаменует собой кульминацию многолетней работы разработчиков ядра по обеспечению детерминированной производительности с малой задержкой в Linux.
Благодаря этому ядро Linux становится полностью вытесняемым, что позволяет ему реагировать на события в течение микросекунд. Эта возможность имеет решающее значение для приложений, требующих точного синхронизации, таких как промышленные системы управления, робототехника и производство звука.
С появлением патча реального времени Linux теперь может стать серьезным игроком в мире RTOS. Это победа не только производителей систем реального времени, но и всех пользователей Linux.