X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fbash%2Ffunction%2Fdpdk.sh;h=bf1e8e337e6eeda9da83d76601c6c5c447898a1d;hb=refs%2Fchanges%2F31%2F36431%2F18;hp=da46c6d49cb69d33272caff8bd42d5dfbfee7bfd;hpb=54beb458703ff91e9f522f8af0a57722966f093e;p=csit.git diff --git a/resources/libraries/bash/function/dpdk.sh b/resources/libraries/bash/function/dpdk.sh index da46c6d49c..bf1e8e337e 100644 --- a/resources/libraries/bash/function/dpdk.sh +++ b/resources/libraries/bash/function/dpdk.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2022 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -84,49 +84,34 @@ function dpdk_compile () { set -exuo pipefail - arch=$(uname -m) || { - die "Get CPU architecture failed." - } - - # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target. - if [ ${arch} == "aarch64" ]; then - arch="arm64" - machine="armv8a" - else - machine="native" - fi - - # Patch settings. - sed_mlx="s/^CONFIG_RTE_LIBRTE_MLX5_PMD=n/CONFIG_RTE_LIBRTE_MLX5_PMD=y/g" - sed_i40e="s/^CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n/CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=y/g" - sed_file="./config/common_base" - pushd "${DPDK_DIR}" || die "Pushd failed" - if ( lsmod || die ) | fgrep mlx; then - sed -i "${sed_mlx}" "${sed_file}" || die - fi - sed -i "${sed_i40e}" "${sed_file}" || die "Patch failed" + # enable l3fwd + meson_options="-Dexamples=l3fwd " - # Compile - make install T="${arch}"-"${machine}"-linuxapp-gcc -j || { - die "Failed to compile DPDK!" - } - popd || die "Popd failed" + # i40e specific options + meson_options="${meson_options} \ + -Dc_args=-DRTE_LIBRTE_I40E_16BYTE_RX_DESC=y" - # Compile the l3fwd. - export RTE_SDK="${DPDK_DIR}/" - export RTE_TARGET="${arch}-${machine}-linuxapp-gcc" - # Patch settings. - sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128/#define RTE_TEST_RX_DESC_DEFAULT 1024/g" - sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512/#define RTE_TEST_TX_DESC_DEFAULT 1024/g" + # Configure generic build - the same used by VPP + meson_options="${meson_options} -Dplatform=generic" + + # Patch L3FWD. + sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128" + sed_rxd+="/#define RTE_TEST_RX_DESC_DEFAULT 1024/g" + sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512" + sed_txd+="/#define RTE_TEST_TX_DESC_DEFAULT 1024/g" sed_file="./main.c" - pushd "${RTE_SDK}"/examples/l3fwd || die "Pushd failed" + pushd examples/l3fwd || die "Pushd failed" sed -i "${sed_rxd}" "${sed_file}" || die "Patch failed" sed -i "${sed_txd}" "${sed_file}" || die "Patch failed" - make clean || die "Failed to compile l3fwd" - make -j || die "Failed to compile l3fwd" popd || die "Popd failed" + + # Compile using Meson and Ninja. + meson ${meson_options} build || { + die "Failed to compile DPDK!" + } + ninja -C build || die "Failed to compile DPDK!" } @@ -206,7 +191,7 @@ function dpdk_kill () { fi # Remove hugepages - sudo rm -f /dev/hugepages/* || die "Removing hugepages failed!" + sudo rm -rf /dev/hugepages/* || die "Removing hugepages failed!" } @@ -222,32 +207,20 @@ function dpdk_l3fwd_compile () { set -exuo pipefail - arch=$(uname -m) || { - die "Get CPU architecture failed." - } - - # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target. - if [ ${arch} == "aarch64" ]; then - arch="arm64" - machine="armv8a" - else - machine="native" - fi - - # Compile the l3fwd. - export RTE_SDK="${DPDK_DIR}/" - export RTE_TARGET="${arch}-${machine}-linuxapp-gcc" - # Patch settings. - sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128/#define RTE_TEST_RX_DESC_DEFAULT 2048/g" - sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512/#define RTE_TEST_TX_DESC_DEFAULT 2048/g" + pushd "${DPDK_DIR}" || die "Pushd failed" + # Patch L3FWD. + sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128" + sed_rxd+="/#define RTE_TEST_RX_DESC_DEFAULT 2048/g" + sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512" + sed_txd+="/#define RTE_TEST_TX_DESC_DEFAULT 2048/g" sed_file="./main.c" - pushd "${RTE_SDK}"/examples/l3fwd || die "Pushd failed" + pushd examples/l3fwd || die "Pushd failed" sed -i "${sed_rxd}" "${sed_file}" || die "Patch failed" sed -i "${sed_txd}" "${sed_file}" || die "Patch failed" chmod +x ${1} && source ${1} || die "Patch failed" - make clean || die "Failed to compile l3fwd" - make -j || die "Failed to compile l3fwd" popd || die "Popd failed" + + ninja -C build || die "Failed to compile DPDK!" } @@ -262,20 +235,8 @@ function dpdk_l3fwd () { set -exuo pipefail - arch=$(uname -m) || { - die "Get CPU architecture failed." - } - - # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target. - if [ ${arch} == "aarch64" ]; then - arch="arm64" - machine="armv8a" - else - machine="native" - fi - rm -f screenlog.0 || true - binary="${DPDK_DIR}/examples/l3fwd/build/app/l3fwd" + binary="${DPDK_DIR}/build/examples/dpdk-l3fwd" sudo sh -c "screen -dmSL DPDK-test ${binary} ${@}" || { die "Failed to start l3fwd" @@ -284,6 +245,7 @@ function dpdk_l3fwd () { for attempt in {1..60}; do echo "Checking if l3fwd is alive, attempt nr ${attempt}" if fgrep "L3FWD: entering main loop on lcore" screenlog.0; then + cat screenlog.0 exit 0 fi sleep 1 @@ -294,6 +256,38 @@ function dpdk_l3fwd () { } +function dpdk_l3fwd_check () { + + # DPDK l3fwd check state. + + set -exuo pipefail + + for attempt in {1..60}; do + echo "Checking if l3fwd state is ok, attempt nr ${attempt}" + if fgrep "Port 0 Link up" screenlog.0 && \ + fgrep "Port 1 Link up" screenlog.0; then + cat screenlog.0 + dpdk_l3fwd_pid + exit 0 + fi + sleep 1 + done + cat screenlog.0 + + exit 1 +} + + +function dpdk_l3fwd_pid () { + l3fwd_pid="$(pidof dpdk-l3fwd)" + if [ ! -z "${l3fwd_pid}" ]; then + echo "L3fwd process ID: ${l3fwd_pid}" + else + echo "L3fwd not running!" + fi +} + + function dpdk_precheck () { # Precheck system settings (nr_hugepages, max_map_count). @@ -329,20 +323,8 @@ function dpdk_testpmd () { set -exuo pipefail - arch=$(uname -m) || { - die "Get CPU architecture failed." - } - - # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target. - if [ ${arch} == "aarch64" ]; then - arch="arm64" - machine="armv8a" - else - machine="native" - fi - rm -f screenlog.0 || true - binary="${DPDK_DIR}/${arch}-${machine}-linuxapp-gcc/app/testpmd" + binary="${DPDK_DIR}/build/app/dpdk-testpmd" sudo sh -c "screen -dmSL DPDK-test ${binary} ${@}" || { die "Failed to start testpmd" @@ -352,6 +334,7 @@ function dpdk_testpmd () { echo "Checking if testpmd is alive, attempt nr ${attempt}" if fgrep "Press enter to exit" screenlog.0; then cat screenlog.0 + dpdk_testpmd_pid exit 0 fi sleep 1 @@ -360,3 +343,34 @@ function dpdk_testpmd () { exit 1 } + + +function dpdk_testpmd_check () { + + # DPDK testpmd check links state. + + set -exuo pipefail + + for attempt in {1..60}; do + echo "Checking if testpmd links state changed, attempt nr ${attempt}" + if fgrep "Port 0: link state change event" screenlog.0 && \ + fgrep "Port 1: link state change event" screenlog.0; then + cat screenlog.0 + exit 0 + fi + sleep 1 + done + cat screenlog.0 + + exit 1 +} + + +function dpdk_testpmd_pid () { + testpmd_pid="$(pidof dpdk-testpmd)" + if [ ! -z "${testpmd_pid}" ]; then + echo "Testpmd process ID: ${testpmd_pid}" + else + echo "Testpmd not running!" + fi +}