gen_enclave_config.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/python3
  2. import math
  3. import sys
  4. ###############################################################################
  5. # CONFIGS TO SET:
  6. CONFIG_FILE = "Enclave/Enclave.config.xml"
  7. ###############################################################################
  8. '''
  9. Generate a manifest file with:
  10. N: number of clients
  11. M: number of servers
  12. T: number of threads for each server
  13. B: msg_size
  14. '''
  15. def generate_config(N, M, T, B):
  16. cf = open(CONFIG_FILE, 'w+')
  17. clients_per_server = math.ceil(N/M)
  18. # Base heap of 2 MB per thread
  19. heap_size = 2000000 * T
  20. # Note: This assumes priv_out = 1 , i.e. only 1 token per client in an epoch
  21. # Storage and Ingestion data stored per_client = 52 bytes
  22. heap_size += clients_per_server * (B + 60)
  23. # 4 Buffers of clients_per_server items of B size each
  24. heap_size += (clients_per_server * B * 5)
  25. # 3 x WN
  26. heap_size += (5 * T * (clients_per_server * math.ceil(math.log(clients_per_server,2)) * 8))
  27. # 60 MB
  28. #heap_size += 60000000
  29. heap_size_page_aligned = math.ceil(heap_size/4096) * 4096
  30. hex_heap_size = hex(heap_size_page_aligned)
  31. enclave_config = '''<!-- Please refer to User's Guide for the explanation of each field -->
  32. <EnclaveConfiguration>
  33. <ProdID>0</ProdID>
  34. <ISVSVN>0</ISVSVN>
  35. <StackMaxSize>0x40000</StackMaxSize>
  36. <HeapMaxSize>{H}</HeapMaxSize>
  37. <TCSNum>32</TCSNum>
  38. <TCSPolicy>1</TCSPolicy>
  39. <DisableDebug>0</DisableDebug>
  40. <MiscSelect>0</MiscSelect>
  41. <MiscMask>0xFFFFFFFF</MiscMask>
  42. </EnclaveConfiguration>
  43. '''.format(H = str(hex_heap_size))
  44. #print (enclave_config)
  45. cf.write(enclave_config)
  46. cf.close()
  47. if __name__ == "__main__":
  48. if(len(sys.argv)!=5):
  49. print("Incorrect usage!\n")
  50. print("./gen_enclave_config.py expects 4 parameters.")
  51. print("Usage: ./gen_enclave_config.py <N = number of clients> <M = number of servers> <T = number of threads> <B = message_size>")
  52. exit()
  53. n = int(sys.argv[1])
  54. m = int(sys.argv[2])
  55. t = int(sys.argv[3])
  56. b = int(sys.argv[4])
  57. generate_config(n, m, t, b)