Pārlūkot izejas kodu

Merge branch 'avadapal/heaps' of git-crysp.uwaterloo.ca:duoram/prac into avadapal/heaps

avadapal 7 mēneši atpakaļ
vecāks
revīzija
60b08db2b4
5 mainītis faili ar 88 papildinājumiem un 4 dzēšanām
  1. 1 1
      docker/Dockerfile
  2. 5 0
      docker/build-docker
  3. 34 3
      docker/run-experiment
  4. 5 0
      docker/set-networking
  5. 43 0
      online.cpp

+ 1 - 1
docker/Dockerfile

@@ -1,6 +1,6 @@
 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
+RUN apt update && apt install -y wget git build-essential net-tools iproute2 iperf iputils-ping libbsd-dev libboost-all-dev numactl time
 WORKDIR /root
 COPY . prac
 WORKDIR /root/prac

+ 5 - 0
docker/build-docker

@@ -1,4 +1,9 @@
 #!/bin/bash
 
+# cd into the directory containing this script (from the bash faq 028)
+if [[ $BASH_SOURCE = */* ]]; then
+  cd -- "${BASH_SOURCE%/*}/" || exit
+fi
+
 cd ..
 docker build $* -t prac -f docker/Dockerfile .

+ 34 - 3
docker/run-experiment

@@ -5,12 +5,43 @@ p0addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' prac_p0)
 p1addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' prac_p1)
 
 # Gather options and arguments
+preproc=0
 opts=""
 while getopts paot:ex arg; do
     opts+=" -${arg} ${OPTARG}"
+    if [ "$arg" = "p" -o "$arg" = "a" ]; then
+        preproc=1
+    fi
 done
 shift $((OPTIND-1))
 
+# Get the number of cores usable by each party
+ncores_p0=1
+ncores_p1=1
+ncores_p2=1
+if [ "$whichexps" != "none" ]; then
+    ncores_p0=`docker exec -i prac_p0 $PRAC_NUMA_P0 nproc 2>/dev/null`
+    ncores_p1=`docker exec -i prac_p1 $PRAC_NUMA_P1 nproc 2>/dev/null`
+    ncores_p2=`docker exec -i prac_p2 $PRAC_NUMA_P2 nproc 2>/dev/null`
+fi
+
+ptarg_p0=""
+ptarg_p1=""
+ptarg_p2=""
+targ_p0=""
+targ_p1=""
+targ_p2=""
+
+if [ "$preproc" = 1 ]; then
+    ptarg_p0="p:${ncores_p0}"
+    ptarg_p1="p:${ncores_p1}"
+    ptarg_p2="p:${ncores_p2}"
+else
+    targ_p0="-t ${ncores_p0}"
+    targ_p1="-t ${ncores_p1}"
+    targ_p2="-t ${ncores_p2}"
+fi
+
 echo ===== Running prac $opts -- $*
 date "+===== Start %s %F %T"
 
@@ -18,9 +49,9 @@ date "+===== Start %s %F %T"
 savefile0=$$.p0.out
 savefile1=$$.p1.out
 savefile2=$$.p2.out
-docker exec -w /root/prac prac_p0 bash -c "$PRAC_NUMA_P0 stdbuf -o 0 ./prac $opts 0 $* > $savefile0" &
-docker exec -w /root/prac prac_p1 bash -c "$PRAC_NUMA_P1 stdbuf -o 0 ./prac $opts 1 $p0addr $* > $savefile1" &
-docker exec -w /root/prac prac_p2 bash -c "$PRAC_NUMA_P2 stdbuf -o 0 ./prac $opts 2 $p0addr $p1addr $* > $savefile2" &
+docker exec -w /root/prac prac_p0 bash -c "$PRAC_NUMA_P0 stdbuf -o 0 ./prac $opts $targ_p0 0 $* $ptarg_p0 > $savefile0 2>&1" &
+docker exec -w /root/prac prac_p1 bash -c "$PRAC_NUMA_P1 stdbuf -o 0 ./prac $opts $targ_p1 1 $p0addr $* $ptarg_p1 > $savefile1 2>&1" &
+docker exec -w /root/prac prac_p2 bash -c "$PRAC_NUMA_P2 stdbuf -o 0 ./prac $opts $targ_p2 2 $p0addr $p1addr $* $ptarg_p2 > $savefile2 2>&1" &
 wait
 echo ===== P0 output
 docker exec -w /root/prac prac_p0 cat $savefile0

+ 5 - 0
docker/set-networking

@@ -1,5 +1,10 @@
 #!/bin/bash
 
+# cd into the directory containing this script (from the bash faq 028)
+if [[ $BASH_SOURCE = */* ]]; then
+  cd -- "${BASH_SOURCE%/*}/" || exit
+fi
+
 latency=30ms
 bw=100mbit
 

+ 43 - 0
online.cpp

@@ -892,6 +892,42 @@ static void duoram(MPCIO &mpcio,
     });
 }
 
+// This measures just sequential (dependent) reads
+// T is RegAS or RegXS for additive or XOR shared database respectively
+template <typename T>
+static void read_test(MPCIO &mpcio,
+    const PRACOptions &opts, char **args)
+{
+    nbits_t depth = 6;
+    int items = 4;
+
+    if (*args) {
+        depth = atoi(*args);
+        ++args;
+    }
+    if (*args) {
+        items = atoi(*args);
+        ++args;
+    }
+
+    MPCTIO tio(mpcio, 0, opts.num_threads);
+    run_coroutines(tio, [&mpcio, &tio, depth, items] (yield_t &yield) {
+        size_t size = size_t(1)<<depth;
+        Duoram<T> oram(tio.player(), size);
+        auto A = oram.flat(tio, yield);
+
+        std::cout << "\n===== SEQUENTIAL READS =====\n";
+        T totval;
+        for (int i=0;i<items;++i) {
+            RegXS idx;
+            idx.randomize(depth);
+            T val = A[idx];
+            totval += val;
+        }
+        printf("Total value read: %016lx\n", totval.share());
+    });
+}
+
 static void cdpf_test(MPCIO &mpcio,
     const PRACOptions &opts, char **args)
 {
@@ -1593,6 +1629,13 @@ void online_main(MPCIO &mpcio, const PRACOptions &opts, char **args)
         } else {
             duoram_test<RegAS>(mpcio, opts, args);
         }
+    } else if (!strcmp(*args, "read")) {
+        ++args;
+        if (opts.use_xor_db) {
+            read_test<RegXS>(mpcio, opts, args);
+        } else {
+            read_test<RegAS>(mpcio, opts, args);
+        }
     } else if (!strcmp(*args, "cdpftest")) {
         ++args;
         cdpf_test(mpcio, opts, args);