#!/bin/bash # Get the IP addresses p0addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' duoram_p0) p1addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' duoram_p1) p2addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' duoram_p2) # The Duoram parameters # # mode is read, write, or readwrite mode=read # size is log_2 of the number of elements of the ORAM size=20 # iters is the number of operations to do iters=128 # phase is preproc or online phase=online # duoramtype is 3P or 2P (3-party or 2-party) duoramtype=3P # ramgb is the maximum amount of RAM to use in GB # (do not set it below 16) ramgb=16 if [ "$1" != "" ]; then mode="$1" fi if [ "$2" != "" ]; then size="$2" fi if [ "$3" != "" ]; then iters="$3" fi if [ "$4" != "" ]; then phase="$4" fi if [ "$5" != "" ]; then duoramtype="$5" fi if [ "$6" != "" ]; then ramgb="$6" fi if [ "$duoramtype" = "3P" -a "$phase" = "preproc" ]; then numdpfs=$iters if [ "$mode" = "read" -o "$mode" = "write" ]; then numdpfs=$((3*iters)) fi if [ "$mode" = "readwrite" ]; then numdpfs=$((6*iters)) fi fi echo ===== Running duoram $mode $size $iters $phase $duoramtype $ramgb date "+===== Start %s %F %T" if [ "$4" = "online" -a "$5" = "3P" ]; then # Run, saving the output savefilep0=$$.p0.out savefilep1=$$.p1.out savefilep2=$$.p2.out docker exec -w /root/duoram/duoram-online duoram_p2 bash -c "$DUORAM_NUMA_P2 stdbuf -o 0 ./p2 $p0addr $p1addr $size $iters 0 $iters 1 > $savefilep2 2>&1" & sleep 4 docker exec -w /root/duoram/duoram-online duoram_p1 bash -c "$DUORAM_NUMA_P1 stdbuf -o 0 ./duoram1 $p0addr $p2addr $size $iters 0 $iters 1 > $savefilep1 2>&1" & sleep 2 docker exec -w /root/duoram/duoram-online duoram_p0 bash -c "$DUORAM_NUMA_P0 stdbuf -o 0 ./duoram0 $p1addr $p2addr $size $iters 0 $iters 1 > $savefilep0 2>&1" & wait echo ===== P0 output docker exec -w /root/duoram/duoram-online duoram_p0 cat $savefilep0 docker exec -w /root/duoram/duoram-online duoram_p0 rm -f $savefilep0 echo ===== P1 output docker exec -w /root/duoram/duoram-online duoram_p1 cat $savefilep1 docker exec -w /root/duoram/duoram-online duoram_p1 rm -f $savefilep1 echo ===== P2 output docker exec -w /root/duoram/duoram-online duoram_p2 cat $savefilep2 docker exec -w /root/duoram/duoram-online duoram_p2 rm -f $savefilep2 date "+===== End %s %F %T" fi if [ "$4" = "preproc" -a "$5" = "3P" ]; then # Run, saving the output savefilep0=$$.p0.out savefilep1=$$.p1.out savefilep2=$$.p2.out docker exec -w /root/duoram/duoram-online/preprocflags duoram_p0 bash -c "rm -f *" & docker exec -w /root/duoram/duoram-online/preprocflags duoram_p1 bash -c "rm -f *" & docker exec -w /root/duoram/duoram-online/preprocflags duoram_p2 bash -c "rm -f *" & wait docker exec -w /root/duoram/preprocessing duoram_p2 bash -c "$DUORAM_NUMA_P2 stdbuf -o 0 ./p2preprocessing $p0addr $p1addr $numdpfs $size $ramgb > $savefilep2 2>&1" & sleep 4 docker exec -w /root/duoram/preprocessing duoram_p1 bash -c "$DUORAM_NUMA_P1 stdbuf -o 0 ./preprocessing1 $p0addr $p2addr $numdpfs $size $ramgb > $savefilep1 2>&1" & sleep 2 docker exec -w /root/duoram/preprocessing duoram_p0 bash -c "$DUORAM_NUMA_P0 stdbuf -o 0 ./preprocessing0 $p1addr $p2addr $numdpfs $size $ramgb > $savefilep0 2>&1" & wait echo ===== P0 output docker exec -w /root/duoram/preprocessing duoram_p0 cat $savefilep0 docker exec -w /root/duoram/preprocessing duoram_p0 rm -f $savefilep0 echo ===== P1 output docker exec -w /root/duoram/preprocessing duoram_p1 cat $savefilep1 docker exec -w /root/duoram/preprocessing duoram_p1 rm -f $savefilep1 echo ===== P2 output docker exec -w /root/duoram/preprocessing duoram_p2 cat $savefilep2 docker exec -w /root/duoram/preprocessing duoram_p2 rm -f $savefilep2 date "+===== End %s %F %T" fi if [ "$1" = "read" -a "$5" = "2P" ]; then # Run, saving the output savefilep0=$$.p0.out savefilep1=$$.p1.out nproc0=$(docker exec -w /root/duoram/cpir-read/cxx duoram_p0 bash -c "$DUORAM_NUMA_P0 nproc 2>/dev/null") nproc1=$(docker exec -w /root/duoram/cpir-read/cxx duoram_p1 bash -c "$DUORAM_NUMA_P1 nproc 2>/dev/null") docker exec -w /root/duoram/cpir-read/cxx duoram_p1 bash -c "$DUORAM_NUMA_P1 stdbuf -o 0 ./spir_test1 $p0addr $size $nproc1 $iters $iters > $savefilep1 2>&1" & echo "P1 launched" sleep 4 docker exec -w /root/duoram/cpir-read/cxx duoram_p0 bash -c "$DUORAM_NUMA_P0 stdbuf -o 0 ./spir_test0 $p1addr $size $nproc0 $iters $iters > $savefilep0 2>&1" & echo "P0 launched" wait echo ===== P0 output docker exec -w /root/duoram/cpir-read/cxx duoram_p0 cat $savefilep0 docker exec -w /root/duoram/cpir-read/cxx duoram_p0 rm -f $savefilep0 echo ===== P1 output docker exec -w /root/duoram/cpir-read/cxx duoram_p1 cat $savefilep1 docker exec -w /root/duoram/cpir-read/cxx duoram_p1 rm -f $savefilep1 date "+===== End %s %F %T" fi if [ "$1" = "write" -a "$5" = "2P" -a "$4" = "preproc" ]; then # Run, saving the output savefilep0=$$.p0.out savefilep1=$$.p1.out docker exec -w /root/duoram/duoram-online/preprocflags duoram_p0 bash -c "rm -f *" & docker exec -w /root/duoram/duoram-online/preprocflags duoram_p1 bash -c "rm -f *" & wait docker exec -w /root/duoram/2p-preprocessing duoram_p1 bash -c "$DUORAM_NUMA_P1 stdbuf -o 0 ./OT $p0addr $p1addr 1 $((128*iters*size)) > $savefilep1 2>&1" & echo "P1 launched" sleep 1 docker exec -w /root/duoram/2p-preprocessing duoram_p0 bash -c "$DUORAM_NUMA_P0 stdbuf -o 0 ./OT $p0addr $p1addr 0 $((128*iters*size)) > $savefilep0 2>&1" & echo "P0 launched" sleep 2 wait docker exec -w /root/duoram/2p-preprocessing duoram_p1 bash -c "$DUORAM_NUMA_P1 stdbuf -o 0 ./preprocessing1 $p0addr $iters $size $ramgb >> $savefilep1 2>&1" & echo "P1 launched" sleep 4 docker exec -w /root/duoram/2p-preprocessing duoram_p0 bash -c "$DUORAM_NUMA_P0 stdbuf -o 0 ./preprocessing0 $p1addr $iters $size $ramgb >> $savefilep0 2>&1" & echo "P0 launched" wait echo ===== P0 output docker exec -w /root/duoram/2p-preprocessing duoram_p0 cat $savefilep0 docker exec -w /root/duoram/2p-preprocessing duoram_p0 rm -f $savefilep0 echo ===== P1 output docker exec -w /root/duoram/2p-preprocessing duoram_p1 cat $savefilep1 docker exec -w /root/duoram/2p-preprocessing duoram_p1 rm -f $savefilep1 date "+===== End %s %F %T" fi if [ "$1" = "write" -a "$5" = "2P" -a "$4" = "online" ]; then # Run, saving the output savefilep0=$$.p0.out savefilep1=$$.p1.out docker exec -w /root/duoram/duoram-online duoram_p1 bash -c "$DUORAM_NUMA_P1 stdbuf -o 0 ./2Pduoram1 $p0addr $p2addr $size $iters $iters $iters 1 > $savefilep1 2>&1" & echo "P1 launched" sleep 4 docker exec -w /root/duoram/duoram-online duoram_p0 bash -c "$DUORAM_NUMA_P0 stdbuf -o 0 ./2Pduoram0 $p1addr $p2addr $size $iters $iters $iters 1 > $savefilep0 2>&1" & echo "P0 launched" wait echo ===== P0 output docker exec -w /root/duoram/duoram-online duoram_p0 cat $savefilep0 docker exec -w /root/duoram/duoram-online duoram_p0 rm -f $savefilep0 echo ===== P1 output docker exec -w /root/duoram/duoram-online duoram_p1 cat $savefilep1 docker exec -w /root/duoram/duoram-online duoram_p1 rm -f $savefilep1 date "+===== End %s %F %T" fi