From patchwork Thu Feb 11 16:24:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Traynor X-Patchwork-Id: 1439573 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=whitealder.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=DZIoS4LX; dkim-atps=neutral Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Dc2730qkbz9sSC for ; Fri, 12 Feb 2021 03:25:51 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 80275874E9; Thu, 11 Feb 2021 16:25:49 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Zsq-FGdL36Ay; Thu, 11 Feb 2021 16:25:40 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id 73AC887469; Thu, 11 Feb 2021 16:25:39 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2F8E4C1E6F; Thu, 11 Feb 2021 16:25:39 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 41E52C013A for ; Thu, 11 Feb 2021 16:25:38 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 31E4586EE8 for ; Thu, 11 Feb 2021 16:25:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tZi0g5eccXMz for ; Thu, 11 Feb 2021 16:25:37 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by fraxinus.osuosl.org (Postfix) with ESMTPS id 1102386F14 for ; Thu, 11 Feb 2021 16:25:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1613060736; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9j4QvlfkZFbCNWMuXZ7AaFTwyYZQ83ir3WivnO1maVM=; b=DZIoS4LX6ETx1hkNUuFkiUW/6ClFRM1Q+UD0O90IHPCIV+h8+oPLi6wPWDTr79o7XXZ1Wm w7/CYfbr9WCNfLrfR9AkC8q4gLZNw7ZnPXlYv5ctkk05ETS5zXYelePfwZsliPeH6gAVET ghRVEQwbM8ZjOTbiHrH3T2toHx/6s6w= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-229-P_ExZjz4Ojau5NgY78V0TA-1; Thu, 11 Feb 2021 11:25:34 -0500 X-MC-Unique: P_ExZjz4Ojau5NgY78V0TA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 706D7100A8E8 for ; Thu, 11 Feb 2021 16:25:33 +0000 (UTC) Received: from rh.redhat.com (ovpn-115-138.ams2.redhat.com [10.36.115.138]) by smtp.corp.redhat.com (Postfix) with ESMTP id 56E842BFE8; Thu, 11 Feb 2021 16:25:32 +0000 (UTC) From: Kevin Traynor To: dev@openvswitch.org Date: Thu, 11 Feb 2021 16:24:57 +0000 Message-Id: <20210211162457.759510-2-ktraynor@redhat.com> In-Reply-To: <20210211162457.759510-1-ktraynor@redhat.com> References: <20210211162457.759510-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=ktraynor@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: david.marchand@redhat.com Subject: [ovs-dev] [RFC 1/1] tests: Add PMD auto load balance unit tests. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" These tests focus on enabling/disabling and user parameters. Signed-off-by: Kevin Traynor --- tests/alb.at | 260 +++++++++++++++++++++++++++++++++++++++++++++ tests/automake.mk | 1 + tests/testsuite.at | 1 + 3 files changed, 262 insertions(+) create mode 100644 tests/alb.at diff --git a/tests/alb.at b/tests/alb.at new file mode 100644 index 000000000..68f07aed3 --- /dev/null +++ b/tests/alb.at @@ -0,0 +1,260 @@ +AT_BANNER([PMD Auto Load Balance]) + +m4_divert_push([PREPARE_TESTS]) + +get_log_line_num () { + LINENUM=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) +} + +m4_divert_pop([PREPARE_TESTS]) + +m4_define([DUMMY_NUMA], [--dummy-numa="0,0"]) + +dnl CHECK_INTERVAL_PARAM([interval_time], [+line]) +dnl +dnl Waits for alb interval time in logs and checks if time matches +dnl $1. Checking starts from line number 'line' in ovs-vswithd.log . +m4_define([CHECK_INTERVAL_PARAM], [ + PATTERN="PMD auto load balance interval set to [[0-9]]* mins" + line_st=$2 + if [[ -z "$line_st" ]] + then + line_st="+0" + fi + OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "$PATTERN"]) + TIME=$(tail -n $line_st ovs-vswitchd.log | grep "$PATTERN" | tail -1 | sed -e 's/.* \([[0-9]]*\) mins/\1/') + AT_CHECK([test "$TIME" -eq "$1"]) +]) + +dnl CHECK_LOAD_PARAM([load], [+line]) +dnl +dnl Waits for alb load threshold in logs and checks if threshold matches +dnl $1. Checking starts from line number 'line' in ovs-vswithd.log . +m4_define([CHECK_LOAD_PARAM], [ + PATTERN="PMD auto load balance load threshold set to [[0-9]]*" + line_st=$2 + if [[ -z "$line_st" ]] + then + line_st="+0" + fi + OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "$PATTERN"]) + LOAD=$(tail -n $line_st ovs-vswitchd.log | grep "$PATTERN" | tail -1 | tr -d '%' | sed -e 's/.* \([[0-9]]*\)/\1/') + AT_CHECK([test "$LOAD" -eq "$1"]) +]) + +dnl CHECK_IMPROVE_PARAM([load], [+line]) +dnl +dnl Waits for alb improve threshold in logs and checks if threshold matches +dnl $1. Checking starts from line number 'line' in ovs-vswithd.log . +m4_define([CHECK_IMPROVE_PARAM], [ + PATTERN="PMD auto load balance improvement threshold set to [[0-9]]*" + line_st=$3 + if [[ -z "$line_st" ]] + then + line_st="+0" + fi + OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "$PATTERN"]) + IMPROVE=$(tail -n $line_st ovs-vswitchd.log | grep "$PATTERN" | tail -1 | tr -d '%' | sed -e 's/.* \([[0-9]]*\)/\1/') + AT_CHECK([test "$IMPROVE" -eq "$1"]) +]) + + +AT_SETUP([ALB - default state]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - enable/disable]) +OVS_VSWITCHD_START([add-port br0 p0 \ + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ + -- set open_vswitch . other_config:pmd-auto-lb="true"], + [], [], [DUMMY_NUMA]) +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) + +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - min num PMD/RxQ]) +OVS_VSWITCHD_START([add-port br0 p0 \ + -- set Interface p0 type=dummy-pmd options:n_rxq=2 \ + -- set Open_vSwitch . other_config:pmd-cpu-mask=1 \ + -- set open_vswitch . other_config:pmd-auto-lb="true"], + [], [], [DUMMY_NUMA]) +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Add more PMD +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3]) +OVS_WAIT_UNTIL([grep "There are 2 pmd threads on numa node" ovs-vswitchd.log]) + +# Add one more rxq to have 2 rxq on a PMD +get_log_line_num +AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=3]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) + +# Reduce PMD +get_log_line_num +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance not enough PMDs or Rx Queues to enable"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +# Check logs when try to enable but min PMD/RxQ prevents +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance not enough PMDs or Rx Queues to enable"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - PMD/RxQ assignment type]) +OVS_VSWITCHD_START([add-port br0 p0 \ + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ + -- set open_vswitch . other_config:pmd-auto-lb="true"], + [], [], [DUMMY_NUMA]) +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) + +# Change assignment type +get_log_line_num +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance needs 'other_config:pmd-rxq-assign=cycles' to enable"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +# Change back assignment type +get_log_line_num +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) + +# Check logs when try to enable but assignment prevents +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance needs 'other_config:pmd-rxq-assign=cycles' to enable"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - interval param]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Check default +CHECK_INTERVAL_PARAM([1], []) + +# Set new value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="10"]) +CHECK_INTERVAL_PARAM([10], [+$LINENUM]) + +# Set min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="1"]) +CHECK_INTERVAL_PARAM([1], [+$LINENUM]) + +# Set max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="20000"]) +CHECK_INTERVAL_PARAM([20000], [+$LINENUM]) + +# Set below min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="0"]) +CHECK_INTERVAL_PARAM([1], [+$LINENUM]) + +# TODO 20000 is documented as max value but it seems arbitary +# Setting to 20001 works, should it be checked and rejected? +# For now add a dummy test above the max value that accepts it +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="20001"]) +CHECK_INTERVAL_PARAM([20001], [+$LINENUM]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - improvement param]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Check default +CHECK_IMPROVE_PARAM([25], []) + +# Set new value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=60]) +CHECK_IMPROVE_PARAM([60], [+$LINENUM]) + +# Set min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=0]) +CHECK_IMPROVE_PARAM([0], [+$LINENUM]) + +# Set below min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=-1]) +CHECK_IMPROVE_PARAM([25], [+$LINENUM]) + +# Set max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=100]) +CHECK_IMPROVE_PARAM([100], [+$LINENUM]) + +# Set above max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=101]) +CHECK_IMPROVE_PARAM([25], [+$LINENUM]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - load param]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Check default +CHECK_LOAD_PARAM([95], []) + +# Set to new value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=70]) +CHECK_LOAD_PARAM([70], [+$LINENUM]) + +# Set to min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=0]) +CHECK_LOAD_PARAM([0], [+$LINENUM]) + +# Set to below min +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=-1]) +CHECK_LOAD_PARAM([95], [+$LINENUM]) + +# Set to max +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=100]) +CHECK_LOAD_PARAM([100], [+$LINENUM]) + +# Set above max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=101]) +CHECK_LOAD_PARAM([95], [+$LINENUM]) + +OVS_VSWITCHD_STOP +AT_CLEANUP diff --git a/tests/automake.mk b/tests/automake.mk index 677b99a6b..1fe928f23 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -63,4 +63,5 @@ TESTSUITE_AT = \ tests/jsonrpc-py.at \ tests/pmd.at \ + tests/alb.at \ tests/tunnel.at \ tests/tunnel-push-pop.at \ diff --git a/tests/testsuite.at b/tests/testsuite.at index 73699918d..58adfa09c 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -61,4 +61,5 @@ m4_include([tests/ofproto.at]) m4_include([tests/dpif-netdev.at]) m4_include([tests/pmd.at]) +m4_include([tests/alb.at]) m4_include([tests/dpctl.at]) m4_include([tests/ofproto-dpif.at])