URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9598
[ Назад ]

Исходное сообщение
"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"

Отправлено greenetc , 10-Дек-12 18:19 
День добрый. Подскажите советом куда смотреть.
От устройства приходят данные пакетами по 8 байт.
Параметры порта стоят следующие
===========================================================================================
[root@i7 ~]# stty -F /dev/ttyS0
speed 57600 baud;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 8; time = 0;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
===========================================================================================

Если пакетов идет приблиз 80-100 в сек то все ок , если больше начинает идти то начинает терять кучу пакетов.


Содержание

Сообщения в этом обсуждении
"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено pavlinux , 11-Дек-12 03:37 
> День добрый. Подскажите советом куда смотреть.
> От устройства приходят данные пакетами по 8 байт.
> Если пакетов идет приблиз 80-100 в сек то все ок , если
> больше начинает идти то начинает терять кучу пакетов.

Утра доброе. Подскажите советом куда смотреть.
Я работаю. Получаю аванс и зарплату пакетами по 10 купюр.
Параметры жены следующие
==========================================================================================
[root@abramovich ~] # stty -F /dev/wife
w=55, len=175, h=90, boobs=3, edu=MGU, otsos=100500+, piz=^o
-mozg, +havach, +quiet  
==========================================================================================

Если на жену уходит приблизительно 80-100% в мес, то всё OK,  
если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю терять кучу пакетов.


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено greenetc , 11-Дек-12 15:15 
>[оверквотинг удален]
> Я работаю. Получаю аванс и зарплату пакетами по 10 купюр.
> Параметры жены следующие
> ==========================================================================================
> [root@abramovich ~] # stty -F /dev/wife
> w=55, len=175, h=90, boobs=3, edu=MGU, otsos=100500+, piz=^o
> -mozg, +havach, +quiet
> ==========================================================================================
> Если на жену уходит приблизительно 80-100% в мес, то всё OK,
> если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
> терять кучу пакетов.

если это аллегория на тему "недостаточно скорости работы порта" то 800 байт в секунду против 57600 скорости порта не ровня. Игры с параметрами icanon и vmin и vtime не привели к результату.


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено pavlinux , 12-Дек-12 00:27 
>>[оверквотинг удален]
>> Если на жену уходит приблизительно 80-100% в мес, то всё OK,
>> если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
>> терять кучу пакетов.
> если это аллегория на тему "недостаточно скорости работы порта"

Это была аллегория на тему, - "Что за прибор?"
С этой стороны, как я понял, впаянный в чипсет иль рядом UART 16550A, с другой стороны кто?

> 800 байт в секунду против 57600 скорости порта не ровня

Может стоить понизить до 2400 иль 1200 хотя бы.


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено greenetc , 12-Дек-12 11:42 
>>>[оверквотинг удален]
>>> Если на жену уходит приблизительно 80-100% в мес, то всё OK,
>>> если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
>>> терять кучу пакетов.
>> если это аллегория на тему "недостаточно скорости работы порта"
> Это была аллегория на тему, - "Что за прибор?"
> С этой стороны, как я понял, впаянный в чипсет иль рядом UART
> 16550A, с другой стороны кто?

прибор считывающий поступающие импульсы с крыльчатки для измерения скорости потока бенза (atmega) .... вот их то и приходит 80-200 в сек.

>> 800 байт в секунду против 57600 скорости порта не ровня
> Может стоить понизить до 2400 иль 1200 хотя бы.

Попробую. Я всегда считал что бОльшгая скорость охватит в любом случае полосу пропускания и гарантировано не потеряет пакеты ... а выходит что не так что ли ?


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено pavlinux , 12-Дек-12 13:50 
>>>>[оверквотинг удален]
>>> 800 байт в секунду против 57600 скорости порта не ровня
>> Может стоить понизить до 2400 иль 1200 хотя бы.
> Попробую. Я всегда считал что бОльшгая скорость охватит в любом случае полосу
> пропускания и гарантировано не потеряет пакеты ... а выходит что не
> так что ли ?

Обратно-то тоже летят данные и команды, atmega может просто "захлёбываться".  


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено ACCA , 13-Дек-12 06:35 
> С этой стороны, как я понял, впаянный в чипсет иль рядом UART
> 16550A, с другой стороны кто?

Не факт. Может оказаться какая-то самопальная железяка, а то и очень б/у хня на i386 с 8250, что и создаёт проблему.


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено Alex_S , 13-Дек-12 03:45 
>> терять кучу пакетов.
> если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
> в секунду против 57600 скорости порта не ровня. Игры с параметрами
> icanon и vmin и vtime не привели к результату.

