main.rs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. mod load_balancer;
  2. mod omap;
  3. mod record;
  4. use clap::Parser;
  5. use load_balancer::LoadBalancer;
  6. use record::Record;
  7. use std::time::UNIX_EPOCH;
  8. /// Baseline oblivious sort based multiqueue.
  9. #[derive(Parser, Debug)]
  10. #[command(version, about, long_about = None)]
  11. struct Args {
  12. /// Number of send requests to store in the database.
  13. sends: usize,
  14. /// Number of messages to fetch from the database.
  15. fetches: u64,
  16. /// Total number of threads available.
  17. threads: usize,
  18. /// Number of users in the user store.
  19. users: usize,
  20. /// Number of submaps.
  21. maps: usize,
  22. /// Total number of runs.
  23. #[arg(short, long, default_value = "1")]
  24. runs: usize,
  25. /// Number of runs before measurements are recorded.
  26. #[arg(short, long, default_value = "0")]
  27. warmup_runs: usize,
  28. }
  29. fn main() {
  30. let args = Args::parse();
  31. let mut l = LoadBalancer::new(args.users as i64, args.threads, args.maps);
  32. let sends: Vec<Record> = (0..args.sends)
  33. .map(|x| Record::send(0 as i64, x.try_into().unwrap()))
  34. .collect();
  35. l.batch_send(sends);
  36. let results: Vec<u128> = (0..(args.runs + args.warmup_runs))
  37. .map(|_| {
  38. let start = std::time::SystemTime::now()
  39. .duration_since(UNIX_EPOCH)
  40. .unwrap()
  41. .as_nanos();
  42. let _responses = l.batch_fetch(vec![Record::fetch(0, args.fetches)]);
  43. let end = std::time::SystemTime::now()
  44. .duration_since(UNIX_EPOCH)
  45. .unwrap()
  46. .as_nanos();
  47. // for response in responses.iter() {
  48. // println!("{:?}", response);
  49. // }
  50. end - start
  51. })
  52. .collect();
  53. print!("{}\t", args.sends);
  54. for result in results[..].iter() {
  55. print!("{}\t", *result as f64 / 1000000000.0);
  56. }
  57. println!();
  58. }