Реальное время в линукс (Возможно ли? Как?)

Модератор: Модераторы разделов

alexi
Сообщения: 24

Реальное время в линукс

Сообщение alexi »

Добрый день.

Еслть проблема. В подземелье стоит машина на которой установлен линух. На машине крутится программа, которая по запуску через терминал начинает циклически сдвигать на определенное значение часть установки, при этом постоянно проверяя положение этой части в пространстве. После того как установка сдвинута, по езернет (100 мб) сети на машину стояшюю примерно 30 метров выше и метрах в 100 по длине кабеля также работающую под линухом через pipe отправляется текущее положение установки и еще пара чисел одно из которых номер сдвига в серии, второе тип пакета, условно 1 или 2. Спустя секунду машина внизу читает значение с ком порта, оправляет его туда-же что и первое число, и двигает установку в следующую позицию. Машина наверху принимает первую последовательность, включает АЦП делает примерно 250 измерений до момента пока придет вторая последовательность, по которой АЦП останавливется и машина ждет новый пакет.
Так вот, примерно 80 процентов времени все работает нормально. Но иногда случается, что машина внизу посылает по сети пакеты с опозданием до 30 секунд.
При этом на ней работает только то что жизненно важно. Все остальное кастрировано. Своп отключен.
В сегменте сети сидят только 3 машины (третья аналогична первой), и он больше никуда физически не подключен.
Может кто сталкивался с подобной проблемой. Подскажите как решали.
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

ИМХО дело тут не в реальном времени... По TCP трафик гоняете?
Моя подпись сильно длинная :)
Спасибо сказали:
Аватара пользователя
Данил
Сообщения: 944
ОС: windows xp, cruncheee, ddwrt

Re: Реальное время в линукс

Сообщение Данил »

А какое ядро?
Скачай исходники самого нового ядра, (ftp://kernel.org)
Включи опцию Preemptible Kernel (система реального времени)
Вкомпиль опции нужные сети прямо в ядро.
А также драйвер карточки.
Если тачка слабая, то удели время глубокой оптимизации под твой сундук.
зы: (читай man gcc)
Проблема исчезнет 100%
Хотя дело может быть в настройках фаирвола. :rolleyes:
ASUS eee pc 701 [windowsXP sp3] [Ubuntu linux]
wi-fi router d-link dir-400 [ddWRT v24 SP1 linux]
[sony psp 2008 slim wi-fi netBSD]
nas d-link dsm-600

Противник HAL NETWORKMANAGER и других подобных паделок!!!
Спасибо сказали:
alexi
Сообщения: 24

Re: Реальное время в линукс

Сообщение alexi »

d_Sun писал(а):
28.09.2005 17:28
ИМХО дело тут не в реальном времени... По TCP трафик гоняете?


Трафик гоняем по ТСР. Но дело тут в операционке. Примерно аналогичная конструкция работающая под win2000 таких проблем не имеет.


Данил писал(а):
28.09.2005 21:00
А какое ядро?
Скачай исходники самого нового ядра, (ftp://kernel.org)
Включи опцию Preemptible Kernel (система реального времени)
Вкомпиль опции нужные сети прямо в ядро.
А также драйвер карточки.
Если тачка слабая, то удели время глубокой оптимизации под твой сундук.
зы: (читай man gcc)
Проблема исчезнет 100%
Хотя дело может быть в настройках фаирвола. :rolleyes:


Вы наверно не совсем внимательно читали мой пост.
Я говорю не о миллисекундах. Я говорю о секундах задержки. СЕКУНДАХ!!!
Никакая оптимизация тут не поможет.
Пробовал на ядрах 2.4 и 2.6 Одинаково. И опцию вышеуказанную тоже дергал.
Спасибо сказали:
Nab
Сообщения: 257

Re: Реальное время в линукс

Сообщение Nab »

Не бейте сильно :), но я подозреваю что виноват именно стек TCP/IP,
моя скромная рекомендация:
Если софт не очень платформенно зависим, то есть разрабатываете сами, и есть желание решить раз и навсегда, то QNX вас спасет, в особенности если будете юзать только FLEET а не TCP/IP. Он под такие задачи и затачивался...
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
DW
Бывший модератор
Сообщения: 662
Статус: и это еще не все или ничего.

Re: Реальное время в линукс

Сообщение DW »

извините что вмешиваюсь, но если речь идет о реальном времени, то почему бы не попробовать дистрибутивы реального времени? тот же Sand Linux, недавно представленный Linuxcenter'ом на LinuxLand.
подумал -> выпил -> подумал -> ... но недавно врачи запретили пить.
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

Nab писал(а):
30.09.2005 20:02
то QNX вас спасет...


Нет... QNX тут явно не к месту!

alexi Расскажите детально, что крутится на всех машинах в этой сетке. Если возможно - код клиентов и сервера в студию ( ту часть где socket() )! Приорететы этих процессов тоже сюда! Вобщем все что можно :)
Моя подпись сильно длинная :)
Спасибо сказали:
alexi
Сообщения: 24

