mbox series

[net-next,0/4] selftests/net: packetdrill: import multiple tests

Message ID 20241217185203.297935-1-sohamch.kernel@gmail.com (mailing list archive)
Headers show
Series selftests/net: packetdrill: import multiple tests | expand

Message

Soham Chakradeo Dec. 17, 2024, 6:51 p.m. UTC
From: Soham Chakradeo <sohamch@google.com>

Import tests for the following features (folder names in brackets):
ECN (ecn) : RFC 3168
Close (close) : RFC 9293
TCP_INFO (tcp_info) : RFC 9293
Fast recovery (fast_recovery) : RFC 5681
Timestamping (timestamping) : RFC 1323
Nagle (nagle) : RFC 896
Selective Acknowledgments (sack) : RFC 2018
Recent Timestamp (ts_recent) : RFC 1323
Send file (sendfile)
Syscall bad arg (syscall_bad_arg)
Validate (validate)
Blocking (blocking)
Splice (splice)
End of record (eor)
Limited transmit (limited_transmit)

Procedure to import and test the packetdrill tests into upstream linux
is explained in the first patch of this series

These tests have many authors. We only import them here from
github.com/google/packetdrill. Thanks to the following authors fo their
contributions over the years to these tests: Neal Cardwell, Shuo Chen,
Yuchung Cheng, Jerry Chu, Eric Dumazet, Luke Hsiao, Priyaranjan Jha,
Chonggang Li, Tanner Love, John Sperbeck, Wei Wang and Maciej
Żenczykowski. For more info see the original github commits, such as
https://github.com/google/packetdrill/commit/8229c94928ac.

Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Soham Chakradeo <sohamch@google.com>

