Re: [PATCH net 2/4] net/udpgso_bench_tx: options to exercise TX CMSG

From: Willem de Bruijn
Date: Thu May 23 2019 - 17:56:28 EST


On Thu, May 23, 2019 at 5:11 PM Fred Klassen <fklassen@xxxxxxxxxxx> 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@xxxxxxxxxxx>

> +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.