Re: Реальное время в линукс

Сообщение alexi »

Nab писал(а):
30.09.2005 20:02
Не бейте сильно :), но я подозреваю что виноват именно стек TCP/IP,
моя скромная рекомендация:
Если софт не очень платформенно зависим, то есть разрабатываете сами, и есть желание решить раз и навсегда, то QNX вас спасет, в особенности если будете юзать только FLEET а не TCP/IP. Он под такие задачи и затачивался...


Я бы с радостью использовал QNX но его у меня нет. На сайте раньше раздавали бесплатно, сейчас только триал. А мне нужна система которая будет работать долго. Я не хочу каждый месяц переустанавливать и настраивать все. Или я здесь в чемто ошибаюсь?
Второе, новую систему придется осваивать. А на это уйдет время. Много времени. Ломать уже настроенную и хоть как-то работающую систему, чтобы поэкспериментировать, мне никто не даст.
Ну и наконец, для линукса написан софт. На новую систему его придется портировать. И не факт что будет работать.

Однако, я очень сильно удивлен тем, что в вин2000 таких проблем с такой большой задержкой нет. Там есть свои проблемы в виде своп файла. Помогает его совсем отключать.




D.W. писал(а):
01.10.2005 18:37
извините что вмешиваюсь, но если речь идет о реальном времени, то почему бы не попробовать дистрибутивы реального времени? тот же Sand Linux, недавно представленный Linuxcenter'ом на LinuxLand.


Можно это подробнее.
Я вот сейчас поглядел в гугле, ничего кроме общих фраз не нашел.

Правда тут еще один момент, мне нужна бесплатная система. Так как времена все таки не очень маленькие, и никто не помрет если система не сможет обработать все как надо. Мне это просто добавит головной боли позже.
В таких условиях никто не будет платить бешенные деньги.
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

alexi писал(а):
03.10.2005 13:50
D.W. писал(а):
01.10.2005 18:37

извините что вмешиваюсь, но если речь идет о реальном времени, то почему бы не попробовать дистрибутивы реального времени? тот же Sand Linux, недавно представленный Linuxcenter'ом на LinuxLand.


Можно это подробнее.
Я вот сейчас поглядел в гугле, ничего кроме общих фраз не нашел.


Ну это вы плохо искали :) http://linuxdevices.com/

alexi писал(а):
30.09.2005 16:37
Я бы с радостью использовал QNX


:D У нет... Особой радости он вам не доставит :)
Моя подпись сильно длинная :)
Спасибо сказали:
alexi
Сообщения: 24

Re: Реальное время в линукс

Сообщение alexi »

[quote]

alexi Расскажите детально, что крутится на всех машинах в этой сетке. Если возможно - код клиентов и сервера в студию ( ту часть где socket() )! Приорететы этих процессов тоже сюда! Вобщем все что можно :)
[quote]

В 100 мегабит узернет через свичь включены 3 машины. Все три примерно одинаковы. 233 пентиум, 128 или 256 мегов памяти.
На одной установлен сервер, который через пипе принимает данные и запускает АЦП на двух других клиенты, которые двигают моторы и отправляют данные серверу.
Никаких нареканий на время реакции ни на одной машине нет. Все прерывания с устройств обрабатываются нормально.
Претензии есть только к передачи данных по сети. По большей части все работает нормально, Но иногда возникает задержка доходящая до 30 секунд.
На данный момент на всех машинах стоит дебиан сарже, с ядром 2.4.27
Это оказалась самая стабильно работающая конфигурация.
Хотя пробовал и ветку 2.6
Все ядра собраны специально под конкретные машины. Все лишнее и ненужное отрезано.
Своп отключен.
На дисках ext2. Без всяких журналов.
Все лишнии демоны отключены.
Работают только sshd. Через него захожу на машины и запускаю нужные программы.

Данные через пипе передаю так:

fp=OpenPipe("/usr/bin/nc gonipc 12345", "w");
......
move(newpos);
position=getpos();

fprintf(fp, "%d\n", position);
fflush(fp);

whait(delay);




Ну это вы плохо искали :) http://linuxdevices.com/


Извиняюсь за свою тупость.
Но не могли бы ткнуть носом в ту ссылку, где говорится про Sand Linux?
Спасибо сказали:
Nab
Сообщения: 257

Re: Реальное время в линукс

Сообщение Nab »

Я конечно не настаиваю :) Но:

