anonymous@RULINUX.NET~# Last login: 2024-11-20 11:26:37
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[serial]Как побороть hardware input fifo overrun на высоких скоростях?

Доброго времени суток.

Имеется плата последовательных интерфейсов Moxa CP-132, поддерживающая скорости до 921600 бод включительно. Однако уже на скорости 460800 бод начинает наблюдаться потеря данных. В dmesg'е были замечены сообщения про input overrun. Вначале грешил на конфликт по irq, но даже когда из pci слотов вытащенною всё остальное на скорости 921600 бод продолжают преподать байты (простой тест с перегоном cat'ом файла с известным содержимым через /dev/ttyM0). В попытках побороть input fifo overrun залез в сырцы ядрёных драйверов (благо выложены под GPL). Нашёл там параметр: заполнение аппаратного fifo ввода, при котором вызывается перемещение его содержимого в ядрёный буфер. По умолчанию - 14 байт (при 16 байтах собственно аппаратном fifo). Уменьшил до 4'х байт. Возросла нагрузка системы (чаше дёргается железкой), но потери данных почти, но не полностью прекратились, примерно один раз из трёх при пересылке файла ~10 мегабайт на скорости 921600 бод теряется один байт (в остальных случаях файл приходит не повреждённым). Если ещё уменьшить заполняемость аппаратного fifo - до двух байт, то это не даёт вообще никакого эффекта -- процент потерь и загрузка системы такая же, как и при штатном значении в 14 байт. Пробовал втыкать в более шуструю машину: P4 1.8 GHz супротив PIII 1GHz -- не увидел разницы (такой же процент потерь). Модифицированные дрова на более быстром железе пока не пробовал, т.к. не было времени их собрать.

Вопрос к многоуважаемым all: есть ли кто сталкивался с похожей проблемой, то существует ли способ решения? Аппаратное управление потоком задействовать не могу, так как линия связи -- пара скученных проводов RS-485. Заранее спасибо.

anonymous(*) (2009-12-07 22:29:00)

Emacs-w3m/1.4.364 w3m/0.5.2

[Ответить на это сообщение]
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

UA как бы намекает на личность анонимуса...

Ну и да имхо на 30 000 000 байт потеря 1го байта, это не аппаратная проблема, хз где возникают коллизии.

>пара скученных проводов RS-485
может быть загвозд в этом

Id(*)(2009-12-07 22:46:11)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091106 Shiretoko/3.5.5
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

>UA как бы намекает на личность анонимуса...
Посеявшего бумажку с паролем...

>Ну и да имхо на 30 000 000 байт потеря 1го байта, это не аппаратная проблема, хз где возникают коллизии.
>>пара скученных проводов RS-485
>может быть загвозд в этом
Т.е. на 230400 хватает, а на 460800 уже нужны серебряные и прочие сопли девственниц?

anonymous(*)(2009-12-07 23:13:22)

Emacs-w3m/1.4.364 w3m/0.5.2
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

Вполне возможно из-за latency. Сотвори небольшую прогу которая только извлекает данные и более ничего не делает. Если потери продолжатся, попробуй realtime kernel. Если нет - подумай о редизайне способа забора данных проги и должной буферизации ввода.

bugmaker(*)(2009-12-08 02:54:47)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

>> пара скученных проводов RS-485
> может быть загвозд в этом
вряд ли. overrun кагбэ намекает что данные в железку поступают, но не успевают извлекаться

bugmaker(*)(2009-12-08 07:02:46)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

>Вполне возможно из-за latency.
Уже делал setserial low_latency. Данные продолжают преподать.

>Сотвори небольшую прогу которая только извлекает данные и более ничего не делает.
Сваял на коленке простой байтоприниматель (на основе IOLib'а) -- тот же эффект.

>Если потери продолжатся, попробуй realtime kernel.
Про rtai уже задумывались. Вчера не было времени собрать. Сегодня, по всей видимости, будем пробовать.

anonymous(*)(2009-12-08 09:50:17)

Emacs-w3m/1.4.364 w3m/0.5.2
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

А сделать квитирование передаваемых данных? Тогда при любом проценте сбойных пакетов будет гарантия получения корректных данных.

PS: попробуй на FreeBSD.

anonymous(*)(2009-12-08 12:28:28)

Mozilla/5.0 (X11; ; Linux i686; rv:1.8.1.23) Gecko/20090823
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

> Уже делал setserial low_latency.
setserial вообще устаревшая тулзина и толку от неё никакого.

bugmaker(*)(2009-12-08 13:10:20)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

>> Уже делал setserial low_latency.
>setserial вообще устаревшая тулзина и толку от неё никакого.
И как тогда выставить low latency конкретной железке?

anonymous(*)(2009-12-08 13:46:54)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

>А сделать квитирование передаваемых данных? Тогда при любом проценте сбойных пакетов будет гарантия получения корректных данных.
fec, Рид-Соломон и иже с ними? На принимающей строне (x86) это не трудно. Но вот на передающей могут быть проблемы, поскольку там контроллер и асм.

>PS: попробуй на FreeBSD.
А moxa в ей работает? И потом, насколько мне помнится, там ещё запущенее с планированием ввода-вывода.

anonymous(*)(2009-12-08 13:50:08)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

вообще я имел в виду latency самой системы. Вот понадобилось ей в своп наложить, кернел залочился, и прога не успела данные вынуть. Попробуй кстати разные элеваторы.

bugmaker(*)(2009-12-09 07:18:07)

Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1
avatar
Скрыть

Re: [serial]Как побороть hardware input fifo overrun на высоких скоростях?

Уже понял, что low latency kernel, fnx. Пока мучаем плату у которой аппаратный fifo больше -- там таких проблем нет.

anonymous(*)(2009-12-09 09:46:20)

Emacs-w3m/1.4.364 w3m/0.5.2
Этот тред читают 4 пользователя:
Анонимных: 4
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!