1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-23 00:00:01 +01:00
VILLASnode/tests/integration/node-infiniband.sh

203 lines
4.6 KiB
Bash
Raw Normal View History

#!/bin/bash
#
2021-09-22 10:42:03 +02:00
# Integration Infiniband test using villas node.
#
# @author Dennis Potter <dennis@dennispotter.eu>
2020-01-20 17:17:00 +01:00
# @copyright 2014-2020, Institute for Automation of Complex Power Systems, EONERC
# @license GNU General Public License (version 3)
#
# VILLASnode
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##################################################################################
2018-08-20 18:32:01 +02:00
# Check if tools are present
if ! command -v lspci; then
echo "'lspci' tool is missing"
2018-08-20 18:32:01 +02:00
exit 99
fi
# Check if user is superuser. SU is used for namespace
if [[ "$EUID" -ne 0 ]]; then
echo "Please run as root"
exit 99
fi
# Check if Infiniband card is present
2018-07-25 18:50:58 +02:00
if [[ ! $(lspci | grep Infiniband) ]]; then
echo "Did not find any Infiniband cards in system"
exit 99
fi
CONFIG_FILE=$(mktemp /tmp/ib-configuration-XXXX.conf)
CONFIG_FILE_TARGET=$(mktemp /tmp/ib-configuration-target-XXXX.conf)
INPUT_FILE=$(mktemp)
OUTPUT_FILE=$(mktemp)
2018-07-25 16:31:09 +02:00
NUM_SAMPLES=${NUM_SAMPLES:-10}
2018-07-28 16:43:14 +02:00
RC=0
# Generate test data for RC, UC, and UD test
2021-09-22 10:42:03 +02:00
villas signal -l ${NUM_SAMPLES} -n random > ${INPUT_FILE}
2018-07-25 18:34:23 +02:00
# Set config file with a MODE flag
cat > ${CONFIG_FILE} <<EOF
logging = {
level = 0,
facilities = "ib",
},
http = {
enabled = false,
},
nodes = {
2018-07-25 18:34:23 +02:00
results = {
type = "file",
uri = "${OUTPUT_FILE}",
},
ib_node_source = {
type = "infiniband",
rdma_port_space = "MODE",
in = {
address = "10.0.0.2:1337",
max_wrs = 8192,
cq_size = 8192,
poll_mode = "BUSY",
buffer_subtraction = 128,
},
out = {
address = "10.0.0.1:1337",
resolution_timeout = 1000,
max_wrs = 8192,
cq_size = 256,
send_inline = true,
max_inline_data = 60,
use_fallback = true,
}
}
ib_node_target = {
type = "infiniband",
rdma_port_space = "MODE",
in = {
address = "10.0.0.1:1337",
max_wrs = 8192,
cq_size = 8192,
poll_mode = "BUSY",
buffer_subtraction = 128,
}
2018-07-25 18:34:23 +02:00
}
}
EOF
# Set target config file, which is the same for both runs
cat > ${CONFIG_FILE_TARGET} <<EOF
@include "${CONFIG_FILE//\/tmp\/}"
paths = (
{
in = "ib_node_target",
out = "results"
}
)
EOF
# Declare modes
MODES=("RC" "UC" "UD")
2018-07-25 18:34:23 +02:00
# Run through modes
for MODE in "${MODES[@]}"
do
2018-07-25 18:34:23 +02:00
echo "#############################"
echo "#############################"
echo "## START ${MODE} ##"
echo "#############################"
echo "#############################"
sed -i -e 's/MODE/'${MODE}'/g' ${CONFIG_FILE}
# Start receiving node
2021-09-22 10:42:03 +02:00
villas node ${CONFIG_FILE_TARGET} &
node_proc=$!
# Wait for node to complete init
sleep 1
# Preprare fifo
DATAFIFO=/tmp/datafifo
if [[ ! -p ${DATAFIFO} ]]; then
mkfifo ${DATAFIFO}
fi
# Start sending pipe
2021-09-22 10:42:03 +02:00
ip netns exec namespace0 villas pipe -l ${NUM_SAMPLES} ${CONFIG_FILE} ib_node_source >${OUTPUT_FILE} <${DATAFIFO} &
node_pipe=$!
# Keep pipe alive
sleep 5 >${DATAFIFO} &
# Wait for pipe to connect to node
sleep 3
# Write data to pipe
cat ${INPUT_FILE} >${DATAFIFO} &
# Wait for node to handle samples
sleep 2
# Stop node
kill $node_pipe
kill $node_proc
# Compare data
2021-09-22 10:42:03 +02:00
villas compare ${INPUT_FILE} ${OUTPUT_FILE}
RC=$?
# Exit, if an error occurs
if [[ $RC != 0 ]]; then
rm ${CONFIG_FILE} ${CONFIG_FILE_TARGET} ${INPUT_FILE} ${OUTPUT_FILE} ${DATAFIFO}
exit ${RC}
fi
echo "#############################"
echo "#############################"
echo "## STOP $MODE ##"
echo "#############################"
echo "#############################"
echo ""
sed -i -e 's/'${MODE}'/MODE/g' ${CONFIG_FILE}
done
rm ${CONFIG_FILE} ${CONFIG_FILE_TARGET} ${INPUT_FILE} ${OUTPUT_FILE} ${DATAFIFO}
exit ${RC}