Я имел ввиду не QNX Momentics на Neitrino (не помню как пишется), а ветку 4.25f (по моему эта последняя). Для таких задач самое то...
Другое дело что она весьма дорога...
Поэтому можно найти и поставить для разработки, а если понравиться то и купить...

Ссылку не дам, я выкачивал оччень давно, но если надо могу на мыло кинуть или выложить куда, там 10 метров набор и всякой лобуды под него еще меторов на 40.... а полная ветка у меня занимает 180 метров, но там куча софта, и перл и апач и средства разработки и докуметация на русском, и ветка 4.24

И кстати по поводу межкомпьютерного общения:

//2/my_prog_on_comp_2
выполняет программу на машине в подвале
//3/my_prog_on_comp_3
выполняет программу на машине на чердаке :)

а управляет этим моя прога на машине в комнате....

И вообще, познакомтесь ближе с этой чудной системой :)
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
vadiml
Сообщения: 446
ОС: fc12.x86_64

Re: Реальное время в линукс

Сообщение vadiml »

попробуйте поиграться с планировщиком, он повлияет на время реакции системы без смены ядра/дистрибутива
http://www.rhd.ru/docs/articles/schedulers/
phenom x4 905e, asus m4a79 deluxe, 4 gb, ati x550, ati 4350, 2 x 17" LCD
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

alexi писал(а):
03.10.2005 17:42
Но не могли бы ткнуть носом в ту ссылку, где говорится про Sand Linux?


Нет, про Sand Linux я ничего не знаю, но начинать можно от сюда:

http://linuxdevices.com/articles/AT2760742655.html
http://linuxdevices.com/articles/AT8073314981.html

(Nab) писал(а):Я имел ввиду не QNX Momentics на Neitrino (не помню как пишется), а ветку 4.25f (по моему эта последняя). Для таких задач самое то...


Браво! Я плакалъ :)

(Nab) писал(а):Другое дело что она весьма дорога...


Перевожу - не стоит своих денег :)

(alexi) писал(а):Данные через пипе передаю так:


т.е. с сокетами на прямую вы не работаете?
Моя подпись сильно длинная :)
Спасибо сказали:
alexi
Сообщения: 24

Re: Реальное время в линукс

Сообщение alexi »

Добрый день всем.

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

Однако остался чисто академический вопрос:
Можно ли поверх езерента или даже ТСР передавать данные реального времени?
Если можно то как?

Ведь делают же както интернет телефонию? Значит можно.
Может кто-нибудь подскажет? Желательно с отрывками кода.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Реальное время в линукс

Сообщение allez »

IP-телефонная связь использует не TCP, а UDP, поскольку в данном случае важна не надежность доставки данных, а, скажем так, своевременность. При использовании TCP неудачно переданный пакет будет отправлен повторно и разговор станет "заикаться". При использовании же UDP в разговоре могут появляться "провалы"... э-э, простите, несколько увлекся. Я вообще к тому это говорю, что подозреваю у вас неисправность сетевого оборудования. Может, сетевая карта на какой-нибудь машине дурит, может кабель плохо экранирован и проходит рядом с источником помех, может еще что-то, что не позволяет данным нормально проходить по ethernet-соединению...
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

alexi писал(а):
04.10.2005 12:16
Однако остался чисто академический вопрос:
Можно ли поверх езерента или даже ТСР передавать данные реального времени?
Если можно то как?


Нет, вы меня таки улыбаете... :) Ознакомьтесь ( хотя бы бегло ) с любой книгой по программирванию c TCP/IP, UDP/IP... Такие вопросы вы перестаните задавать! :) НЕТ по TCP нельзя передавать данные в реальном времени... Как вам уже написали, смотрите UDP/IP, и RTP.
Моя подпись сильно длинная :)
Спасибо сказали:
Nab
Сообщения: 257

Re: Реальное время в линукс

Сообщение Nab »

alexi писал(а):
04.10.2005 12:16
Добрый день всем.

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

Однако остался чисто академический вопрос:
Можно ли поверх езерента или даже ТСР передавать данные реального времени?
Если можно то как?

Ведь делают же както интернет телефонию? Значит можно.
Может кто-нибудь подскажет? Желательно с отрывками кода.

Учитывая вышесказанное, видно что Вы сами код разрабатываете, а учитывая что вы запросто перенесли интерфейс на COM порты, то и портируемость приложения очень велика...
Посему, еще раз предлагаю глянуть на QNX и именно 4.

Объясню:
микроядро размером 10 кб, это означает что вы можете еще более, чем с линуксом урезать базовую конфигурацию, отключив драйвера не используемых устройств, и различные дополнительные модули.

TCP/IP вообще можна не использовать, тем более что его надо отдельно ставить. И даже если его ставить, то его реализация считается одной из лучших, даже лучше чем в BSD.
А FLEET это их собственная разработка сетевого протокола, заточенная именно на межмашинное взаимодействие в реальном времени, которая при этом мирно сосуществует с TCP/IP.

