Browse Source

Dockerization

Ian Goldberg 2 years ago
parent
commit
c8f6e0ae4a
7 changed files with 76 additions and 0 deletions
  1. 7 0
      docker/Dockerfile
  2. 4 0
      docker/build-docker
  3. 33 0
      docker/run-experiment
  4. 15 0
      docker/set-networking
  5. 6 0
      docker/start-docker
  6. 6 0
      docker/stop-docker
  7. 5 0
      docker/unset-networking

+ 7 - 0
docker/Dockerfile

@@ -0,0 +1,7 @@
+FROM ubuntu:22.04
+ARG DEBIAN_FRONTEND=noninteractive
+RUN apt update && apt install -y wget git build-essential net-tools iproute2 iperf iputils-ping libbsd-dev libboost-all-dev numactl
+WORKDIR /root
+COPY . prac
+WORKDIR /root/prac
+RUN make -j `nproc`

+ 4 - 0
docker/build-docker

@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd ..
+docker build $* -t prac -f docker/Dockerfile .

+ 33 - 0
docker/run-experiment

@@ -0,0 +1,33 @@
+#!/bin/bash
+
+# Get the IP addresses
+p0addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' prac_p0)
+p1addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' prac_p1)
+
+# Gather options and arguments
+opts=""
+while getopts paot:ex arg; do
+    opts+=" -${arg} ${OPTARG}"
+done
+shift $((OPTIND-1))
+
+echo ===== Running prac $opts -- $*
+date "+===== %s %F %T"
+
+# Run, saving the output
+savefile0=$$.p0.out
+savefile1=$$.p1.out
+savefile2=$$.p2.out
+docker exec -w /root/prac prac_p0 bash -c "$PRAC_NUMA_P0 ./prac $opts 0 $* > $savefile0" &
+docker exec -w /root/prac prac_p1 bash -c "$PRAC_NUMA_P1 ./prac $opts 1 $p0addr $* > $savefile1" &
+docker exec -w /root/prac prac_p2 bash -c "$PRAC_NUMA_P2 ./prac $opts 2 $p0addr $p1addr $* > $savefile2" &
+wait
+echo ===== P0 output
+docker exec -w /root/prac prac_p0 cat $savefile0
+docker exec -w /root/prac prac_p0 rm -f $savefile0
+echo ===== P1 output
+docker exec -w /root/prac prac_p1 cat $savefile1
+docker exec -w /root/prac prac_p1 rm -f $savefile1
+echo ===== P2 output
+docker exec -w /root/prac prac_p2 cat $savefile2
+docker exec -w /root/prac prac_p2 rm -f $savefile2

+ 15 - 0
docker/set-networking

@@ -0,0 +1,15 @@
+#!/bin/bash
+
+latency=30ms
+bw=100mbit
+
+if [ "$1" != "" ]; then
+    latency="$1"
+fi
+if [ "$2" != "" ]; then
+    bw="$2"
+fi
+./unset-networking
+docker exec --privileged prac_p0 tc qdisc add dev eth0 root netem delay $latency rate $bw
+docker exec --privileged prac_p1 tc qdisc add dev eth0 root netem delay $latency rate $bw
+docker exec --privileged prac_p2 tc qdisc add dev eth0 root netem delay $latency rate $bw

+ 6 - 0
docker/start-docker

@@ -0,0 +1,6 @@
+#!/bin/bash
+
+docker run -d --cap-add SYS_NICE --rm --name prac_p0 -h prac_p0 -t prac
+docker run -d --cap-add SYS_NICE --rm --name prac_p1 -h prac_p1 -t prac
+docker run -d --cap-add SYS_NICE --rm --name prac_p2 -h prac_p2 -t prac
+echo "All dockers launched"

+ 6 - 0
docker/stop-docker

@@ -0,0 +1,6 @@
+#!/bin/bash
+
+docker stop prac_p0 &
+docker stop prac_p1 &
+docker stop prac_p2 &
+wait

+ 5 - 0
docker/unset-networking

@@ -0,0 +1,5 @@
+#!/bin/bash
+
+for ctnr in prac_p0 prac_p1 prac_p2; do
+    docker exec --privileged $ctnr bash -c "if tc qdisc list dev eth0 | grep -q netem; then tc qdisc del dev eth0 root; fi"
+done