#!/bin/bash set -o errexit THIS_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" TEST_DEFS_DIR=$(readlink -f "${THIS_DIR}/../../..") GET_VLAND_IFACE=${TEST_DEFS_DIR}/automated/utils/vland/get_vland_interface.sh GET_VLAND_PCI_DEV=${TEST_DEFS_DIR}/automated/utils/vland/get_vland_pci_dev.sh # vlnad name to use VLAND_NAME=${VLAND_NAME:-vlan_one} VLAND_IFACE=$($GET_VLAND_IFACE "$VLAND_NAME") VLAND_PCI_DEV=$($GET_VLAND_PCI_DEV "$VLAND_NAME") # Do not run tests on more than MAX_CORES cores # 0 means use all cores MAX_CORES=${MAX_CORES:-0} # IP address of the server SERVER_IP=${SERVER_IP:-192.168.1.4} # What kind of configuration to use: # linux-ip: plain Linux IP stack # odp-dpdk: NGiNX with OFP+ODP+DPDK CONFIG_TYPE=${CONFIG_TYPE:-linux-ip} function exit_error { echo "-- SERVER ERROR" journalctl -u nginx lava-test-case server_up --status fail } trap exit_error ERR # Use this function to configure Linux IP stack function config_linux_ip { ip address add "${SERVER_IP}/24" dev "$VLAND_IFACE" ip link set "$VLAND_IFACE" up lava-test-case server_ifup --result pass sysctl -w net.ipv4.ip_local_port_range="1500 65500" } # Use this function to configure a device for DPDK usage function config_dpdk_dev { local driver=${1:-igb_uio} if ! which dpdk-devbind &>/dev/null; then echo "ERROR: dpdk not installed" exit 1 fi modprobe "$driver" dpdk-devbind -u "$VLAND_PCI_DEV" dpdk-devbind -b "${driver}" "$VLAND_PCI_DEV" dpdk-devbind -s apt-get install -y nginx systemctl stop nginx # FIXME: for now NGiNX for OFP only supports one core worker echo "-- NOTICE: setting MAX_CORES to 1" MAX_CORES=1 } # Callback to call before starting nginx when using OFP-DPDK # First parameter of callback is the number of cores function odp_dpdk_pre_cb { # clean hugepages rm -rf /dev/hugepages/* } function odp_dpdk_post_cb { local cores=$1 systemctl status nginx echo "-- AFFINITY $cores" for pid in $(pgrep nginx); do taskset -p "$pid" done } function linux_ip_pre_cb { local cores=$1 ethtool -L "$VLAND_IFACE" combined "$cores" } function linux_ip_post_cb { local cores=$1 systemctl status nginx echo "-- AFFINITY $cores" for pid in $(pgrep nginx); do taskset -p "$pid" done echo "-- INTERRUPTS $cores" grep "$VLAND_IFACE" /proc/interrupts echo "--- MPSTAT $cores" mpstat -P ALL | cat } function configure_ramdisk { local ROOT=/www mkdir "$ROOT" mount -t tmpfs -o size=1M tmpfs "$ROOT" echo "-- Ramdisk created: " df -h "$ROOT" echo "-- END" lava-test-case server_www_ramdisk --result pass cat > "$ROOT/index.html" <<-EOF