LINUX.ORG.RU
решено ФорумAdmin

PPP - странное поведение на высоких скоростях

 , , ,


0

2

Приветствую. Пытаюсь поднять высокоскоростной PPP канал между двумя устройствами. Ноутбук на Debian 8 и Raspberry Pi 2 на Raspbian 8.

На физическом уровне используется UART, организованный с помощью двух USB/COM-переходников, подключённых к устройствам. Между переходниками, соответственно, проброшены два провода - RX и TX. Переходники поддерживает частоты уарт вплоть до 3 МГц, что позволяло гонять по проложенному через них PPP-соединению больше 2 Мбит/с.

Теперь проблема: В процессе многочисленных переделок, в какой-то момент времени, канал перестал работать как следует, и скорость передачи данных заметно просела. На осциллографе отчетливо стали видны периодические пустоты между передаваемыми пакетами, и чем выше частота уарта - тем эти пустоты становятся шире, тем самым поддерживая пропускную способность канала на уровне 600-800 Кбит/с. При частоте ниже 1 МГц, пустоты почти исчезают. Хотелось бы выяснить причину появления этих пустот.

Ниже примеры c осциллограммами.

Текущий конфиг PPP на обоих узлах:

noccp
dump
debug
noauth
nocrtscts
xonxoff
lcp-echo-failure 0
lcp-echo-interval 0
passive
local
maxfail 0
persist
192.168.36.2:192.168.36.1 #this is opposite to below



Последнее исправление: Alexey41089 (всего исправлений: 1)

про паузы - я бы посмотрел статистику ошибок на интерфейса ppp. Если тестируется при помощи протокола tcp, то потери будут давать ощутимое снижение скорости.

И еще - на сколько симметрична скорость ?

А этот Raspberry Pi 2 не на 100% при этом загружен? Может просто не хватает производительности?

Что мешает использовать usb-ethernet? С точки зрения накладных расходов оно выгодно отличается от usb-rs232

vel ★★★★★
()
Ответ на: комментарий от vel

Да, тестировалось по tcp, ошибки не смотрел. Основные данные гонятся по udp, и там проседание в скорости аналогичное.

Производительности должно хватать с головой, но это надо будет проверить.

Что мешает использовать usb-ethernet?

Проблема в том, что нужен именно rs232.

Alexey41089
() автор топика
Ответ на: комментарий от vel

Тестировал путем бросания файлов через scp. Вначале передач скорость была повыше, потом в течение нескольких десятков секунд равномерно падала до указанных значений, по крайней мере по показаниям scp.

Alexey41089
() автор топика
Ответ на: комментарий от vel

По поводу симметрии, кстати, интересно. В заглавном посте указана скорость передачи данных от платы к ноутбуку.

Канал от ноута в сторону платы при тестировании оказался примерно в два раза толще, на частотах 3 и 2 МГц. На 1 МГц они примерно одинаковы.

Alexey41089
() автор топика
Ответ на: комментарий от Alexey41089

scp - это требование или что было под рукой ? scp очень специфический и достаточно тормозной протокол, да и cpu он должен жрать. А у тебя с одной стороны что-то не шибки шустрое. Ассиметрия скорости может быть изз-за нехватки производительности с одной стороны.

возьми iperf3 - он умеет в обе стороны скорость мерить и процессор не грузит.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от Alexey41089

Вообще, плохая идея.

Я недавно пробовал использовать нульмодемный кабель + PPP между двумя серверами для организации heartbeat-линка для Pacemaker/Corosync. Даже на больших битрейтах оно работало так себе, а точнее никак.

С видео, уверен, будет ещё хуже.

blind_oracle ★★★★★
()
Ответ на: комментарий от Alexey41089

а есть возможность сделать 5 проводов и перейти с xonxoff на ctsrts, который обычно поддерживается аппаратно.

Еще debug отключи.

vel ★★★★★
()
Ответ на: комментарий от blind_oracle

В том то и дело, что работало все прекрасно. Гонялось 1920x1080@60 в реальном времени без каких-либо проблем.

Но потом что-то наворотили и скорость упала.

Alexey41089
() автор топика
Ответ на: комментарий от vel

Нет, задача специфическая, нужно использовать только два провода — RX и TX.

Вообще говоря, желательно даже только один провод — TX в сторону ноута, на потери по барабану.

Alexey41089
() автор топика
Ответ на: комментарий от Alexey41089

А ты не пробовал сравнивать скорости при включеном и выключеном ctsrts? Теоретически, после отключения ctsrts должно возрости число ошибок и упасть скорость. А если разницы не будет, то значит что-то не так в консерватории.

А minicom-ом с помощью z-modem-а не пробовал файлы передавать?

PS кроме ppp есть еще slip, он вообще простой и тупой. Правда последний раз я им польззовался в 98 году и как с ним сейчас дело обстоит - не знаю.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

Похоже определился виновник — проблема явно на стороне платы.

Поставить дополнительный софт возможности пока не было, поэтому всё с помощью подручных средств. Тупо cat-ом выводился поток на виртуальный порт переходника /dev/ttyUSB0 и на осциллографе обнаружилось, что паузы возникают только на выходе переходника, подключенного к плате, с ноутбучного все нормально улетает.

Так что PPP здесь не при чем, похоже.

Alexey41089
() автор топика

Проблема была в USB-драйверах RPi.

Ответ [1] от разработчика:

At high baud rates, you may hit the USB NAK packet throttle threshold on outbound data - we have a crude mechanism implemented to stop FTDI devices from causing interrupt storms that lock the CPU out for extended periods of time. You can probably live with the increased interrupt rate on a Pi2 that comes from reducing the throttle interval.

После отключения NAK holdoff (путем добавления dwc_otg.nak_holdoff=1 в /boot/cmdline.txt на плате) всё заработало как надо, на 3 Mбит/c. Остается правда вопрос, как оно работало раньше.

[1]: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=126010

Alexey41089
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.