По поводу дороговозны, ну тут цель оправдывает средства ( Если в примеру нужно управлять установкой разлива металла к примеру за несколько лимонов, то штуку зеленых можно и потратить, на весьма совершенный продукт.) Кстати используется она на весьма критичных участках производства...

А учитывая что она POSIX, то я думаю перенос не займет много времени...
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

Nab писал(а):
04.10.2005 16:09
Посему, еще раз предлагаю глянуть на QNX и именно 4.


Ну да! Если имеете склонность к некрофилии :D

(Nab) писал(а):TCP/IP вообще можна не использовать


Угу - особенно его реализацию в QNX 4

(Nab) писал(а):И даже если его ставить, то его реализация считается одной из лучших, даже лучше чем в BSD.


Извините сэр, но это НАГЛАЯ ложь! Более тормозной реализации стека TCP/IP днем с огнем не сыщеш :D

(Nab) писал(а):По поводу дороговозны, ну тут цель оправдывает средства


Конечно! Зачем использовать бесплатные ОС с полным набором современных средств разработки, если можно купить такой себе трупик QNX4...

З.Ы. Да и кстати QNX4 не поддерживает разделяемые библиотеки и многопоточность :)
Моя подпись сильно длинная :)
Спасибо сказали:
Nab
Сообщения: 257

Re: Реальное время в линукс

Сообщение Nab »

[quote name='d_Sun' date='Oct 4 2005, в 15:54' post='120692']
[quote post='120678' date='Oct 4 2005, в 16:09' name='Nab']
Посему, еще раз предлагаю глянуть на QNX и именно 4.
[quote]

[quote] Ну да! Если имеете склонность к некрофилии :D [quote]
[quote]
Не имею, но уважаю проверенные вещи....

[quote]
[quote name='Nab']
TCP/IP вообще можна не использовать
[quote]

Угу - особенно его реализацию в QNX 4

[quote name='Nab']
И даже если его ставить, то его реализация считается одной из лучших, даже лучше чем в BSD.
[quote]

Извините сэр, но это НАГЛАЯ ложь! Более тормозной реализации стека TCP/IP днем с огнем не сыщеш :D
[quote]
[quote]
Возможно, но у меня нареканий не было, хотя я использовал как домашний прокси сервер...
Достаточно долгое время :)

[quote]
[quote name='Nab']
По поводу дороговозны, ну тут цель оправдывает средства
[quote]

Конечно! Зачем использовать бесплатные ОС с полным набором современных средств разработки, если можно купить такой себе трупик QNX4...
[quote]
А если этого достаточно?

[quote]
З.Ы. Да и кстати QNX4 не поддерживает разделяемые библиотеки и многопоточность :)
[quote]
fork() рулит :) Да, согласен это недостаток, но QNX4 реализует очень простую многопроцессорность и многокомпьютерность. То есть разделение и использование ресурсов других машин в его сети реализована весьма просто...

Пусть человек решает сам, а я останусь при своем мнении :D
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

(Nab) писал(а):А если этого достаточно?


То зачем за это платить? Кастрировать Linux или FreeBSD и вуаля - QNX 4 :D

(Nab) писал(а):Пусть человек решает сам, а я останусь при своем мнении :D


Ну я собственно и ввязался в это оффтоп, не для того что бы навязать вам свое мнение, а что бы представить другую сторону медали...

З.Ы. Nab без обид ;)
Моя подпись сильно длинная :)
Спасибо сказали:
alexi
Сообщения: 24

Re: Реальное время в линукс

Сообщение alexi »

d_Sun писал(а):
04.10.2005 17:30
(Nab) писал(а):
А если этого достаточно?


То зачем за это платить? Кастрировать Linux или FreeBSD и вуаля - QNX 4 :D

(Nab) писал(а):Пусть человек решает сам, а я останусь при своем мнении :D


Ну я собственно и ввязался в это оффтоп, не для того что бы навязать вам свое мнение, а что бы представить другую сторону медали...

З.Ы. Nab без обид ;)


Ну когда буду делать что-то для атомной станции например, или уж сильно быструю и ооочень дорогую систему измерения, там уже и на всякие куниксы глядеть буду.
А пока мне линуха хватает.
Кстати, если кому интересно, нашел сайт RTAI.
Если им верить то можно используя линух делать системы реального времени.
Сейчас копаюсь.
Если кто пробовал, буду рад услышать ваше мнение.
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Реальное время в линукс

Сообщение d_Sun »

alexi вы ссылки смотрели, что я давал? Там НА МНОГО больше информации!
Моя подпись сильно длинная :)
Спасибо сказали: