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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Не работает драйвер сетевого устройства
k000858
сообщение May 24 2018, 05:47
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



В моем случае вместо netif_rx выполняется netif_receive_skb (т.к. используется метод NAPI), функция возвращает в части случаев NET_RX_SUCCESS, в части случаев NET_RX_DROP, что говорит о том, что половина пакетов дропается.

При этом счетчик принятых пакетов в свойствах соединения растет. Так же растет и счетчик отправленных пакетов, однако входящих пакетов на ПК от устройства нет (соединение с ПК прямое).
Так же похоже после определенного количества принятых пакетов устройство перестает их принимать, во всяком случае счетчик принятых пакетов перестает расти. Такое ощущение что в систему пакеты поступают из драйвера, но не разгребаются там, занимаются всю доступную память, после чего устройство перестает отправлять пакеты в систему. может такое быть? какие могут быть причины?
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение May 24 2018, 07:34
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(k000858 @ May 24 2018, 06:47) *
В моем случае вместо netif_rx выполняется netif_receive_skb (т.к. используется метод NAPI), функция возвращает в части случаев NET_RX_SUCCESS, в части случаев NET_RX_DROP, что говорит о том, что половина пакетов дропается.

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


сбрасывать пакеты сетевое устройство может по причине отсутствия свободных дескрипторов.
попробуйте изменить кол-во дескрипторов, например
#define DEF_RXDESC_NUM (100 вместо 4 если память позволяет..)
если все пакеты теряются на нижнем уровне то это должно помочь.

Сообщение отредактировал winniethepooh - May 24 2018, 07:37
Go to the top of the page
 
+Quote Post
k000858
сообщение May 24 2018, 08:04
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(winniethepooh @ May 24 2018, 11:34) *
сбрасывать пакеты сетевое устройство может по причине отсутствия свободных дескрипторов.
попробуйте изменить кол-во дескрипторов, например
#define DEF_RXDESC_NUM (100 вместо 4 если память позволяет..)
если все пакеты теряются на нижнем уровне то это должно помочь.

попробую увеличить. правда вряд ли это поможет, большая часть пакетов все же удачно принимается, однако счетчик Rx0 = 0.

При том само устройство тоже отправляет пакеты (запрос DHCP), и этот запрос я вижу в программе DHCP сервер (мак точно устройства), но счетчик полученных пакетов на ПК 0. Как так??? ПО верхнего уровня пакет получает (DHCP запрос) а в свойствах сетевого соединения количество полученных пакетов не растет...

добавлено:

поправка - счетчик Rx на устройство растет в cat /proc/net/dev но не растет в ifconfig
Rx на ПК от устройства так же работает, вижу пакеты и в сниффере, но счетчик пакетов в винде не растет.

то есть у этих 2х эффектов одна причина.

пакеты - DHCP: запросы от устройства к ПК, затем ответ от ПК устройству и последующий повторный запрос (так по кругу) потому что ответ от ПК попал в систему устройства (netif_receive_skb NET_RX_SUCCESS) но система этот пакет не переварила.
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение May 24 2018, 08:44
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(k000858 @ May 24 2018, 09:04) *
поправка - счетчик Rx на устройство растет в cat /proc/net/dev но не растет в ifconfig
Rx на ПК от устройства так же работает, вижу пакеты и в сниффере, но счетчик пакетов в винде не растет.

то есть у этих 2х эффектов одна причина.

пакеты - DHCP: запросы от устройства к ПК, затем ответ от ПК устройству и последующий повторный запрос (так по кругу) потому что ответ от ПК попал в систему устройства (netif_receive_skb NET_RX_SUCCESS) но система этот пакет не переварила.


да это интересно, что то в пакетах делает их невидимыми для ОС?
может можно сравнить с пакетами от другой системы..
Go to the top of the page
 
+Quote Post
k000858
сообщение May 28 2018, 05:14
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



распарсив sk_buff полученного пакета и сравнив его с аналогичным в родном драйвере openWRT, выяснил следующее:
- интегрируемый драйвер отправляет в ядро sk_buff без mac и ip заголовках, то есть skb->data начинается с UDP заголовка (при получении ответа DHCP). В родном драйвере skb->data начинается с протокола (0x0800 IP) и ip заголовка. Осталось научить драйвер дорисовывать ip заголовок с протоколом
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение May 28 2018, 07:19
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(k000858 @ May 28 2018, 06:14) *
распарсив sk_buff полученного пакета и сравнив его с аналогичным в родном драйвере openWRT, выяснил следующее:
- интегрируемый драйвер отправляет в ядро sk_buff без mac и ip заголовках, то есть skb->data начинается с UDP заголовка (при получении ответа DHCP). В родном драйвере skb->data начинается с протокола (0x0800 IP) и ip заголовка. Осталось научить драйвер дорисовывать ip заголовок с протоколом

