From: Stephen Hemminger <stephen@networkplumber.org>
To: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Vincent Prince <vincent.prince.fr@gmail.com>,
jiri@resnulli.us, jhs@mojatatu.com, netdev@vger.kernel.org,
dave.taht@gmail.com, linux-can@vger.kernel.org,
kernel@pengutronix.de, xiyou.wangcong@gmail.com,
davem@davemloft.net
Subject: Re: [PATCH v2] net: sch_generic: Use pfifo_fast as fallback scheduler for CAN hardware
Date: Tue, 22 Oct 2019 09:42:54 -0700 [thread overview]
Message-ID: <20191022094254.489fd6a4@hermes.lan> (raw)
In-Reply-To: <84b8ce24-fe5d-ead0-0d1d-03ea24b36f71@pengutronix.de>
[-- Attachment #1: Type: text/plain, Size: 2821 bytes --]
On Tue, 22 Oct 2019 16:53:44 +0200
Marc Kleine-Budde <mkl@pengutronix.de> wrote:
> On 10/22/19 3:23 PM, Vincent Prince wrote:
> > Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
>
> please include a patch description. I.e. this one:
>
> -------->8-------->8-------->8-------->8-------->8-------->8-------->8--------
> There is networking hardware that isn't based on Ethernet for layers 1 and 2.
>
> For example CAN.
>
> CAN is a multi-master serial bus standard for connecting Electronic Control
> Units [ECUs] also known as nodes. A frame on the CAN bus carries up to 8 bytes
> of payload. Frame corruption is detected by a CRC. However frame loss due to
> corruption is possible, but a quite unusual phenomenon.
>
> While fq_codel works great for TCP/IP, it doesn't for CAN. There are a lot of
> legacy protocols on top of CAN, which are not build with flow control or high
> CAN frame drop rates in mind.
>
> When using fq_codel, as soon as the queue reaches a certain delay based length,
> skbs from the head of the queue are silently dropped. Silently meaning that the
> user space using a send() or similar syscall doesn't get an error. However
> TCP's flow control algorithm will detect dropped packages and adjust the
> bandwidth accordingly.
>
> When using fq_codel and sending raw frames over CAN, which is the common use
> case, the user space thinks the package has been sent without problems, because
> send() returned without an error. pfifo_fast will drop skbs, if the queue
> length exceeds the maximum. But with this scheduler the skbs at the tail are
> dropped, an error (-ENOBUFS) is propagated to user space. So that the user
> space can slow down the package generation.
>
> On distributions, where fq_codel is made default via CONFIG_DEFAULT_NET_SCH
> during compile time, or set default during runtime with sysctl
> net.core.default_qdisc (see [1]), we get a bad user experience. In my test case
> with pfifo_fast, I can transfer thousands of million CAN frames without a frame
> drop. On the other hand with fq_codel there is more then one lost CAN frame per
> thousand frames.
>
> As pointed out fq_codel is not suited for CAN hardware, so this patch changes
> attach_one_default_qdisc() to use pfifo_fast for "ARPHRD_CAN" network devices.
>
> During transition of a netdev from down to up state the default queuing
> discipline is attached by attach_default_qdiscs() with the help of
> attach_one_default_qdisc(). This patch modifies attach_one_default_qdisc() to
> attach the pfifo_fast (pfifo_fast_ops) if the network device type is
> "ARPHRD_CAN".
> -------->8-------->8-------->8-------->8-------->8-------->8-------->8--------
>
> Marc
>
Why not fix fq_codel to return the same errors as other qdisc?
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2019-10-22 16:42 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-27 16:56 [RFC] net: sch_generic: fq_codel vs pfifo_fast Marc Kleine-Budde
2019-03-27 16:56 ` [PATCH 1/2] net: sch_generic: add flag IFF_FIFO_QUEUE to use pfifo_fast as default scheduler Marc Kleine-Budde
2019-03-27 17:14 ` Cong Wang
2019-03-27 20:11 ` Marc Kleine-Budde
2019-03-27 20:53 ` Cong Wang
2019-04-02 17:22 ` Toke Høiland-Jørgensen
2019-03-27 18:53 ` Uwe Kleine-König
2019-03-27 19:27 ` Marc Kleine-Budde
2019-03-27 16:56 ` [PATCH 2/2] can: dev: let all CAN devices " Marc Kleine-Budde
2019-03-27 18:30 ` [RFC] net: sch_generic: fq_codel vs pfifo_fast Stephen Hemminger
2019-03-27 19:24 ` Marc Kleine-Budde
2019-10-22 12:47 ` [PATCH] net: sch_generic: Use pfifo_fast as fallback scheduler for CAN hardware Vincent Prince
2019-10-22 12:58 ` Marc Kleine-Budde
2019-10-22 13:23 ` [PATCH v2] " Vincent Prince
2019-10-22 14:53 ` Marc Kleine-Budde
2019-10-22 14:55 ` Marc Kleine-Budde
2019-10-22 16:42 ` Stephen Hemminger [this message]
2019-10-22 16:48 ` Marc Kleine-Budde
2019-10-22 17:28 ` Eric Dumazet
2019-10-22 18:21 ` Oliver Hartkopp
2019-10-22 15:09 ` [PATCH v3] " Vincent Prince
2019-10-23 10:52 ` [PATCH v4] " Vincent Prince
2019-10-23 11:13 ` Dave Taht
2019-10-23 13:44 ` [PATCH v5] " Vincent Prince
2019-10-26 2:20 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191022094254.489fd6a4@hermes.lan \
--to=stephen@networkplumber.org \
--cc=dave.taht@gmail.com \
--cc=davem@davemloft.net \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=kernel@pengutronix.de \
--cc=linux-can@vger.kernel.org \
--cc=mkl@pengutronix.de \
--cc=netdev@vger.kernel.org \
--cc=vincent.prince.fr@gmail.com \
--cc=xiyou.wangcong@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.