mirror of
https://github.com/cetic/unikernels.git
synced 2024-10-18 15:12:37 +07:00
56 lines
1.9 KiB
Bash
56 lines
1.9 KiB
Bash
#!/bin/bash
|
|
SRC_DIR=$HOME/unikernels/BENCHMARKING
|
|
UNIKERNELS=$SRC_DIR/UNIKERNEL
|
|
|
|
HOST_IP=$(ip -4 route get 8.8.8.8 | awk {'print $7'} | tr -d '\n')
|
|
GUEST_IP=192.168.122.100
|
|
GUEST_PORT=53
|
|
HOST_PORT=53
|
|
BRIDGE_INTERFACE=virbr0
|
|
|
|
#write correct JSON file
|
|
pushd $UNIKERNELS/DNS &&
|
|
jq -n --arg IP_ADDRESS "$GUEST_IP" '{"net": [{"netmask": "255.255.255.0", "config": "static", "iface": 0, "gateway": "192.168.122.1", "address": $IP_ADDRESS}]}' > config.json &&
|
|
# build unikernels
|
|
sudo rm -rf build &&
|
|
mkdir -p build &&
|
|
pushd build &&
|
|
cmake .. &&
|
|
sudo make &&
|
|
popd &&
|
|
popd &&
|
|
|
|
# shuting down all VMs
|
|
docker stop $(docker ps -a -q)
|
|
virsh list | grep running | awk '{ print $2}' | while read DOMAIN; do
|
|
virsh destroy $DOMAIN
|
|
sleep 3
|
|
if [ "$DOMAIN" == "DNSBench" ]
|
|
then
|
|
virsh undefine $DOMAIN
|
|
fi
|
|
done
|
|
virsh undefine DNSBench
|
|
|
|
# launch unikernels in QEMU (+serial output to files)
|
|
virt-install \
|
|
--virt-type qemu --name DNSBench \
|
|
--vcpus 1 --ram 128 \
|
|
--import --disk $UNIKERNELS/DNS/build/DNS.img \
|
|
--serial file,path=/tmp/dns-benchmark.log \
|
|
--network network=default,model=virtio \
|
|
--check path_in_use=off \
|
|
--noautoconsole &&
|
|
|
|
# enable port-forwarding through iptables
|
|
source $SRC_DIR/bench_unikernel_cleanup.sh
|
|
sudo iptables -I FORWARD -o $BRIDGE_INTERFACE -d $GUEST_IP -j ACCEPT &&
|
|
sudo iptables -t nat -I PREROUTING -p udp --dport $HOST_PORT -j DNAT --to $GUEST_IP:$GUEST_PORT &&
|
|
|
|
echo "#############################################################################" &&
|
|
echo "### ###" &&
|
|
echo "### Unikernel DNS Server ready for benchmark. ###" &&
|
|
echo "### $HOST_IP:$HOST_PORT ###" &&
|
|
echo "### ###" &&
|
|
echo "#############################################################################"
|