Soham Chakradeo (4):
  selftests/net: packetdrill: import tcp/ecn , tcp/close , tcp/sack ,
    tcp/tcp_info
  selftests/net: packetdrill: import tcp/fast_recovery , tcp/nagle ,
    tcp/timestamping
  selftests/net: packetdrill: import tcp/eor , tcp/splice ,
    tcp/ts_recent , tcp/blocking
  selftests/net: packetdrill: import tcp/user_timeout , tcp/validate ,
    tcp/sendfile , tcp/limited-transmit , tcp/syscall_bad_arg

 .../tcp_blocking_blocking-accept.pkt          |  18 +++
 .../tcp_blocking_blocking-connect.pkt         |  13 ++
 .../tcp_blocking_blocking-read.pkt            |  29 ++++
 .../tcp_blocking_blocking-write.pkt           |  35 +++++
 ...lose_close-local-close-then-remote-fin.pkt |  23 +++
 .../tcp_close_close-on-syn-sent.pkt           |  21 +++
 .../tcp_close_close-remote-fin-then-close.pkt |  36 +++++
 .../net/packetdrill/tcp_ecn_ecn-uses-ect0.pkt |  21 +++
 .../packetdrill/tcp_eor_no-coalesce-large.pkt |  38 +++++
 .../tcp_eor_no-coalesce-retrans.pkt           |  72 +++++++++
 .../packetdrill/tcp_eor_no-coalesce-small.pkt |  36 +++++
 .../tcp_eor_no-coalesce-subsequent.pkt        |  66 ++++++++
 .../tcp_fast_recovery_prr-ss-10pkt-lost-1.pkt |  72 +++++++++
 ...t_recovery_prr-ss-30pkt-lost-1_4-11_16.pkt |  50 ++++++
 ...tcp_fast_recovery_prr-ss-30pkt-lost1_4.pkt |  43 ++++++
 ...ecovery_prr-ss-ack-below-snd_una-cubic.pkt |  41 +++++
 ...ited_transmit_limited-transmit-no-sack.pkt |  53 +++++++
 ...limited_transmit_limited-transmit-sack.pkt |  50 ++++++
 .../packetdrill/tcp_nagle_https_client.pkt    |  40 +++++
 .../tcp_nagle_sendmsg_msg_more.pkt            |  66 ++++++++
 .../tcp_nagle_sockopt_cork_nodelay.pkt        |  43 ++++++
 .../tcp_sack_sack-route-refresh-ip-tos.pkt    |  37 +++++
 ...ack_sack-shift-sacked-2-6-8-3-9-nofack.pkt |  64 ++++++++
 ..._sack_sack-shift-sacked-7-3-4-8-9-fack.pkt |  66 ++++++++
 ..._sack_sack-shift-sacked-7-5-6-8-9-fack.pkt |  62 ++++++++
 .../tcp_sendfile_sendfile-simple.pkt          |  26 ++++
 .../tcp_splice_tcp_splice_loop_test.pkt       |  20 +++
 ...scall_bad_arg_fastopen-invalid-buf-ptr.pkt |  42 +++++
 .../tcp_syscall_bad_arg_sendmsg-empty-iov.pkt |  31 ++++
 ...yscall_bad_arg_syscall-invalid-buf-ptr.pkt |  25 +++
 .../tcp_tcp_info_tcp-info-last_data_recv.pkt  |  21 +++
 .../tcp_tcp_info_tcp-info-rwnd-limited.pkt    |  54 +++++++
 .../tcp_tcp_info_tcp-info-sndbuf-limited.pkt  |  39 +++++
 ...tcp_timestamping_client-only-last-byte.pkt |  92 +++++++++++
 .../packetdrill/tcp_timestamping_partial.pkt  |  91 +++++++++++
 .../packetdrill/tcp_timestamping_server.pkt   | 145 ++++++++++++++++++
 .../packetdrill/tcp_ts_recent_fin_tsval.pkt   |  23 +++
 .../packetdrill/tcp_ts_recent_invalid_ack.pkt |  25 +++
 .../packetdrill/tcp_ts_recent_reset_tsval.pkt |  25 +++
 .../tcp_user_timeout_user-timeout-probe.pkt   |  37 +++++
 .../tcp_user_timeout_user_timeout.pkt         |  33 ++++
 ...validate_validate-established-no-flags.pkt |  24 +++
 42 files changed, 1848 insertions(+)
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_blocking_blocking-accept.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_blocking_blocking-connect.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_blocking_blocking-read.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_blocking_blocking-write.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_close_close-local-close-then-remote-fin.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_close_close-on-syn-sent.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_close_close-remote-fin-then-close.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_ecn_ecn-uses-ect0.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_eor_no-coalesce-large.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_eor_no-coalesce-retrans.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_eor_no-coalesce-small.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_eor_no-coalesce-subsequent.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_fast_recovery_prr-ss-10pkt-lost-1.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_fast_recovery_prr-ss-30pkt-lost-1_4-11_16.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_fast_recovery_prr-ss-30pkt-lost1_4.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_fast_recovery_prr-ss-ack-below-snd_una-cubic.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_limited_transmit_limited-transmit-no-sack.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_limited_transmit_limited-transmit-sack.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_nagle_https_client.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_nagle_sendmsg_msg_more.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_nagle_sockopt_cork_nodelay.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_sack_sack-route-refresh-ip-tos.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_sack_sack-shift-sacked-2-6-8-3-9-nofack.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_sack_sack-shift-sacked-7-3-4-8-9-fack.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_sack_sack-shift-sacked-7-5-6-8-9-fack.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_sendfile_sendfile-simple.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_splice_tcp_splice_loop_test.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_syscall_bad_arg_fastopen-invalid-buf-ptr.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_syscall_bad_arg_sendmsg-empty-iov.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_syscall_bad_arg_syscall-invalid-buf-ptr.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_tcp_info_tcp-info-last_data_recv.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_tcp_info_tcp-info-rwnd-limited.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_tcp_info_tcp-info-sndbuf-limited.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_timestamping_client-only-last-byte.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_timestamping_partial.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_timestamping_server.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_ts_recent_fin_tsval.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_ts_recent_invalid_ack.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_ts_recent_reset_tsval.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_user_timeout_user-timeout-probe.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_user_timeout_user_timeout.pkt
 create mode 100644 tools/testing/selftests/net/packetdrill/tcp_validate_validate-established-no-flags.pkt

Comments

Jakub Kicinski Dec. 18, 2024, 6 p.m. UTC | #1
On Tue, 17 Dec 2024 18:51:57 +0000 Soham Chakradeo wrote:
> Import tests for the following features (folder names in brackets):
> ECN (ecn) : RFC 3168
> Close (close) : RFC 9293
> TCP_INFO (tcp_info) : RFC 9293
> Fast recovery (fast_recovery) : RFC 5681
> Timestamping (timestamping) : RFC 1323
> Nagle (nagle) : RFC 896
> Selective Acknowledgments (sack) : RFC 2018
> Recent Timestamp (ts_recent) : RFC 1323
> Send file (sendfile)
> Syscall bad arg (syscall_bad_arg)
> Validate (validate)
> Blocking (blocking)
> Splice (splice)
> End of record (eor)
> Limited transmit (limited_transmit)

