реклама на сайте
подробности

 
 
> Большое число программных прерываний в ОС Linux при приеме информации по интерфейсу CAN на AM3517, Нужно уменьшить число программных прерываний в ОС Linux
Таратухин Сергей
сообщение Sep 18 2013, 09:49
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 18-09-13
Пользователь №: 78 372



На AM3517 при получении информации через интерфейс CAN (скорость передачи данных 1 Мбит/с шина CAN загружена около 80%) в ОС Linux генерируется много программных прерываний (около 45% загрузки процессора). Можно ли уменьшить количество программных прерываний при приеме?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Grommerin
сообщение Nov 3 2014, 12:02
Сообщение #2





Группа: Новичок
Сообщений: 2
Регистрация: 3-11-14
Из: Республика Беларусь, г. Могилев
Пользователь №: 83 502



Здравствуйте. Уже месяц бьюсь над такой-же проблемой.
Контроллер Freescale на плате iMX6 Marsboard.
При скорости 1Mbit и 18% загрузке шины (~2.3к сообщений в секунду) потери пакетов составляют стабильно 2,83-2,87%.
Попробовал изменить can_bittiming_const в драйвере, потери уменьшились до 0,03% но все еще присутствуют.
Код
static struct can_bittiming_const flexcan_bittiming_const = {
    .name = DRV_NAME,
-    .tseg1_min = 4,
+      .tseg1_min = 2,
-    .tseg1_max = 16,
+    .tseg1_max = 8,
    .tseg2_min = 2,
    .tseg2_max = 8,
    .sjw_max = 4,
    .brp_min = 1,
    .brp_max = 256,
    .brp_inc = 1,
};

Попытался изменить настройки ядра, но ничего путного не вышло т.к. я с Linux до этого никогда так плотно не работал. Только параметр Preemption Model существенно изменил результаты. По умолчанию стоит "Preemptible Kernel (Low-Latensy Desktop)" и приходит огромное множество прерываний. При установке значения в "No Forsed Preemption (Server)" количество прерываний резко падает (по ощущениям именно в этот момент начинает нормально работать NAPI), но потери достигают 97%.

Пробовал добавлять в драйвер информационные сообщения что бы увидеть порядок вызова функций. Получилось приблизительно следующее:
CODE

Call flexcan_irq
Call flexcan_poll
Call flexcan_poll_state, quota = 8
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_read_frame
Call flexcan_read_fifo
Call flexcan_irq
Call flexcan_poll
Call flexcan_poll_state, quota = 8
Call flexcan_read_frame
Call flexcan_read_fifo
И так далее...

В общем буфер заполняется и получается Rx_Overflow.

Программа, которая считает пакеты получилась как тут, даже проще: просто инкремент по принятию и раз в 10 секунд выдача в консоль.
CODE

#include "main.h"
#include "types.h"

#define SAVE_TIMER_TIME 10

static void Save_Timer(void);

unsigned int TransMessageCount = 0;

int main(int argc, char **argv)
{
const char* INTERFACE = NAME_CAN;

signal(SIGALRM, (void (*)(int)) Save_Timer);

signed int CanSocket = socket(PF_CAN, SOCK_RAW, CAN_RAW);
if (CanSocket < 0) {
perror("READ: Can't open CAN socket");
}
alarm(SAVE_TIMER_TIME);

ifreq Ifr;
strncpy(Ifr.ifr_name, INTERFACE, sizeof(Ifr.ifr_name));
if (ioctl(CanSocket, SIOCGIFINDEX, &Ifr)) {
perror("READ: Error in IOCTL func");
}

sockaddr_can Addr;
Addr.can_family = PF_CAN;
Addr.can_ifindex = Ifr.ifr_ifindex;
if (bind(CanSocket, (struct sockaddr*)&Addr, sizeof(Addr)) < 0) {
perror("READ: Error in BIND func");
}

static unsigned int TransMessBufLength = 0;
static int ReadBytes;
static can_frame Frame;

while(1) {
ReadBytes = recv(CanSocket, &Frame, sizeof(struct can_frame), 0);
if(ReadBytes > 0) {
TransMessageCount++;
}
}
close(CanSocket);
return 0;
}

static void Save_Timer(void)
{
cout <<"Read "<< TransMessageCount <<" messages\n";
alarm(SAVE_TIMER_TIME);
return;
}

И если даже такая простая программа не успевает, то что же будет с реальным многопоточным приложением...

