Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Использование ioctl() под Linux для L-790 & E-

Вы не вошли.

 Поиск | Регистрация | Вход 

Анатолий
08.11.2011 20:07:37
#1

Гость

Использование ioctl() под Linux для L-790 & E-

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

Пожалуйста отзовитесь кто пользовался <сабж>.
Этот подход вообще работает?

В моем случае после нескольких часов времени работы заканчивается виртуальная память. Приложение самостоятельно память не выделяет (просто сбрасывает содержимое кадра из блока общей памяти в сокет).

Спасибо,
Анатолий

Анатолий
08.11.2011 21:41:01
#2

Гость

Re: Использование ioctl() под Linux для L-790 &amp; E-

Ошибся... PCI карта L780, а не 790...

09.11.2011 10:46:31
#3

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Использование ioctl() под Linux для L-790 &amp; E-

а подробней изложить что происходит?

Анатолий
09.11.2011 14:27:05
#4

Гость

Re: Использование ioctl() под Linux для L-790 &amp; E-

В смысле - с системой?..
Происходит исчерпание виртуальной памяти со всеми вытекающими... Т.е. начинается своппинг, потом OOM Killer убивает кого не попадя, потом система замирает на неприемлемом уровне реагирования. Завершение приложения и выгрузка модулей драйверов положения не исправляет. Куча процессов остаются в ожидании завершения ввода-вывода, который оккупировал своппер. Свободная память на уровне ~5M. Восстановление без ребута очень медленное (ждать надоедает, быстрее ребутнуть).

Система: Debian 2.6.32-5-686

Драйвера(DEBUG) и библиотека собираются без проблем.

09.11.2011 16:19:43
#5

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Использование ioctl() под Linux для L-790 &amp; E-

просто сбрасывает содержимое кадра из блока общей памяти в сокет - вот это подробней опишите, а если не сбрасывает в сокет?

Анатолий
09.11.2011 20:28:45
#6

Гость

Re: Использование ioctl() под Linux для L-790 &amp; E-

ioctl(handle, DIOC_WAIT_COMPLETE, &ioctl_buf);
... error handling ...
send( sock, card_buf, frame_sz, 0 );
... error handling ...

sock - неблокирующий локальный UNIX сокет

Пробовал не вызывать send(). Результат - тот же. Следовательно это не проблема межпроцессного соединения.

Анатолий
10.11.2011 09:30:56
#7

Гость

Re: Использование ioctl() под Linux для L-790 &amp; E-

После некоторых раздумий реализовал метод опроса. Весь остальной антураж не изменился. Проблема исчезла. Больше нет неконтролируемого расхода ВМ.
Система продолжает работать вот уже в два раза дольше, чем при использовании ioctl().
Похоже, что где-то в драйвере/библиотеке жучок живет...

10.11.2011 12:21:36
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Использование ioctl() под Linux для L-790 &amp; E-

буду смотреть ...

Анатолий
10.11.2011 15:22:41
#9

Гость

Re: Использование ioctl() под Linux для L-790 &amp; E-

Спасибо!!