Excellent, thanks for adding all these! I will merge the patches
momentarily but I do see a number of flakes on our VMs with debug
configs enabled:
https://netdev.bots.linux.dev/flakes.html?min-flip=0&tn-needle=packetdrill-dbg

In the 7 runs so far we got 2 flakes on:

 tcp-timestamping-client-only-last-byte-pkt
 tcp-fast-recovery-prr-ss-ack-below-snd-una-cubic-pkt
 tcp-timestamping-server-pkt

1 flake on:

 tcp-timestamping-partial-pkt
 tcp-eor-no-coalesce-retrans-pkt

LMK if you can't find the outputs, they should be there within a couple
of clicks.

I'll set these cases to be ignored for now, but would be great if we
could find the way for them to be less time sensitive, perhaps?
patchwork-bot+netdevbpf@kernel.org Dec. 18, 2024, 6:10 p.m. UTC | #2
Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Tue, 17 Dec 2024 18:51:57 +0000 you wrote:
> From: Soham Chakradeo <sohamch@google.com>
> 
> Import tests for the following features (folder names in brackets):
> ECN (ecn) : RFC 3168
> Close (close) : RFC 9293
> TCP_INFO (tcp_info) : RFC 9293
> Fast recovery (fast_recovery) : RFC 5681
> Timestamping (timestamping) : RFC 1323
> Nagle (nagle) : RFC 896
> Selective Acknowledgments (sack) : RFC 2018
> Recent Timestamp (ts_recent) : RFC 1323
> Send file (sendfile)
> Syscall bad arg (syscall_bad_arg)
> Validate (validate)
> Blocking (blocking)
> Splice (splice)
> End of record (eor)
> Limited transmit (limited_transmit)
> 
> [...]

Here is the summary with links:
  - [net-next,1/4] selftests/net: packetdrill: import tcp/ecn, tcp/close, tcp/sack, tcp/tcp_info
    (no matching commit)
  - [net-next,2/4] selftests/net: packetdrill: import tcp/fast_recovery, tcp/nagle, tcp/timestamping
    https://git.kernel.org/netdev/net-next/c/eab35989cc37
  - [net-next,3/4] selftests/net: packetdrill: import tcp/eor, tcp/splice, tcp/ts_recent, tcp/blocking
    https://git.kernel.org/netdev/net-next/c/6f6692053939
  - [net-next,4/4] selftests/net: packetdrill: import tcp/user_timeout, tcp/validate, tcp/sendfile, tcp/limited-transmit, tcp/syscall_bad_arg
    (no matching commit)

You are awesome, thank you!
Willem de Bruijn Dec. 18, 2024, 7:43 p.m. UTC | #3
Jakub Kicinski wrote:
> On Tue, 17 Dec 2024 18:51:57 +0000 Soham Chakradeo wrote:
> > Import tests for the following features (folder names in brackets):
> > ECN (ecn) : RFC 3168
> > Close (close) : RFC 9293
> > TCP_INFO (tcp_info) : RFC 9293
> > Fast recovery (fast_recovery) : RFC 5681
> > Timestamping (timestamping) : RFC 1323
> > Nagle (nagle) : RFC 896
> > Selective Acknowledgments (sack) : RFC 2018
> > Recent Timestamp (ts_recent) : RFC 1323
> > Send file (sendfile)
> > Syscall bad arg (syscall_bad_arg)
> > Validate (validate)
> > Blocking (blocking)
> > Splice (splice)
> > End of record (eor)
> > Limited transmit (limited_transmit)
> 
> Excellent, thanks for adding all these! I will merge the patches
> momentarily but I do see a number of flakes on our VMs with debug
> configs enabled:
> https://netdev.bots.linux.dev/flakes.html?min-flip=0&tn-needle=packetdrill-dbg
> 
> In the 7 runs so far we got 2 flakes on:
> 
>  tcp-timestamping-client-only-last-byte-pkt
>  tcp-fast-recovery-prr-ss-ack-below-snd-una-cubic-pkt
>  tcp-timestamping-server-pkt
> 
> 1 flake on:
> 
>  tcp-timestamping-partial-pkt
>  tcp-eor-no-coalesce-retrans-pkt
> 
> LMK if you can't find the outputs, they should be there within a couple
> of clicks.
> 
> I'll set these cases to be ignored for now, but would be great if we
> could find the way for them to be less time sensitive, perhaps?

Yes, let's get a bit more data how flaky they are and investigate.

Hopefully it's just tuning. Worst case we could back out these few
tests (temporarily) to avoid polluting the dash.