В общем я застрял на потерях и не знаю в каком направлении мне двигаться дальше. Прошу у вас помощи или совета.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Таратухин Сергей   Большое число программных прерываний в ОС Linux при приеме информации по интерфейсу CAN на AM3517   Sep 18 2013, 09:49
- - kurtis   У вас случайно прерывания не по gpio идут? Если по...   Sep 18 2013, 12:45
- - Tarbal   Цитата(Таратухин Сергей @ Sep 18 2013, 13...   Sep 18 2013, 17:00
|- - _3m   Цитата(Tarbal @ Sep 18 2013, 21:00) Уточн...   Sep 18 2013, 19:24
|- - Таратухин Сергей   Цитата(_3m @ Sep 19 2013, 01:24) Я посмот...   Sep 19 2013, 05:54
|- - _3m   Цитата(Таратухин Сергей @ Sep 19 2013, 09...   Sep 19 2013, 07:16
|- - Tarbal   Цитата(_3m @ Sep 19 2013, 11:16) Пока не ...   Sep 19 2013, 13:19
|- - Таратухин Сергей   Цитата(Tarbal @ Sep 19 2013, 19:19) Ваши ...   Sep 20 2013, 09:13
|- - sasamy   Цитата(Таратухин Сергей @ Sep 20 2013, 13...   Sep 20 2013, 10:42
||- - Таратухин Сергей   Цитата(sasamy @ Sep 20 2013, 16:42) В ста...   Sep 20 2013, 12:23
||- - sasamy   Цитата(Таратухин Сергей @ Sep 20 2013, 16...   Sep 20 2013, 12:55
||- - sasamy   Цитата(sasamy @ Sep 20 2013, 16:55) Посмо...   Sep 20 2013, 14:30
||- - AndrewN   QUOTE (sasamy @ Sep 20 2013, 18:30) Кстат...   Sep 21 2013, 18:38
||- - Таратухин Сергей   Цитата(sasamy @ Sep 20 2013, 20:30) Кстат...   Sep 23 2013, 06:26
||- - Tarbal   Цитата(Таратухин Сергей @ Sep 23 2013, 10...   Sep 23 2013, 12:20
||- - Таратухин Сергей   Цитата(Tarbal @ Sep 23 2013, 18:20) Для ...   Sep 23 2013, 12:45
||- - Tarbal   Цитата(Таратухин Сергей @ Sep 23 2013, 16...   Sep 23 2013, 13:33
|||- - Таратухин Сергей   Цитата(Tarbal @ Sep 23 2013, 19:33) Я не ...   Oct 8 2013, 05:27
|||- - Tarbal   Цитата(Таратухин Сергей @ Oct 8 2013, 09...   Oct 8 2013, 12:21
|||- - Таратухин Сергей   Цитата(Tarbal @ Oct 8 2013, 18:21) Вы пол...   Oct 15 2013, 09:11
|||- - Tarbal   Цитата(Таратухин Сергей @ Oct 15 2013, 13...   Oct 15 2013, 12:12
|||- - Таратухин Сергей   Цитата(Tarbal @ Oct 15 2013, 18:12) laten...   Oct 16 2013, 11:30
||- - sasamy   Цитата(Таратухин Сергей @ Sep 23 2013, 16...   Sep 23 2013, 13:38
||- - AndrewN   QUOTE (sasamy @ Sep 23 2013, 16:38) почем...   Sep 23 2013, 21:51
||- - A. Fig Lee   Цитата(AndrewN @ Sep 23 2013, 17:51) Колл...   Sep 24 2013, 00:34
||- - Tarbal   Цитата(AndrewN @ Sep 24 2013, 01:51) Колл...   Sep 24 2013, 00:54
||- - AndrewN   QUOTE (Tarbal @ Sep 24 2013, 04:54) Цыпля...   Sep 24 2013, 02:56
||- - Tarbal   Цитата(AndrewN @ Sep 24 2013, 06:56) Упс....   Sep 24 2013, 03:12
||- - _3m   Цитата(AndrewN @ Sep 24 2013, 06:56) Инте...   Sep 24 2013, 06:17
||- - AndrewN   QUOTE (_3m @ Sep 24 2013, 10:17) Такты сч...   Sep 24 2013, 21:50
||- - Tarbal   Цитата(AndrewN @ Sep 25 2013, 01:50) Пото...   Sep 25 2013, 01:45
|- - Tarbal   Цитата(Таратухин Сергей @ Sep 20 2013, 13...   Sep 20 2013, 12:30
|- - Таратухин Сергей   Цитата(Tarbal @ Sep 20 2013, 18:30) У люб...   Sep 21 2013, 15:53
|- - Tarbal   Цитата(Таратухин Сергей @ Sep 21 2013, 19...   Sep 21 2013, 16:39
|- - Таратухин Сергей   Цитата(Tarbal @ Sep 21 2013, 22:39) Ну то...   Sep 23 2013, 11:54
|- - Tarbal   Цитата(Таратухин Сергей @ Sep 23 2013, 15...   Sep 23 2013, 12:05
|- - Таратухин Сергей   Цитата(Tarbal @ Sep 23 2013, 18:05) Я поп...   Sep 23 2013, 12:14
- - Tarbal   Положим одна транзакция 100 бит. Значит при 80% за...   Sep 19 2013, 01:13
- - A. Fig Lee   Цитата(Таратухин Сергей @ Sep 18 2013, 05...   Sep 20 2013, 12:11
- - Tarbal   Вы уверены, что вы починили функциональность, а не...   Oct 16 2013, 11:42
|- - Таратухин Сергей   Цитата(Tarbal @ Oct 16 2013, 17:42) Вы ув...   Oct 16 2013, 11:53
|- - Tarbal   Цитата(Таратухин Сергей @ Oct 16 2013, 15...   Oct 16 2013, 12:47
|- - Таратухин Сергей   Цитата(Tarbal @ Oct 16 2013, 18:47) И не ...   Oct 17 2013, 05:25
- - Tarbal   Отгадать не получится. Надо дебагировать.   Oct 18 2013, 01:47
|- - ZASADA   Цитата(Grommerin @ Nov 3 2014, 15:02) Здр...   Nov 4 2014, 10:39
- - Grommerin   Цитата(ZASADA @ Nov 4 2014, 13:39) вы неп...   Nov 11 2014, 08:50
- - _3m   Чтобы не начинать похожую тему напишу сюда. Разыс...   Apr 6 2016, 14:17


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016