вставлять заголовки может как ядра так и сетевое устройство..
Go to the top of the page
 
+Quote Post
k000858
сообщение May 28 2018, 09:41
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Больше волнует вопрос: при получении пакета, должен ли содержаться заголовок IP протокола в sk_buff->data при передаче его в ядро из драйвера?
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение May 28 2018, 11:19
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(k000858 @ May 28 2018, 10:41) *
Больше волнует вопрос: при получении пакета, должен ли содержаться заголовок IP протокола в sk_buff->data при передаче его в ядро из драйвера?

если я не ошибаюсь, сетевое устройство может убрать ip заголовок из пакета(зависит от настоек NIC).
Go to the top of the page
 
+Quote Post
k000858
сообщение May 31 2018, 04:43
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



По делу есть кое какие продвижения: счетчик Rx уже щёлкает. Проблема была в отсутствии vlan тэгирования трафика. Теперь каждый полученный пакет тэгируется, за счет этого попадает в интерфейс. правда пока не тот. судя по всему пакеты, полученные по wlan'у, попадают в eth0.1 вместо eth0.2.
Go to the top of the page
 
+Quote Post
k000858
сообщение Jun 7 2018, 08:09
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



В общем победил настройки встроенного в SoC свитча и 802.1Q vlan тэггирование: wan работает, lan'ы работают, даже мост более менее работает. но с лагами - похоже на потери.

По видимому причина в netif_receive_skb = -1

В каких случаях может такое происходить? Какому флагу соответствует -1 (1 = NET_RX_DROP).
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Jun 7 2018, 08:50
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(k000858 @ Jun 7 2018, 09:09) *
В общем победил настройки встроенного в SoC свитча и 802.1Q vlan тэггирование: wan работает, lan'ы работают, даже мост более менее работает. но с лагами - похоже на потери.

По видимому причина в netif_receive_skb = -1

В каких случаях может такое происходить? Какому флагу соответствует -1 (1 = NET_RX_DROP).


посмотрите https://people.cs.clemson.edu/~westall/853/notes/
Go to the top of the page
 
+Quote Post
k000858
сообщение Jun 14 2018, 03:51
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



В общем драйвер успешно интегрирован, Lan'ы работают, Wan работает, трафик по мосту бежит.
Однако вылезла новая проблема: при тесте пропускной способности портов (трафик Wan -> Lan для использования NAT'а) драйвер нагружает систему до 99%, при этом скорость всего ~300Mbt/s (порты гигабитные). При этом родной драйвер openWRT выжимает гигабит, нагрузка на проц ~80% (хардварный нат не активирован). С чем может быть связан такой эффект?
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Jun 14 2018, 10:51
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(k000858 @ Jun 14 2018, 04:51) *
В общем драйвер успешно интегрирован, Lan'ы работают, Wan работает, трафик по мосту бежит.
Однако вылезла новая проблема: при тесте пропускной способности портов (трафик Wan -> Lan для использования NAT'а) драйвер нагружает систему до 99%, при этом скорость всего ~300Mbt/s (порты гигабитные). При этом родной драйвер openWRT выжимает гигабит, нагрузка на проц ~80% (хардварный нат не активирован). С чем может быть связан такой эффект?


почему вы думаете драйвер нагружает а не сокет например?
Go to the top of the page
 
+Quote Post
k000858
сообщение Jun 14 2018, 11:17
Сообщение #29


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(winniethepooh @ Jun 14 2018, 14:51) *
почему вы думаете драйвер нагружает а не сокет например?


Цитата(k000858 @ Jun 14 2018, 07:51) *
При этом родной драйвер openWRT выжимает гигабит, нагрузка на проц ~80% (хардварный нат не активирован)


тест проводится 1 в 1 с родным драйвером openwrt и мной интегрированным
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Jun 14 2018, 13:26
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(k000858 @ Jun 14 2018, 12:17) *
тест проводится 1 в 1 с родным драйвером openwrt и мной интегрированным


ничего не знаю про тест openwrt, но сомневаюсь что он может показать в каком слое стека застревают пакеты.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th April 2024 - 19:57
Рейтинг@Mail.ru


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