Discussion:
PPP system with unwanted packet dropping at traffic overload
(too old to reply)
Arne Lie
2008-09-09 19:44:49 UTC
Permalink
Hi,

We are implementing a system (basically a modem operating as a router) with
embedded Linux (currently v2.6.25.16) where tailor made communication
between the embedded platforms happens over PPP (in addition to Ethernet
interfaces also available). Due to specialized hardware, we have developed
our own PPP driver. This is not a *network* driver, but instead a *char*
driver. I.e. we let our PPP talk with a serial tty interface (emulating an
UART interface). This interface is now working.

However, in periods of traffic overload, packet drops happens *inside* the
PPP system, and not in the Linux forwarding TCP/IP queue system. This is not
good because we now want to use advanced queuing systems supporting DiffServ
(using tc). The driver has a queue length internally of 5 packets, and
returns EAGAIN when queue is full (the driver operates in non-blocking
mode). It looks like the PPP layer above do not try to resubmit the packet,
but turns to dropping instead. Because of this, the ppp0 interface looks
like a high-rate interface, and the Linux queuing system never backlogs as
it should.

We are unsure if any netif_stop_queue/netif_wake_queue functionality is used
by the PPP upper layers. We would be happy to receive any suggestions.

Best regards,

Arne Lie
SINTEF ICT, Dept. of Communication Systems
e-mail: ***@sintef.no

PS:

The PPP is started with:
pppd /dev/pppfifo0
(pppfifo is the name of the device tty driver) and the options file includes
noctsrts
lock
passive

In our pppfifo driver we have implemented:
.throttle = pppfifo_throttle, (but it does not stop new data coming...)
.unthrottle = pppfifo_unthrottle,
.stop = pppfifo_stop,
.start = pppfifo_start
and in addition:
.tiocmget = pppfifo_tiocmget,
.tiocmset = pppfifo_tiocmset,
We observe some ioctrl messages, but have not decoded them yet. Perhaps we
need a detailed look at these?
Patrick Klos
2008-09-11 14:35:34 UTC
Permalink
Post by Arne Lie
However, in periods of traffic overload, packet drops happens *inside* the
PPP system, and not in the Linux forwarding TCP/IP queue system. This is not
good because we now want to use advanced queuing systems supporting DiffServ
(using tc). The driver has a queue length internally of 5 packets, and
returns EAGAIN when queue is full (the driver operates in non-blocking
mode).
Why is your queue limited to 5 packets? Why don't you just create a linked-
list queue??
Post by Arne Lie
It looks like the PPP layer above do not try to resubmit the packet,
but turns to dropping instead. Because of this, the ppp0 interface looks
like a high-rate interface, and the Linux queuing system never backlogs as
it should.
I don't know any specifics about the Linux PPP you're using, but if you know
the problem is due to your 5 packet queue, why wouldn't you just boost the
queue size?

Patrick
=========== For PPP Protocol Analysis, check out PacketView Pro! ===========
Patrick Klos Email: ***@klos.com
Klos Technologies, Inc. Web: http://www.klos.com/
============================================================================
Arne Lie
2008-09-15 10:31:59 UTC
Permalink
Post by Patrick Klos
Post by Arne Lie
However, in periods of traffic overload, packet drops happens *inside* the
PPP system, and not in the Linux forwarding TCP/IP queue system. This is not
good because we now want to use advanced queuing systems supporting DiffServ
(using tc). The driver has a queue length internally of 5 packets, and
returns EAGAIN when queue is full (the driver operates in non-blocking
mode).
Why is your queue limited to 5 packets? Why don't you just create a linked-
list queue??
The queue of 5 packets is more than enough: we also have to consider
latency, this is a slow link.
Post by Patrick Klos
Post by Arne Lie
It looks like the PPP layer above do not try to resubmit the packet,
but turns to dropping instead. Because of this, the ppp0 interface looks
like a high-rate interface, and the Linux queuing system never backlogs as
it should.
I don't know any specifics about the Linux PPP you're using, but if you know
the problem is due to your 5 packet queue, why wouldn't you just boost the
queue size?
In traffic overload any queue size would eventually be too small. See our
next post about ppp XMIT_WAKEUP. Thanks for replying, though!!!

/Arne
Post by Patrick Klos
Patrick
=========== For PPP Protocol Analysis, check out PacketView Pro! ===========
Klos Technologies, Inc. Web: http://www.klos.com/
============================================================================
Loading...