Comments 81
Так что, если вы думаете ускорить свою ОС, делая её ОСРВ, то я вас разочарую. Надо очень чётко понимать зачем это вам нужно!
По сути вопроса — если что-то выглядит как мышеловка, и там лежит вкусный сыр — значит почти наверняка мышеловка и есть. И лучше оттуда бежать со всех ног. Вот ровно таким образом стоит включать режим повышенного внимания всякий раз, как в тексте встречаются упоминания про «реальное время» и практически всегда бежать со всех ног, как только встречается уточнение «жесткое реальное время». В 99% случаев это будет ничего не значащий маркетинг.
По сути простая логика — гарантированное время в системе возможно лишь при условии интенсивности событий не превышающих некоторую заданную планку. Т.е. по сути единственное требование к системам реального времени — это требование не терять события на пустом месте. А дальше вопрос веры… Веры в то, что конкретно взятая система это умеет. Ну, и четкие значения порогов, после которых уже «не умеет».
Лично я развлекался тем, что пытался делать очень жёсткие тайминги на пине. И удалось добиться только на жёстком прерывании, и то с большим трудом.
Впрочем, если сказать что события будут гарантированно не чаще, чем один раз в день, и отреагировать на них надо не медленнее, чем за один час — то вжух — и любой Linux на любой малопроизводительной железке становится системой реального времени.
Но опять — если мы верим, что по каким-то причинам Linux где-то у себя не «похоронит» событие. Причины? Ну, например, внеплановая перезагрузка по причине возросшей энтропии или съеденная память «кривым» прикладным софтом.
Отчасти поэтому, все, что требует быстрой и надежной реакции на внешние раздражители до сих пор пишется на «небезопасном» языке C и работает прямо по железу. Полагаю, что именно такой расклад сохранится еще довольно продолжительное время.
Впрочем, уж Вам-то я об этом точно рассказывать не должен. В любом случае спасибо за уточнение. Действительно, добиться от Linux стабильного времени реакции на события в интервале в единицы миллисекунд — та еще задача. Впрочем, именно ее и пытается решить RT RHEL. Но только ее, и ничего больше.
Действительно, добиться от Linux стабильного времени реакции на события в интервале в единицы миллисекунд — та еще задача. Впрочем, именно ее и пытается решить RT RHEL. Но только ее, и ничего больше.
Вы не поверите, но решение этой задачи — это ахренеть как важно и нужно, на определённых задачах. ОСРВ, как правило нужно на встраиваемых системах, где достаточно точно известно какое ПО будет установлено и за прикладной софт будет. Даже перезагрузка (что в общем-то нештатная ситуация), может быть предсказуемой.
Вы не поверите...
Почему не поверю? Очень даже поверю. «раз звезды зажигаются, значит это кому-то нужно» (с)
Другое дело, что я до последнего буду биться за то, чтоб все, что требует миллисекундных (и меньше) реакций накрывалось отдельным контроллером или CPLD. Использование в таких проектах Linux (пусть и припиской RT)… Персонально мне не нравится. И сдвинуть меня с этой позиции можно только административными методами (т.е. прямым приказом — делаем только на Linux). И то, скорее всего я подстелю соломки и проработаю альтернативный вариант.
«Фиксированный набор софта» мы проходили. Котеночек всегда растет. И то, что сегодня кажется нерушимым как скала, завтра может оказаться песочком. Впрочем, верю — бывает и по другому. Просто мне не попадалось.
спользование в таких проектах Linux (пусть и припиской RT)… Персонально мне не нравится. И сдвинуть меня с этой позиции можно только административными методами (т.е. прямым приказом — делаем только на Linux). И то, скорее всего я подстелю соломки и проработаю альтернативный вариант.
Я частично с вами солидарен, так как linux не является ОСРВ. Но бывает так, что дешевле хоть как-то сделать linux похожей на ОСРВ, чем переписать софт под другое аппаратно-программное решение.
Я эпизодически посматриваю в сторону RT Linux. Местами пробую (то, что доступно). Но результат мне не нравится. Возможно, да — дело в том, что «готовить не умею». А может потому что слишком испорчен низкоуровневыми решениями.
Но в целом, про MIPS и 50 микросекунд я бы почитал. Крайне интересно где здесь будет граница и есть ли в этом смысл. И по деньгам (цене системы) в том числе.
толпу условных шахтеров
какая связь? РТлинукс как правило требуется для частных случаев. Выражаясь вашим языком - для разовых клиентов.
И да, скорее всего вы "не умеете готовить"
"линукса с Xenomai с тактом прикладного софта в 50 микросекунд и rt_preempt с прикладным софтом на 100 микросекунд. "
Напишите пожалуйста об этом статейку!
Любое прерывание хоть и «ничего не делает», только пробуждает рабочий поток занимает время (5-10 мкс) и блокирует поток реального времени с высоким приоритетом.
Цифры я привёл не из воздуха а из реальных тестов.
Обработка таймера это обычно активация rt потока. Если в определённый момент времени нужно рабудить несколько потоков, то каждый нужно активировать, даже если приоритет низкий. Пустое прерывание это тоже активация потока.
"если сказать что события будут гарантированно не чаще, чем один раз в день, и отреагировать на них надо не медленнее, чем за один час — то вжух — и любой Linux на любой малопроизводительной железке становится системой реального времени." — это конечно популярное заблуждение.
"В подавляющем большинстве случаев, при нажатии на менюшку, иконку, кнопку, мы сразу увидим перерисовку экрана, если конечно все в порядке (интернет есть, процесс не завис и т.д.). А вот если случилось что-то непредвиденное, например, связь пропала, мы увидим, чем отличаются (должны отличаться) системы реального времени. Обычный смартфон мы просто перезагрузим. Но если эта система управляет электростанцией, то сами понимаете, такое не всегда возможно. Отсюда делаем вывод, что система реального времени должна предсказуемо, а не быстро, реагировать на любое событие или совокупность событий, вне зависимости от своего состояния и окружения. "
Давайте посмотрим. И начнем, допустим, с той же Wiki (русский и английский). Там дается определение из Unix, которое практически один в один повторяет Posix'овское.
Реальное время в операционных системах — это способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени.
Оригинальный текст (англ.)
Realtime in operating systems: the ability of the operating system to provide a required level of service in a bounded response time.
И чуть дальше объяснение того маркетинга, который отличает «жесткое» и «мягкое» реальное время.
Операционная система, которая может обеспечить требуемое время выполнения задачи реального времени даже в худших случаях, называется операционной системой жёсткого реального времени. Система, которая может обеспечить требуемое время выполнения задачи реального времени в среднем, называется операционной системой мягкого реального времени.
Что характерно, в английской версии такого нет. И быть не может. Потому как реальная ОС РВ обеспечивает время в любых допустимых условиях. Все. Точка. Под любыми мы понимаем и наихудшие. А если в «тепличных» может, а в предельных нет — уже не ОС РВ (или границы, в которых она остается ОС РВ указаны неправильно).
Даже если мы немного уйдем от вычислительно-компьютерной тематики и избавимся от термина операционная — оставим только систему реального времени. Не будет там ничего, сильно отличающегося. Добавится пара уточняющих определений. Но не будет ничего, про то о чем пишите Вы.
Вот и получается, что заблуждение не у меня. У меня-то как раз все четко. Заблуждение у Вас. Система реального времени не синоним системы повышенной надежности, повышенной устойчивости или многократно резервируемой системы. И это как раз то, что нужно четко понимать.
Выше я процитировал Антона Бондарева https://habr.com/ru/company/embox/blog/440390/
Приведенная мной цитата и Ваши цитаты с той же вики отлично дополняют друг друга. "если сказать что события будут гарантированно не чаще, чем один раз в день, и отреагировать на них надо не медленнее, чем за один час — то вжух — и любой Linux" — как раз таки нет, потому что отсутствует "способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени."
Я использую FreeRTOS много лет и могу привести пример оттуда, поясняющий слова Антона Бондарева. В FreeRTOS какую функцию не вызови, а последним параметром укажи максимальное время выполнения этой функции. Хочешь закинуть элемент в очередь — укажи сколько ОС будет пытаться его туда положить, и вернёт программисту код ошибки, если время превышено.
… как раз таки нет, потому что отсутствует «способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени.»
Подождите. Вы сомневаетесь в том, что Linux сможет уверенно обслуживать одно событие в сутки менее чем за один час? Я специально подбирал такие параметры, чтоб даже «за уши» притянуть возможность их неисполнения было невозможно. У тут есть все — и требуемый промежуток времени и требуемый уровень сервиса и гарантированная возможность его исполнить. Чем не ОСРВ при такой постановке задачи? Чему это противоречит?
Что до иконок и менюшек… Там тема в которую не очень хочется лезть. ОСРВ (к счастью) почти всегда не про менюшки и реакцию на пользовательский ввод. И даже не про USB (хотя бы потому что шина эта не гарантирует доставку). Просто некий культ, возведенный вокруг ОСРВ как некоторой мега крутой, мега надежной и самой правильной операционной системы… Он смешон. Нет, оно конечно: «Тем, кто любит сосиски и уважает закон, лучше не видеть, как делается то и другое.» (С) Бисмарк. Потому, может и хорошо что у окружающих есть такое ощущение. Значит мы свою работу делаем хорошо. Но поддерживать этот миф… Не знаю. Меня с детсва учили — обманывать не хорошо. Ничего с собой поделать не могу.
"Вы сомневаетесь в том, что Linux сможет уверенно обслуживать одно событие в сутки менее чем за один час?"
Да, сомневаюсь. Вы уверены, что у Вас есть опыт работы с RTOS для ведения дискуссии на эту тему?
Подождите. Вы сомневаетесь в том, что Linux сможет уверенно обслуживать одно событие в сутки менее чем за один час?
Говоря строгим языком — нет, немодифицированный Linux этого гарантировать не может. Нет гарантии что кто-то не захордил ресурс, нет гарантии что не случилось какой-нибудь ошибки приоритезации, нет гарантии что кто-нибудь не наспавнил бесконечных циклов, и прочее и прочее.
Операционки реального времени (включая пропатченный Linux) спроектированы чтобы это гарантировать.
И пространные словоблудия тут ни к чему, тут строго детерменированные понятия.
Фактически, все РТ патчи для Линукса так или иначе патчат шедулер так, чтобы можно было запустить юзерспейс таску так, чтобы кернел не мог у нее неожиданно отнять ресурс, и чтобы каждый процесс, включая кернеловые, не мог захватить ресурс навсегда (но это уже конфижится, рт патчи по дефолту дают «мягкий» риалтайм).
Ну а если кто-то не справляется в отведенное окно, то это его личные половые трудности.
Это применяется там, где весь софт так или иначе критический, но хочется сохранить преимущества линукса, и не заставлять все подряд городить в кернел.
А если речь о том, что управление о пользовательского потока не может отнять даже аппаратное прерывание, то это черт знает что, а не ОС, не говоря уже о РВ.
В ядро не нужно тащить все подряд. Там должно быть только необходимое. Так же, как и с отложенной обработкой прерываний: первичный обработчик делает только самый минимум по обслуживанию устройства, следующий этап выполняется в отложенном режиме на пониженном приоритете, и уже самое некритичное завершает пользовательский поток.
Но все что я могу на него возразить — это просто заметить, что ангелы господни пока не пишут операционные системы реального времени. Потому непогрешимого и безбажного кода, гарантирующего чего бы то не было и исправляющего за одно аппаратные сбои в железе в реальном мире, нет и быть не может. Можно математически гарантировать гарантировать правильность кода. Это сложно, но возможно. Но даже это выверенный математически код не спасет от мусора на входе, или сбоев аппаратуры, или криво написанной соседней задачи с таким же приоритетом. Потому я еще раз повторю свою мысль — у любой ОСРВ есть границы применимости. Я ВСЕГДА смогу создать внешние условия, в которых она перестанет таковой быть.
А аргумент о том, что не модифицированный линукс настолько плох, что не обслужить (ГАРАНТИРОВАННО) единственного события в сутки, да за целый час с момента его возникновения и только потому что его обязательно загрузят кривым софтом, захватывающим ресурсы, косячащим в планировщике, и увешанным бесконечными циклами (о ужас, где же обещанная вытесняющая многозадачность в бедном Linux'е???) — это даже не смешно. В конце концов Linux сервера с солидным uptime'ом не редкость И заняты они не только потреблением электроэнергии.
Криво написанный софт любую ОСРВ превратит в тыкву. И любая (в меру протестированная) ОС до определенных условий способна гарантировать сервис за время. Иначе кому она вообще нужна. Что до ОСРВ как таковых, то основная область их применения это все же задачи, требующие минимального времени реакции на событие. Потому они так любят хвастаться гарантированным временем вызова обработчика прерывания. А только после этого идет речь о всем остальном. Поймите уже наконец — мы живем в реальном мире. А в реальном мире все не так хорошо, как об этом пишут в рекламных буклетах ОСРВ и рассказывают институтские преподаватели.
А в системах повышенной надежности с жестким RT, как правило, у критичных процессов вообще нет возможности захватывать произвольные блокировки — там на это жесткий регламент, чтобы исключить непредсказуемость.
Ответственных задач очень много. Часть из них требует минимального времени, часть максимального распараллеливания работы, часть максимально надежного выполнения. Волшебной пилюли, сочетающей в себе все эти требования одновременно нет.
Вам, в ваших задачах, видимо сильно мешают блокировки. Мне — задержки. Кому-то другому может мешать что-то еще. Мир велик. Задач много. А отсюда главная мысль, которую я не устаю повторять — главное помнить граничные условия. Они есть всегда.
может кто знает, а как работает ОС МСВС-РВ? у нее как бы в названии РВ?
Более реальное «реальное время» реализовано в наборе патчей PREEMPT_RT, поддерживаемым Инго Молнаром сотоварищи. Там уже можно прерывать прерывания, критические секции, и т.п.
сходиться к ln2 ≈ 0.693147
Для одного процессора. Для SMP ~33%, вай!
«Hint:
Hints for getting rid of SMI interrupts on x86
1. Use PS/2 mouse and keyboard,
2. Disable USB mouse and keyboard in BIOS, „
USB контроллер, в особенности нагруженный — самый простой способ увеличить задержки в системе.
С другой стороны, вряд-ли кто-то будет использовать сервер целиком для задач реального времени. У LabVIEW, например, есть Real-Time Module, работающий параллельно с основной ОС.
Даже сбацал на нем небольшой проект лет наверное 20 с чем-то тому назад.
Ну а с линуксом старт всегда классический, с логом в порт отладки, или даже на экран — минимум пару минут.
Красиво получается: надо тормозить, до столкновения пара секунд, скорость предельная…
А линуха решила перегрузиться…
Бывают ещё задержки на запуск ФАПЧ (PLL), они сопоставимы со временем на старт кварца.
Для мк с + голое железо — это время почти всегда равно старту кварца
Нифига. Нет, конечно, если у вас один МК уровня атмеги и там что-то типа цикла для стиральной машины, оно может так стартовать (разработчики, кстати, какого хрена моя стиралка выходит на готовность через 3 секунды?).
Но в реале, сначала дожидаемся переходных процессов в БП (легко секунда на мощных, если там что-то силовое питается), потому кварц и система тактирования (с 5 разными PLL в контроллере, ага), потом загрузчик проверяет чек-сумму, потом запуск RTOS и запуск процессов в ней, инициализация/проверка внешней памяти, загрузка в оперативку чего-то, потом инициализации всякой периферии, запуск тестов, и только потом запуск логики. Чуть более сложная система, и все, несмотря на МК и RTOS у вас пара секунд запуска, а то и больше.
И заметьте, это еще без динамического выделения и соответственных задержек на запуск конструкторов-деструкторов на этапе инициализации.
А линукс при правильной готовке, тюнинге ядра, статической линковке и трюков по отключении автоматической детекции оборудования и захардкоживания списка периферии и вырезанию всего ненужного в данном системе выходит на готовность за 10-20 секунд. Не в стоке, да. Но достижимо.
И еще. Тут пишут, зачем нужно реальное время в линуксе, мол это ему не нужно. Возражу, подсистема РВ Линуксу очень нужна, даже если отбросить всякие использования Линукса для создания систем РВ, она нужна для работы с мультимедиа, особенно звуком.
Какая-то незаконченная статья, про тесты слишком мало инфы, а про упомянутую "доводку" вообще ничего нет
Но тема очень интересная, информации действительно по ней мало
И, пожалуй, именно так и надо. Нишевая потребность в RT обеспечивается отдельной веткой. Тем более, что Linux RT скептиков (типа меня) слишком много. Не стоит вносить в систему яблоко раздора. Пусть эта война идет где-то рядом. А когда она закончится возьмут назад победителя. Все правильно сделано.
В ядре (даже ванильном) есть «REAL TIME». Это максимальный приоритет, который настоятельно не рекомендуется выставлять без четкого понимания того зачем это надо. Но всегда в документации есть сноска, про то что это не совсем REAL TIME, а так… Некоторое к нему приближение. Потому как REAL TIME это не только про «быстро».
Потому в Вашей постановке вопроса все УЖЕ сделано, а даже в POSIX'овском понимании, увы нет.
Поэтому переключатель «RT/non-RT» смысла не имеет, потому что при его включении сломается 90% всякого.
А для того, чтобы приложение успевало еще и обрабатывать кадры, чтобы пользователю нравилось плавное видео, нужно не RT, а просто достаточное общее быстродействие.
Вообще, условие удовлетворения системой требованиям RT можно сформулировать довольно просто: если реактивность железа позволяет обрабатывать события без потерь, но система из-за каких-то внутренних ограничений неспособна эту реактивность реализовать, то эта система неполноценна в плане RT.
Я, честно говоря, не вижу никаких технических проблем обеспечить время реакции, сколь угодно близкое к быстродействию железа, хоть в Linux, хоть в Windows. Для этого достаточно очень простых доработок в ядре. В Windows этого не делают, поскольку это невыгодно MS, а вот почему этого не делют в Linux, который сплошь и рядом используют в разных устройствах?
Не понял, в чем Вы видите «не RT» в поддержке видеопотока по USB? RT — это прежде всего своевременная реакция на события — в данном случае, это регистрация без потерь всех приходящих по USB пакетов.
В том, что задача обработки видео по USB подразумевает получение данных не когда получится, а когда он придет в буфер. Если у вас там что-то свое крутится, то идите нафиг, системе надо или кусок данных пропустить, или на вашу задачу забить.
Поэтому ОС РВ должна прежде всего обеспечить ее клиентам (процессам и драйверам) возможность реагирования на асинхронные события со скоростью, сравнимой со скоростью голого железа. Как они этой возможностью распорядятся — вопрос отдельный.
Если за время процессора конкурирует несколько задач, то приоритеты определяют, которую из них выполнять прямо сейчас (прервав, при необходимости, менее приоритетную).
Грубо говоря, ОС РВ гарантирует, что наиболее приоритетный код всегда получит управление в течение периода, определяемого объективными факторами (например, быстродействием процессора, контроллера прерываний, расходами на поиск обработчика прерывания, переключение задач и т.п.).
Например, если любое аппаратное прерывание гарантированно доставляется системе в течение, скажем, 1 мкс, но, при отсутствии более приоритетных прерываний, обработчик может быть вызван как через 1 мкс, так и через 50 или 100 мкс, то эта система не может называться ОС РВ. Если наиболее приоритетный поток, перейдя в состояние готовности, технически может начать выполнение через 1 мкс, но фактически может начать его только через 100 или 500 мкс (например, когда текущий поток догадается освободить процессор) — это тоже не ОС РВ.
то приоритеты определяют, которую из них выполнять прямо сейчас (прервав, при необходимости, менее приоритетную).
Спасибо, кэп, а то я не догадался!
С чего тред-то начался? С тезиса «а чо бы не сделать из линуксового ядра RTOS».
Я ответил на это «гарантируем выделение времени на произвольные задачи — ломаем обмен по USB», и тут вы начали строчить цитаты из википедии. Спасибо за умение цитировать википедию, но ситуация странная — вы же первый спросили, а почему, собственно, так не сделано, и когда вам начали объяснять, почему же не сделано, вы начали рассказывать, что дескать, они глупые, плохо понимают смысл понятия, и так далее. Вы уж определитесь — вы или просите объяснений или стоите на тумбочке с видом «вы все non-rtOS, а я дартаньян».
Дело не в том, что RTOS c USB не может быть. Дело в том, что современная практика использования USB подразумевает, что процессору надо когда происходит обмен данными, часто и непредсказуемо уходить в обработку. Для пользовательской системы такое положение дел допустимо, для RTOS нет. И если вам надо 2мс на обработку пакета, а гарантированная реакция RTOS должна составлять 1мс, то либо крестик снять, либо трусы надеть: либо прерывать обработку пакета, если вдруг надо пошевелить движком, но тогда ломается пользовательский опыт — скипать фреймы тоже не дело, либо ждать от 1 до 2мс, и тогда ломается уже реалтаймовость. Поэтому очень сложно совместить текущую пользовательское ядро, в которой данные важнее чем быстрая реакция на события (пользователь и подождать может) и RTOS, в которой важнее реакция, а все остальное в меньшем приоритете.
Что Вы называете «обработкой» приходящего пакета? Для любого пакета, приходящего от любого устройства (хоть USB, хоть PCIe, хоть с любой другой шины) прежде всего необходимо зарегистрировать этот пакет, поставив его в очередь на обработку, а контроллер DMA перенастроить на свободную область памяти. Для выполнения этих действий на современном железе достаточно единиц, максимум — десятков микросекунд. Если где-то код занимается этим аж две миллисекунды — значит, это очень кривой код. Задача ядра — обеспечить надежный и непрерывный прием пакетов, а не их обработку.
Обработка собственно данных из пакета — это уже совершенно отдельная задача, чаще всего выполняемая «пользовательским» кодом. Там тоже должны быть приоритеты — эта задача, понятное дело, должна иметь преимущество перед задачами отображения UI. Если быстродействие железа достаточно, то задача ОС РВ — обеспечить этой задаче возможно загружать железо настолько, насколько это необходимо.
Если же быстродействия железа для конкретной задачи недостаточно, то вообще нет смысла говорить о «реалтаймовости» ОС на этом железе.
Все проблемы с «недостаточным реалтаймом» возникают от того, что на достаточно быстром железе ОС или применяет неправильные алгоритмы планирования/переключения, или сама неприлично тормозит в ядре или собственных стандартных драйверах, чем регулярно грешит винда.
А ко времени реакции UI на действия пользователя понятие ОС РВ имеет отношение только в том случае, когда эти действия включены в набор событий, безусловно критичных ко временем реакции. Например, если делать ОС РВ для единого автомобильного компьютера, который управляет и двигателем, и тормозами, и вентиляцией, и мультимедией, то события «повысилось содержание кислорода в отработавшем газе», «передвинут рычаг управления дальним светом» и «нажата педаль тормоза» будут относится к безусловно критичным, а события «повернут регулятор оборотов салонного вентилятора» и «нажата кнопка перехода к следующей песне» — к некритичным. Хотя при этом разумно дать событиям управления вентилятором бОльший приоритет, чем управлению музыкой, но это уже кому как.
Как минимум, что получение пакетов по USB можно обеспечить минуя ЦП по DMA. А разбор пакетов в удобное время.
Интерфейс USB крайне напряжный и точно не лучший для RT. В каких-то случаях, возможно и подойдёт, но время реакции системы увеличивает значительно.
ps. Выше дают ссылку на рекомендации по настройке RT системы. Цитата:
«Hint:
Hints for getting rid of SMI interrupts on x86
1. Use PS/2 mouse and keyboard,
2. Disable USB mouse and keyboard in BIOS, „
Если же, к примеру, к интерфейсу USB3 подключить внешний SSD и интенсивно с ним поработать, цифры ещё заметно подрастут.
В каких-то случаях остатка отзывчивости системы может хватить, но далеко не всегда.
У меня с USB 3.0 интеловский драйвер iusb3xhc.sys под Win7 потребляет около 50 мс на десять секунд дерганья мышью, и около 150 — на десять секунд видео 1920x1080 (сжатого) от USB-камеры. Но и это тоже очень и очень много. Если в случае с мышью обмен по USB может идти программно (поскольку данных в пакете мало), то с камеры он обязан идти по DMA. Что там столько времени может делать драйвер — ума не приложу.
Да, именно такие косяки в виндовых драйверах (которые, кстати, сплошь и рядом нарушают требования самой MS, что не мешает им проходить все тесты и получать сертификаты) и портят весь реалтайм в системе. А ведь чисто технически, с правильно сделанными драйверами, винда была бы вполне себе RT-системой.
Даже если драйвер USB в Windows 10 настолько кривой, что его можно оптимизировать по производительности на порядок, он всё равно будет отнимать больше времени, чем драйвер tcpip.
Ну и в DOS отключение USB контроллеров сказывается весьма позитивно на отзывчивости системы — есть знакомое приложение, работающее с оборудованием через pci, которое пропускает циклы просто при включении контроллера USB в BIOS.
Но на сеть уже давно завязано гораздо больше, чем на USB. В каких-то версиях винды заметно тормозил и tcpip.sys, но быстро поднялся вой, поскольку это реально мешало множеству задач, и драйвер поправили. А USB параллельно с задачами реального времени используется гораздо реже, поэтому первый совет — «отключи USB».
Я недостаточно близко знаком с протоколами USB, чтобы судить предметно, но что именно там может требовать миллиона команд в секунду при шевелении мышкой, и трех миллионов — при захвате видеопотока? Это можно было бы понять при программной передаче данных, но там же давным-давно DMA.
Да, программисты данного поставщика умеют писать софт, ставящий на колени любой компьютер, но к написанию драйверов они, к счастью, (пока) не причастны.
Была альтернатива — FireWire, принципиально более простая, но лицензионная политика Apple как одного из разработчиков убила этот протокол.
Насколько я знаю, в ванильном ядре кроме приоритета и очередей нет ничего. Впрочем, трассировка (отслеживание времени) вполне возможно. А вот как-то нормализовать джитер, гарантировать в разумных пределах время реакции (или гарантированно не потерять одно из двух быстрых последовательных событий) и гарантировать дедлайн… Насколько я знаю в ванили это невозможно. Что-то позволяют RT-патчи или модификации типа описываемой в данной статье.
Но все же я вынужден вернуться к первому предложению данного ответа. Тема RT уже довольно продолжительное время не находится сфере моих непосредственных интересов. А при возникновении оных я пытаюсь решить проблему другими средствами.
Если в Linux есть механизм отложенной обработки прерываний, то организуются ли его очереди в соответствии с приоритетом самих прерываний?
да, это существует из коробки.
Linux в режиме реального времени