From patchwork Mon Mar 23 09:46:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 46173 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f198.google.com (mail-wi0-f198.google.com [209.85.212.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id D7E6620D10 for ; Mon, 23 Mar 2015 09:46:56 +0000 (UTC) Received: by wivz2 with SMTP id z2sf6609649wiv.1 for ; Mon, 23 Mar 2015 02:46:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:subject :precedence:list-id:list-unsubscribe:list-archive:list-post :list-help:list-subscribe:mime-version:content-type :content-transfer-encoding:errors-to:sender:x-original-sender :x-original-authentication-results:mailing-list; bh=/pE/rnOE6sKi3WvTtVWvG3uDzM9onMUnrtfZmO2MbT4=; b=JYVcCl9EbEgx2XaBlgO7q/PbPM9Bt7pT2pff+wnMu4rUwFDAtQCyd29qfkFwq26sFK s17p5DrmTKdb4BekT+WFaQhEm6dd0tMANocOrq+9VHCopGSK014RylHQvQXxM+WLjd3o Kx9Pi2W/CX7Wpe1nxZgZoGfeB/aIK91ppU1ryvYCKBrdkltfJcai00BlG63acP1lA+5b T7w8bfEIAOJGYBhWAqLOxx+UAcVBMVWK22OH9oevFnXm+H26xNpe95uCYHKylFV27S0O YCSU5H6cyEtoBHiLF4xjCBWjIfXC6PHjpF/BJDn4zbV4xOQ7RLpf13aJUf0/2J4FYscX 3U/w== X-Gm-Message-State: ALoCoQnmsZKh/oVUb4ekTU/XTb9WyCmqy7AuAey2ULP7iyd361zIyh9O3vgUzbSlsxgBqlJNUGTL X-Received: by 10.180.150.115 with SMTP id uh19mr1838116wib.7.1427104016143; Mon, 23 Mar 2015 02:46:56 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.42.178 with SMTP id p18ls540559lal.68.gmail; Mon, 23 Mar 2015 02:46:55 -0700 (PDT) X-Received: by 10.152.121.33 with SMTP id lh1mr83361978lab.86.1427104015767; Mon, 23 Mar 2015 02:46:55 -0700 (PDT) Received: from mail-lb0-f171.google.com (mail-lb0-f171.google.com. [209.85.217.171]) by mx.google.com with ESMTPS id te1si226081lbb.72.2015.03.23.02.46.55 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Mar 2015 02:46:55 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.171 as permitted sender) client-ip=209.85.217.171; Received: by lbcgn8 with SMTP id gn8so114153846lbc.2 for ; Mon, 23 Mar 2015 02:46:55 -0700 (PDT) X-Received: by 10.152.22.67 with SMTP id b3mr81715817laf.117.1427104015509; Mon, 23 Mar 2015 02:46:55 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.57.201 with SMTP id k9csp715985lbq; Mon, 23 Mar 2015 02:46:54 -0700 (PDT) X-Received: by 10.140.39.179 with SMTP id v48mr115032012qgv.77.1427104013940; Mon, 23 Mar 2015 02:46:53 -0700 (PDT) Received: from ip-10-35-177-41.ec2.internal (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTPS id e140si207619qhc.76.2015.03.23.02.46.52 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 23 Mar 2015 02:46:53 -0700 (PDT) Received-SPF: none (google.com: lng-odp-bounces@lists.linaro.org does not designate permitted sender hosts) client-ip=54.225.227.206; Received: from localhost ([127.0.0.1] helo=ip-10-35-177-41.ec2.internal) by ip-10-35-177-41.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1YZywZ-0001dS-PP; Mon, 23 Mar 2015 09:46:47 +0000 Received: from mail-la0-f48.google.com ([209.85.215.48]) by ip-10-35-177-41.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1YZywU-0001dN-F9 for lng-odp@lists.linaro.org; Mon, 23 Mar 2015 09:46:42 +0000 Received: by labe2 with SMTP id e2so54116911lab.3 for ; Mon, 23 Mar 2015 02:46:36 -0700 (PDT) X-Received: by 10.152.23.166 with SMTP id n6mr5931700laf.67.1427103995856; Mon, 23 Mar 2015 02:46:35 -0700 (PDT) Received: from localhost.localdomain (ppp91-76-169-66.pppoe.mtu-net.ru. [91.76.169.66]) by mx.google.com with ESMTPSA id f7sm73442lam.17.2015.03.23.02.46.34 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 23 Mar 2015 02:46:34 -0700 (PDT) From: Maxim Uvarov To: lng-odp@lists.linaro.org Date: Mon, 23 Mar 2015 12:46:29 +0300 Message-Id: <1427103989-17859-1-git-send-email-maxim.uvarov@linaro.org> X-Mailer: git-send-email 1.9.1 X-Topics: patch Subject: [lng-odp] [PATCHv3] validation: implement platform env and add performance/odp_example_l2fwd_run X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: lng-odp-bounces@lists.linaro.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: maxim.uvarov@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.171 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Different platforms need different steps to set up pktio for testing. That might be veth devices for linux-generic, kernel modules and extended set up for dpdk and simple set pktio testing names for other platforms. This patch implements platform/test/pktio_env file which sets up global envs for pktio. As prof of validation that it works l2fwd is added to make check. Signed-off-by: Maxim Uvarov --- This patch depends on: [PATCHv4] example: l2fwd print packets per second I named it as v3, previous patch version was: "tests: performance add l2fwd to run script" Best regards, Maxim. platform/linux-generic/Makefile.am | 2 + platform/linux-generic/m4/configure.m4 | 2 + platform/linux-generic/test/Makefile.am | 1 + platform/linux-generic/test/pktio_env | 98 +++++++++++++++++++++++++ test/performance/Makefile.am | 4 +- test/performance/odp_example_l2fwd_run | 35 +++++++++ test/validation/odp_pktio_run | 122 ++++---------------------------- 7 files changed, 155 insertions(+), 109 deletions(-) create mode 100644 platform/linux-generic/test/Makefile.am create mode 100755 platform/linux-generic/test/pktio_env create mode 100755 test/performance/odp_example_l2fwd_run diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 9aed113..08349cd 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -5,6 +5,8 @@ AM_CFLAGS += -I$(srcdir)/include AM_CFLAGS += -I$(top_srcdir)/include AM_CFLAGS += -I$(top_srcdir)/helper/include +SUBDIRS = test + include_HEADERS = \ $(top_srcdir)/include/odp.h diff --git a/platform/linux-generic/m4/configure.m4 b/platform/linux-generic/m4/configure.m4 index 00f2f89..55124f1 100644 --- a/platform/linux-generic/m4/configure.m4 +++ b/platform/linux-generic/m4/configure.m4 @@ -15,3 +15,5 @@ AC_LINK_IFELSE( echo "GCC-style __atomic builtins not supported by the compiler." echo "Use newer version. For gcc > 4.7.0" exit -1) + +AC_CONFIG_FILES([platform/linux-generic/test/Makefile]) diff --git a/platform/linux-generic/test/Makefile.am b/platform/linux-generic/test/Makefile.am new file mode 100644 index 0000000..91e361c --- /dev/null +++ b/platform/linux-generic/test/Makefile.am @@ -0,0 +1 @@ +dist_bin_SCRIPTS = $(srcdir)/pktio_env diff --git a/platform/linux-generic/test/pktio_env b/platform/linux-generic/test/pktio_env new file mode 100755 index 0000000..97a2230 --- /dev/null +++ b/platform/linux-generic/test/pktio_env @@ -0,0 +1,98 @@ +#!/bin/sh +# +# Test script wrapper for running ODP pktio tests on linux-generic. +# +# For linux-generic the default behaviour is to create two pairs of +# virtual Ethernet interfaces and provide the names of these via +# environment variables to pktio test, the interfaces will be removed +# before the script exits. +# +# Note that the creation of virtual Ethernet devices depends on having +# CONFIG_VETH enabled in the kernel, if not enabled the test will be skipped. +# +TEST_DIR=$(dirname $0) +# Network set up +# IF0 <---> IF1 +# IF2 <---> IF3 +IF0=pktio-p0-p1 +IF1=pktio-p1-p0 +IF2=pktio-p2-p3 +IF3=pktio-p3-p2 + +# exit codes expected by automake for skipped tests +TEST_SKIPPED=77 + +# wait for a network interface's operational state to be "up" +wait_for_iface_up() +{ + iface=$1 + cnt=0 + + while [ $cnt -lt 50 ]; do + read operstate < /sys/class/net/$iface/operstate + + if [ $? -ne 0 ]; then + break + elif [ "$operstate" = "up" ]; then + return 0 + fi + + sleep 0.1 + cnt=`expr $cnt + 1` + done + + return 1 +} + +setup_pktio_env() +{ + echo "pktio: setting up test interfaces $IF0, $IF1, $IF2, $IF3." + + for iface in $IF0 $IF1 $IF2 $IF3; do + echo "ip link show $iface" + #ip link show $iface 2> /dev/null + ip link show $iface + if [ $? -eq 0 ]; then + echo "pktio: interface $iface already exist $?" + return + fi + done + + if [ "$1" = "clean" ]; then + trap cleanup_pktio_env EXIT + fi + + ip link add $IF0 type veth peer name $IF1 + if [ $? -ne 0 ]; then + echo "pktio: error: unable to create veth pair" + exit $TEST_SKIPPED + fi + ip link add $IF2 type veth peer name $IF3 + if [ $? -ne 0 ]; then + echo "pktio: error: unable to create veth pair" + exit $TEST_SKIPPED + fi + + for iface in $IF0 $IF1 $IF2 $IF3; do + ip link set $iface mtu 9216 up + ifconfig $iface -arp + done + + # check that the interface has come up before starting the test + for iface in $IF0 $IF1 $IF2 $IF3; do + wait_for_iface_up $iface + if [ $? -ne 0 ]; then + echo "pktio: interface $iface failed to come up" + exit 1 + fi + done +} + +cleanup_pktio_env() +{ + echo "pktio: removing test interfaces $IF0 - $IF3" + + for iface in $IF0 $IF1 $IF2 $IF3; do + ip link del $iface 2> /dev/null + done +} diff --git a/test/performance/Makefile.am b/test/performance/Makefile.am index 3be3721..4f480c3 100644 --- a/test/performance/Makefile.am +++ b/test/performance/Makefile.am @@ -1,10 +1,12 @@ include $(top_srcdir)/test/Makefile.inc +TESTS_ENVIRONMENT = ODP_PLATFORM=${with_platform} + EXECUTABLES = COMPILE_ONLY = odp_scheduling -TESTSCRIPTS = odp_scheduling_run +TESTSCRIPTS = odp_scheduling_run odp_example_l2fwd_run if test_perf TESTS = $(EXECUTABLES) $(TESTSCRIPTS) diff --git a/test/performance/odp_example_l2fwd_run b/test/performance/odp_example_l2fwd_run new file mode 100755 index 0000000..c300055 --- /dev/null +++ b/test/performance/odp_example_l2fwd_run @@ -0,0 +1,35 @@ +#!/bin/sh + +TEST_DIR=$(dirname $0) + +# Use installed pktio env or for make check take it from platform directory +if [ -f "./pktio_env" ]; then + . ./pktio_env + else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ]; then + . ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env + else + echo "unable to find pktio_env" + exit 1 + fi +fi + +run_l2fwd_example() +{ + setup_pktio_env + #@todo: limit odp_generator to cores + ($TEST_DIR/../../example/generator/odp_generator -I $IF0 \ + --srcmac fe:0f:97:c9:e0:44 --dstmac 32:cb:9b:27:2f:1a \ + --srcip 192.168.0.1 --dstip 192.168.0.2 -m u 2>&1 > /dev/null) \ + 2>&1 > /dev/null & + + echo "Run $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m 0 -t 60 -c 2" + $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m 0 -t 60 -c 2 + cleanup_pktio_env + exit 0 +} + +case "$1" in + setup) setup_pktio_env ;; + cleanup) cleanup_pktio_env ;; + *) run_l2fwd_example ;; +esac diff --git a/test/validation/odp_pktio_run b/test/validation/odp_pktio_run index 204b440..74cec27 100755 --- a/test/validation/odp_pktio_run +++ b/test/validation/odp_pktio_run @@ -1,104 +1,16 @@ #!/bin/sh -# -# Test script wrapper for running ODP pktio tests on linux-generic. -# -# For platforms other than linux-generic this script does nothing other -# than running the odp_pktio binary, odp_pktio will then attempt to -# open and use the special device named "loop" for testing. -# -# For linux-generic the default behaviour is to create a pair of -# virtual Ethernet interfaces and provide the names of these via -# environment variables to odp_pktio, the interfaces will be removed -# before the script exits. Note that the creation of virtual Ethernet -# devices depends on having CONFIG_VETH enabled in the kernel, if not -# enabled the test will be skipped. -# -# The evironment variable ODP_PLATFORM is used to determine the -# platform under test, when this script is invoked via 'make check' -# this variable is set automatically. -# -# It's also possible to split up the steps, which makes it easier when -# debugging, for example; -# -# export ODP_PLATFORM=linux-generic -# odp_pktio_run setup -# wireshark -i pktio-p0 -k & -# odp_pktio_run -# (repeat running test multiple times..) -# odp_pktio_run cleanup -# TEST_DIR=$(dirname $0) -IF0=pktio-p0 -IF1=pktio-p1 -# exit codes expected by automake for skipped tests -TEST_SKIPPED=77 - -# wait for a network interface's operational state to be "up" -wait_for_iface_up() -{ - iface=$1 - cnt=0 - - while [ $cnt -lt 50 ]; do - read operstate < /sys/class/net/$iface/operstate - - if [ $? != 0 ]; then - break - elif [ "$operstate" = "up" ]; then - return 0 - fi - - sleep 0.1 - cnt=`expr $cnt + 1` - done - - return 1 -} - -setup_env1() -{ - ip link show $IF0 2> /dev/null - if [ $? = 0 ]; then - ip link show $IF1 2> /dev/null - if [ $? = 0 ]; then - echo "pktio: interfaces $IF0 and $IF1 already exist" - return - fi - fi - - echo "pktio: setting up test interfaces $IF0 and $IF1" - - if [ "$1" = "clean" ]; then - trap cleanup_env1 EXIT - fi - - ip link add $IF0 type veth peer name $IF1 - if [ $? != 0 ]; then - echo "pktio: error: unable to create veth pair" - exit $TEST_SKIPPED - fi - ip link set $IF0 mtu 9216 up - ip link set $IF1 mtu 9216 up - ifconfig $IF0 -arp - ifconfig $IF1 -arp - - # check that the interface has come up before starting the test - for iface in $IF0 $IF1; do - wait_for_iface_up $iface - if [ $? != 0 ]; then - echo "pktio: interface $iface failed to come up" +# Use installed pktio env or for make check take it from platform directory +if [ -f "./pktio_env" ]; then + . ./pktio_env + else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ]; then + . ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env + else + echo "unable to find pktio_env" exit 1 fi - done -} - -cleanup_env1() -{ - echo "pktio: removing test interfaces $IF0 and $IF1" - ip link del $IF0 2> /dev/null - ip link del $IF1 2> /dev/null -} +fi run_test() { @@ -116,12 +28,12 @@ run_test() export ODP_PKTIO_DISABLE_SOCKET_${distype}=y fi $TEST_DIR/odp_pktio - if [ $? != 0 ]; then + if [ $? -ne 0 ]; then ret=1 fi done - if [ $ret != 0 ]; then + if [ $ret -ne 0 ]; then echo "!!! FAILED !!!" fi @@ -138,7 +50,7 @@ run() if [ "$ODP_PKTIO_IF0" = "" ]; then # no interfaces specified on linux-generic, use defaults - setup_env1 clean + setup_pktio_env clean export ODP_PKTIO_IF0=$IF0 export ODP_PKTIO_IF1=$IF1 fi @@ -146,14 +58,8 @@ run() run_test } -if [ "$ODP_PLATFORM" = "" ]; then - echo "pktio: error: ODP_PLATFORM must be defined" - # not skipped as this should never happen via "make check" - exit 1 -fi - case "$1" in - setup) setup_env1 ;; - cleanup) cleanup_env1 ;; - *) run ;; + setup) setup_pktio_env ;; + cleanup) cleanup_pktio_env ;; + *) run ;; esac