чем читаешь и как определяешь, что пакеты теряются ?

low_latency регулировал ?


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено Andrey Mitrofanov , 13-Дек-12 09:30 
> low_latency регулировал ?

...или приоритет читающей программы поднять?


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено greenetc , 13-Дек-12 11:51 
>>> терять кучу пакетов.
>> если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
>> в секунду против 57600 скорости порта не ровня. Игры с параметрами
>> icanon и vmin и vtime не привели к результату.
> чем читаешь и как определяешь, что пакеты теряются ?

Читаю в потоке.

pthread_create(&idle, &attr, &idleThread, 0);
...
...
...
extern "C" void *idleThread(void *me).
{    

    for (;;) {
        struct timeval timeout = { 0 };                
        fd_set con;
        FD_ZERO(&con);
        FD_SET(0, &con);
        FD_SET(fd_io, &con);
        int result = select(MAX(fd_io+1), &con, 0, 0, &timeout);
        if ( result )
        {
           if (FD_ISSET(fd_io, &con)).
           {
                        unsigned char data[8];
                        int d = read(fd_io, &data[0], 8);
                        if ( data[0] == 83 )
                        {
                              if (  data[1] == 75 )                                          
                                 printf("%.f\n", counter++);
                        }
           }
        }
     }
}


Когда скорость поступления данных в порт приемлимая вижу на экране равномерный вывод нарастающий, когда скорость растет сразу вижу заикания вывода.

> low_latency регулировал ?

не сталкивался как то с параметром таким. Как его регулировать ?


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено pavlinux , 14-Дек-12 00:47 
>> чем читаешь и как определяешь, что пакеты теряются ?
> Читаю в потоке.
> pthread_create(&idle, &attr, &idleThread, 0);
> ...

А программную модель работы отлаживал, без прибора,
через пайп/фифо иль для полного кайфа по нуль-модему?

>  for (;;) {
>             printf("%.f\n", counter++);
> }

counter++ не переполняется?

Если counter глобальная, где мутексы иль спинлоки?


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено Alex_S_reg , 19-Дек-12 03:34 
>>>> терять кучу пакетов.
>            if > (FD_ISSET(fd_io, &con)).
>            {  
>          
>  unsigned char data[8];        
>  int d = read(fd_io, &data[0], 8);        
>  if ( data[0] == 83 )
>          
>

кароче ...
"Почему четыре?"  .. в смысле - почему 8 байт ?  там еще может быть, выгребай до конца,
   пока read() не вернет ощибку.

да и результат read() в любом случае полезно проверять .

успехов !


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено greenetc , 13-Дек-12 12:43 
>>> терять кучу пакетов.
>> если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
>> в секунду против 57600 скорости порта не ровня. Игры с параметрами
>> icanon и vmin и vtime не привели к результату.
> чем читаешь и как определяешь, что пакеты теряются ?
> low_latency регулировал ?

просто включал

setserial /dev/ttyS0 low_latency

никакого эфекта не заметил


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено pavlinux , 14-Дек-12 00:40 
>> low_latency регулировал ?
> просто включал
> setserial /dev/ttyS0 low_latency
> никакого эфекта не заметил

struct sched_param prm;
prm.sched_priority =  sched_get_priority_max(SCHED_FIFO);
pthread_setschedparam(pthread_self(), SCHED_FIFO, &prm);

for (;;) {
        struct timeval timeout = { 0 };                
        fd_set con;
...
}

# chrt -p -f 99 `pgrep "[irq]/4"` иль как-то так...


"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Отправлено greenetc , 14-Дек-12 13:57 
>[оверквотинг удален]
> struct sched_param prm;
> prm.sched_priority =  sched_get_priority_max(SCHED_FIFO);
> pthread_setschedparam(pthread_self(), SCHED_FIFO, &prm);
> for (;;) {
>         struct timeval timeout =
> { 0 };
>         fd_set con;
> ...
> }
> # chrt -p -f 99 `pgrep "[irq]/4"` иль как-то так...

ммм ... не подумал над приоритетом .. стояло так

struct sched_param pamparam;
param.sched_priority = sched_get_priority_min(SCHED_FIFO);
pthread_attr_setschedparam(&attr, &pamparam);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_t idle;
if (pthread_create(&idle, &attr, &idleThread, 0) != 0) {
   pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
   param.sched_priority = 0;
   pthread_attr_setschedparam(&attr, &pamparam);
   pthread_create(&idle, &attr, &idleThread, 0);
}
pthread_attr_destroy(&attr);

попробую sched_get_priority_max