We did not observe this on our end during repeated debug runs.
Paolo Abeni Dec. 19, 2024, 8:54 a.m. UTC | #4
On 12/18/24 19:00, Jakub Kicinski wrote:
> On Tue, 17 Dec 2024 18:51:57 +0000 Soham Chakradeo wrote:
>> Import tests for the following features (folder names in brackets):
>> ECN (ecn) : RFC 3168
>> Close (close) : RFC 9293
>> TCP_INFO (tcp_info) : RFC 9293
>> Fast recovery (fast_recovery) : RFC 5681
>> Timestamping (timestamping) : RFC 1323
>> Nagle (nagle) : RFC 896
>> Selective Acknowledgments (sack) : RFC 2018
>> Recent Timestamp (ts_recent) : RFC 1323
>> Send file (sendfile)
>> Syscall bad arg (syscall_bad_arg)
>> Validate (validate)
>> Blocking (blocking)
>> Splice (splice)
>> End of record (eor)
>> Limited transmit (limited_transmit)
> 
> Excellent, thanks for adding all these! I will merge the patches
> momentarily but I do see a number of flakes on our VMs with debug
> configs enabled:
> https://netdev.bots.linux.dev/flakes.html?min-flip=0&tn-needle=packetdrill-dbg
> 
> In the 7 runs so far we got 2 flakes on:
> 
>  tcp-timestamping-client-only-last-byte-pkt

Quickly skimming over this one, it looks like it does not account for
the increased default 'tolerance_us'. Kernel packetdrill set it by
default to 14K (instead of 10K IIRC).

I guess this statement:

// SCM_TSTAMP_SCHED for the last byte should be received almost immediately
// once 10001 is acked at t=20ms.

the the follow-up check should be updated accordingly. In the failures
observed so far the max timestamp is > 35ms.

Cheers,

Paolo
Willem de Bruijn Dec. 19, 2024, 7:31 p.m. UTC | #5
Paolo Abeni wrote:
> On 12/18/24 19:00, Jakub Kicinski wrote:
> > On Tue, 17 Dec 2024 18:51:57 +0000 Soham Chakradeo wrote:
> >> Import tests for the following features (folder names in brackets):
> >> ECN (ecn) : RFC 3168
> >> Close (close) : RFC 9293
> >> TCP_INFO (tcp_info) : RFC 9293
> >> Fast recovery (fast_recovery) : RFC 5681
> >> Timestamping (timestamping) : RFC 1323
> >> Nagle (nagle) : RFC 896
> >> Selective Acknowledgments (sack) : RFC 2018
> >> Recent Timestamp (ts_recent) : RFC 1323
> >> Send file (sendfile)
> >> Syscall bad arg (syscall_bad_arg)
> >> Validate (validate)
> >> Blocking (blocking)
> >> Splice (splice)
> >> End of record (eor)
> >> Limited transmit (limited_transmit)
> > 
> > Excellent, thanks for adding all these! I will merge the patches
> > momentarily but I do see a number of flakes on our VMs with debug
> > configs enabled:
> > https://netdev.bots.linux.dev/flakes.html?min-flip=0&tn-needle=packetdrill-dbg
> > 
> > In the 7 runs so far we got 2 flakes on:
> > 
> >  tcp-timestamping-client-only-last-byte-pkt
> 
> Quickly skimming over this one, it looks like it does not account for
> the increased default 'tolerance_us'. Kernel packetdrill set it by
> default to 14K (instead of 10K IIRC).
> 
> I guess this statement:
> 
> // SCM_TSTAMP_SCHED for the last byte should be received almost immediately
> // once 10001 is acked at t=20ms.
> 
> the the follow-up check should be updated accordingly. In the failures
> observed so far the max timestamp is > 35ms.

Thanks Paolo.

All three timestamping flakes are instances where the script expects
the timestamp to be taken essentially instantaneously after the send
call.

This is not the case, and the delay is outside even the 14K tolerance.
I see occurrences of 20K. At some point we cannot keep increasing the
tolerance, perhaps.
Jakub Kicinski Dec. 20, 2024, 2:01 a.m. UTC | #6
On Thu, 19 Dec 2024 14:31:44 -0500 Willem de Bruijn wrote:
> All three timestamping flakes are instances where the script expects
> the timestamp to be taken essentially instantaneously after the send
> call.
> 
> This is not the case, and the delay is outside even the 14K tolerance.
> I see occurrences of 20K. At some point we cannot keep increasing the
> tolerance, perhaps.

I pinned the other services away and gave the packetdrill tester its
own cores. Let's see how much of a difference this makes.
The net-next-2024-12-20--03-00 branch will be the first to have this.