Bläddra i källkod

Added experiment infra for baseline.

Kyle Fredrickson 1 år sedan
förälder
incheckning
d8479402c1
6 ändrade filer med 111 tillägg och 35 borttagningar
  1. 24 0
      baseline/makefile
  2. 39 0
      baseline/private.pem
  3. 3 0
      baseline/run_experiment.sh
  4. 27 9
      baseline/src/main.rs
  5. 15 26
      omq/src/lib.rs
  6. 3 0
      sparta/run_experiment.sh

+ 24 - 0
baseline/makefile

@@ -0,0 +1,24 @@
+HEAP_SIZE = 0x100000000
+STACK_SIZE = 0x400000
+MAX_THREADS = 9
+
+BUILD_DIR = target/x86_64-fortanix-unknown-sgx/release
+
+BINARY = $(BUILD_DIR)/baseline
+TARGET = $(BUILD_DIR)/baseline.sgxs
+SIGNATURE = $(BUILD_DIR)/baseline.sig
+
+.PHONY: clean run
+
+$(TARGET): $(BINARY)
+	ftxsgx-elf2sgxs -o $(TARGET) $(BINARY) --heap-size $(HEAP_SIZE) --stack-size $(STACK_SIZE) --threads $(MAX_THREADS)
+	sgxs-sign --key private.pem $(TARGET) $(SIGNATURE)
+
+$(BINARY):
+	cargo build --release
+
+run: $(TARGET)
+	ftxsgx-runner $(TARGET) 3 7 8
+
+clean:
+	rm -rf $(BUILD_DIR)

+ 39 - 0
baseline/private.pem

@@ -0,0 +1,39 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----

+ 3 - 0
baseline/run_experiment.sh

@@ -0,0 +1,3 @@
+#! /bin/bash
+
+ftxsgx-runner target/x86_64-fortanix-unknown-sgx/release/sparta.sgxs $@

+ 27 - 9
baseline/src/main.rs

@@ -1,17 +1,35 @@
+use std::time::UNIX_EPOCH;
+
 use omq::{Omq, Request};
 
 fn main() {
-    let mut o = Omq::new();
+    let args: Vec<String> = std::env::args().collect();
+    let num_sends = args[1].parse::<usize>().unwrap();
+    let num_fetches = args[2].parse::<usize>().unwrap();
+    let num_threads = args[3].parse::<usize>().unwrap();
+
+    let mut o = Omq::new(num_threads);
 
-    let sends: Vec<Request> = (0..0x8)
+    let sends: Vec<Request> = (0..num_sends)
         .map(|x| Request::new_send(0, x.try_into().unwrap()))
         .collect();
     o.batch_send(sends);
-    // let mut v = vec![Request::new_fetch(0, 1); 0x200000];
-
-    // let start = Instant::now();
-    // sort(&mut v[..], 8);
-    o.batch_fetch(vec![Request::new_fetch(0, 0x7)]);
-    //     let time = start.elapsed();
-    //     println!("{:?}", time);
+    let results: Vec<u128> = (0..15)
+        .map(|_| {
+            let start = std::time::SystemTime::now()
+                .duration_since(UNIX_EPOCH)
+                .unwrap()
+                .as_nanos();
+            let _ = o.batch_fetch(vec![Request::new_fetch(0, num_fetches)]);
+            let end = std::time::SystemTime::now()
+                .duration_since(UNIX_EPOCH)
+                .unwrap()
+                .as_nanos();
+            end - start
+        })
+        .collect();
+    for idx in 5..results.len() {
+        print!("{}\t", results[idx]);
+    }
+    println!();
 }

+ 15 - 26
omq/src/lib.rs

@@ -6,21 +6,19 @@ pub use request::Request;
 
 #[derive(Debug)]
 pub struct Omq {
+    num_threads: usize,
     message_store: Vec<Request>,
 }
 
 impl Omq {
-    pub fn new() -> Self {
+    pub fn new(num_threads: usize) -> Self {
         Omq {
+            num_threads,
             message_store: Vec::new(),
         }
     }
 
     pub fn batch_send(&mut self, sends: Vec<Request>) {
-        for s in sends.iter() {
-            println!("{:?}", s);
-        }
-        println!();
         self.message_store.reserve(sends.len());
         self.message_store.extend(sends);
     }
@@ -43,12 +41,7 @@ impl Omq {
         let fetch_sum = fetches.iter().fold(0, |acc, f| acc + f.volume) as usize;
         self.update_store(fetches, fetch_sum);
 
-        self.message_store = otils::sort(std::mem::take(&mut self.message_store), 8);
-        println!("sorted");
-        for record in self.message_store.iter() {
-            println!("{:?}", record);
-        }
-        println!();
+        self.message_store = otils::sort(std::mem::take(&mut self.message_store), self.num_threads);
 
         let mut user_sum: isize = 0;
         let mut prev_user: i32 = -1;
@@ -66,24 +59,20 @@ impl Omq {
                 isize::oselect(fetch_more, -1, 0),
             );
         }
-        for record in self.message_store.iter() {
-            println!("{:?}", record);
-        }
-        println!();
 
-        otils::compact(&mut self.message_store[..], |r| r.should_deliver(), 8);
+        otils::compact(
+            &mut self.message_store[..],
+            |r| r.should_deliver(),
+            self.num_threads,
+        );
         let deliver = self.message_store[0..fetch_sum].to_vec();
-        for record in deliver.iter() {
-            println!("{:?}", record);
-        }
-        println!();
 
-        otils::compact(&mut self.message_store[..], |r| r.should_defer(), 8);
+        otils::compact(
+            &mut self.message_store[..],
+            |r| r.should_defer(),
+            self.num_threads,
+        );
         self.message_store.truncate(final_size);
-        for record in self.message_store.iter() {
-            println!("{:?}", record);
-        }
-        println!();
 
         deliver
     }
@@ -98,7 +87,7 @@ mod tests {
 
     #[bench]
     fn bench_fetch(b: &mut Bencher) {
-        let mut o = Omq::new();
+        let mut o = Omq::new(8);
 
         let sends: Vec<Request> = (0..1048576)
             .map(|x| Request::new_send(0, x.try_into().unwrap()))

+ 3 - 0
sparta/run_experiment.sh

@@ -0,0 +1,3 @@
+#! /bin/bash
+
+ftxsgx-runner target/x86_64-fortanix-unknown-sgx/release/sparta.sgxs $@