On 12/14/22 03:18, Xavier Simonart wrote:
Hi Mark


On Mon, Dec 12, 2022 at 10:33 PM Mark Michelson <[email protected] <mailto:[email protected]>> wrote:

    Hi Xavier. I think I may be a bit "slow" myself. It's not clear why
    these changes help slower systems.

    My guess is that `xxd` is faster than running `printf` in a loop,
    maybe?

On the system I was using (a s390 VM running on a x86_64 host ) each iteration of the loop took around 0.3 sec IIRC.
So, a 100 bytes packet was taking 30 seconds.
I do not exactly remember xxd speed, but it was probably 0.3 sec for the whole loop.

    If that's the case, then is there a chance that you could see the same
    issue on a slow system that doesn't have xxd?

Definitely. The fix uses xxd. And makes sure that, if xxd is not installed, that it runs as before. In other words, I do not have a solution for a slow system w/o xxd.

    And why does the sandbox cleanup change help?

Cleanup was timeouting while exiting vtep (vtep is already quite slow on a normal system, so it is not a surprise to see some timeout here). By splitting OVN_CLEANUP in pieces, and adding OVS_WAIT_UNTIL, we give much more time to vtep to properly stop.

Thanks for the explanations, Xavier.

Acked-by: Mark Michelson

Another way to fix this, more general (and more readable), would be to add a OVS_EXIT_TIMEOUT (in a similar way as OVS_CTL_TIMEOUT) so that we can configure the timeout used in OVN_CLEANUP.
What do you think?

That sounds like a good idea, but also not something that should block this change. If you want to add something like that as a future improvement, feel free.


Thanks
Xavier


    On 12/2/22 08:51, Xavier Simonart wrote:
     > When running unit tests on a s390x VM with a x86 host,
     > many tests fail due to the very slow speed of the system.
     >
     > Signed-off-by: Xavier Simonart <[email protected]
    <mailto:[email protected]>>
     > ---
     >   tests/atlocal.in <http://atlocal.in>           |  3 +++
     >   tests/network-functions.at <http://network-functions.at> | 18
    ++++++++++++------
     >   tests/ovn.at <http://ovn.at>               |  7 ++++++-
     >   3 files changed, 21 insertions(+), 7 deletions(-)
     >
     > diff --git a/tests/atlocal.in <http://atlocal.in>
    b/tests/atlocal.in <http://atlocal.in>
     > index 0b9a31276..02e9ce9bb 100644
     > --- a/tests/atlocal.in <http://atlocal.in>
     > +++ b/tests/atlocal.in <http://atlocal.in>
     > @@ -166,6 +166,9 @@ fi
     >   # Set HAVE_TCPDUMP
     >   find_command tcpdump
     >
     > +# Set HAVE_XXD
     > +find_command xxd
     > +
     >   # Set HAVE_LFTP
     >   find_command lftp
     >
     > diff --git a/tests/network-functions.at
    <http://network-functions.at> b/tests/network-functions.at
    <http://network-functions.at>
     > index c583bc31e..a2481c55c 100644
     > --- a/tests/network-functions.at <http://network-functions.at>
     > +++ b/tests/network-functions.at <http://network-functions.at>
     > @@ -128,12 +128,18 @@ OVS_START_SHELL_HELPERS
     >   # hex_to_binary HEXDIGITS
     >   #
     >   # Converts the pairs of HEXDIGITS into bytes and prints them on
    stdout.
     > -hex_to_binary() {
     > -    printf $(while test -n "$1"; do
     > -                 printf '\\%03o' 0x$(expr "$1" : '\(..\)')
     > -                 set -- "${1##??}"
     > -             done)
     > -}
     > +if test x$HAVE_XXD = xno; then
     > +    hex_to_binary() {
     > +        printf $(while test -n "$1"; do
     > +                     printf '\\%03o' 0x$(expr "$1" : '\(..\)')
     > +                     set -- "${1##??}"
     > +                 done)
     > +    }
     > +else
     > +    hex_to_binary() {
     > +        echo $1 | xxd -r -p
     > +    }
     > +fi
     >
     >   # tcpdump_hex TITLE PACKET
     >   #
     > diff --git a/tests/ovn.at <http://ovn.at> b/tests/ovn.at
    <http://ovn.at>
     > index dcc74649e..11f4cf2e6 100644
     > --- a/tests/ovn.at <http://ovn.at>
     > +++ b/tests/ovn.at <http://ovn.at>
     > @@ -4420,7 +4420,12 @@ for i in 1 2 3; do
     >   done
     >
     >   # Gracefully terminate daemons
     > -OVN_CLEANUP([hv1],[hv2],[vtep])
     > +
     > +OVN_CLEANUP_SBOX([hv1])
     > +OVN_CLEANUP_SBOX([hv2])
     > +OVS_WAIT_UNTIL([test `as vtep ovs-vsctl list-ports vtep_bfd | wc
    -l` -eq 0])
     > +OVN_CLEANUP([vtep])
     > +
     >   OVN_CLEANUP_VSWITCH([hv3])
     >
     >   AT_CLEANUP


_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to