[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAF=yD-JBf6k7VLa6FQowuD5xDFbq5cB4ScTi7kb1hieQFDKnbg@mail.gmail.com>
Date: Thu, 23 May 2019 17:52:53 -0400
From: Willem de Bruijn <willemdebruijn.kernel@...il.com>
To: Fred Klassen <fklassen@...neta.com>
Cc: "David S. Miller" <davem@...emloft.net>,
Alexey Kuznetsov <kuznet@....inr.ac.ru>,
Hideaki YOSHIFUJI <yoshfuji@...ux-ipv6.org>,
Shuah Khan <shuah@...nel.org>,
Network Development <netdev@...r.kernel.org>,
LKML <linux-kernel@...r.kernel.org>,
linux-kselftest@...r.kernel.org,
Willem de Bruijn <willemb@...gle.com>
Subject: Re: [PATCH net 2/4] net/udpgso_bench_tx: options to exercise TX CMSG
On Thu, May 23, 2019 at 5:11 PM Fred Klassen <fklassen@...neta.com> wrote:
>
> This enhancement adds options that facilitate load testing with
> additional TX CMSG options, and to optionally print results of
> various send CMSG operations.
>
> These options are especially useful in isolating situations
> where error-queue messages are lost when combined with other
> CMSG operations (e.g. SO_ZEROCOPY).
>
> New options:
>
> -T - add TX CMSG that requests TX software timestamps
> -H - similar to -T except request TX hardware timestamps
> -q - add IP_TOS/IPV6_TCLASS TX CMSG
To ensure that we do not regress, when adding options, please consider
(just a general suggestion, not a strong request for this patch set)
updating the kselftest to run a variant of the test with the new code
coverage. In this case, make the code pass/fail instead of only user
interpretable and add variants to udpgso.sh.
> -P - call poll() before reading error queue
> -v - print detailed results
>
> Fixes: 3a687bef148d ("selftests: udp gso benchmark")
> Signed-off-by: Fred Klassen <fklassen@...neta.com>
> +static void flush_errqueue_recv(int fd)
> {
> struct msghdr msg = {0}; /* flush */
> + struct cmsghdr *cmsg;
> + struct iovec entry;
> + char control[1024];
can use more precise CMSG_SPACE based on worst case expectations, like
in udp_sendmmsg
> + char buf[1500];
no need for payload
> +static void flush_errqueue(int fd)
> +{
> + if (cfg_poll) {
> + struct pollfd fds = { 0 };
> + int ret;
> +
> + fds.fd = fd;
> + fds.events = POLLERR;
no need to pass POLLERR, it is always returned in revents.
Powered by blists - more mailing lists