The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Тормоза при чтении из порта IO в драйвере"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Тормоза при чтении из порта IO в драйвере"  
Сообщение от alexB email(ok) on 19-Янв-07, 00:14 
Доброго, всем, времени суток!
Написал модуль ядра(2.6.8 Debian Sarge) работающий с ISA карточкой, предназначенной для обработки сигналов. В модуле, из порта платы читается массив данных размером 0,5 Мб за время ~ 600 мс.
---------------
for(i=0; i < dataSize; i++)
{
  t = inw(DATA_PORT);
  put_user(t, buffAddr++);

}
---------------
С драйвером взаимодействует KDE'шное приложение (осциллограф-спектроанализатор и т.д.) которое посредством ioctl(...) собственно и вызывает команду чтения. При выполнении вышеприведенного цикла наблюдается дикие тормоза системы, что очень нехорошо смотрится при циклическом вызове команды. Загрузка процессора почти max. Выделение вызова ioctl(...) в отдельный поток в приложении естественно не помогает.
Вопрос: каким образом избавиться от высокой загрузки процессора в модуле, не сильно выходя за пределы тех же 600 мс? Может быть как-то изменить алгоритм чтения из порта?
Заранее благодарен за конструктивные приложения...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Тормоза при чтении из порта IO в драйвере"  
Сообщение от int_0dh on 19-Янв-07, 08:19 
>Доброго, всем, времени суток!
>Написал модуль ядра(2.6.8 Debian Sarge) работающий с ISA карточкой, предназначенной для обработки
>сигналов. В модуле, из порта платы читается массив данных размером 0,5
>Мб за время ~ 600 мс.
>---------------
>for(i=0; i < dataSize; i++)
>{
>  t = inw(DATA_PORT);
>  put_user(t, buffAddr++);
>
>}
>---------------
> С драйвером взаимодействует KDE'шное приложение (осциллограф-спектроанализатор и т.д.) которое посредством ioctl(...)
>собственно и вызывает команду чтения. При выполнении вышеприведенного цикла наблюдается дикие
>тормоза системы, что очень нехорошо смотрится при циклическом вызове команды. Загрузка
>процессора почти max. Выделение вызова ioctl(...) в отдельный поток в приложении
>естественно не помогает.

железко DMA не умеет?
>Вопрос: каким образом избавиться от высокой загрузки процессора в модуле, не сильно
>выходя за пределы тех же 600 мс? Может быть как-то изменить
>алгоритм чтения из порта?
>Заранее благодарен за конструктивные приложения...


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Тормоза при чтении из порта IO в драйвере"  
Сообщение от BigHo on 19-Янв-07, 12:35 
переключение из режима ядра в режим процесса и обратно - очень дорогостоящая операция. Передача в userspace по одному байту хотя и не является таковым, но имеет много общего.

Что можно предложить из конструктива:
- гораздо лучше было бы воспользоваться функцией copy_to_user, чем put_user;
- прежде, чем выдавать пользователю данные, их сперва лучше накопить. В этом смысле insw больше подходит, чем inw;

смотри также про inw_p(9):
    http://cdrom.gnutemberg.org/manuali/ldd/LinuxDeviceDrivers.pdf
    страница 232 секция Pausing I/O

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Тормоза при чтении из порта IO в драйвере"  
Сообщение от alexB email(ok) on 19-Янв-07, 22:36 
Спасибо. Попробую в понедельник (железка на работе). Кстати, воткнул в цикл schdule_timeout(1) - мыша в X'ах перестала замирать.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Тормоза при чтении из порта IO в драйвере"  
Сообщение от alexB email(ok) on 19-Янв-07, 22:28 
>железко DMA не умеет?


Нет. DMA к сожалению не умеет.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру