gen_enclave_config.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. PRIVATE_ROUTE: Private (True) / Public (False) route
  15. PRO: PRivate Out
  16. PRI: PRivate In
  17. PUO: PUblic Out
  18. PUI: PUblic In
  19. num_WN_to_precompute: The default num_WN_to_precompute is 12 in App/start.cpp
  20. '''
  21. def get_heap_size(N, M, T, B, PRIVATE_ROUTE=True, PRO=1, PRI=1, PUO=1, PUI=1, num_WN_to_precompute=12):
  22. clients_per_server = math.ceil(N/M)
  23. # Base heap of 2 MB per thread
  24. heap_size = 2000000 * T
  25. num_buffers = 5
  26. num_out_mult = PRO
  27. if(not(PRIVATE_ROUTE)):
  28. num_out_mult = PUO
  29. # Storage and Ingestion data stored per_client = 52 bytes
  30. heap_size += clients_per_server * (B + 60)
  31. # 5 Buffers of clients_per_server items of B size each for
  32. # private routing
  33. heap_size += (clients_per_server * B * num_buffers) * num_out_mult
  34. # Additional buffers for public routing
  35. if(not(PRIVATE_ROUTE)):
  36. heap_size += (clients_per_server * B * 3) + ((M-1)**2 * B * 4)
  37. # num_WN_to_precompute times size of each WN
  38. wn_size = max(clients_per_server, 2*(M-1)**2)
  39. heap_size += (num_WN_to_precompute * num_out_mult * \
  40. (wn_size * math.ceil(math.log(wn_size,2)) * 8))
  41. heap_size_page_aligned = math.ceil(heap_size/4096) * 4096
  42. return heap_size_page_aligned
  43. def generate_config(N, M, T, B, PRIVATE_ROUTE=True, PRO=1, PRI=1, PUO=1, PUI=1, num_WN_to_precompute=12):
  44. cf = open(CONFIG_FILE, 'w+')
  45. heap_size_page_aligned = get_heap_size(N, M, T, B, PRIVATE_ROUTE,
  46. PRO, PRI, PUO, PUI, num_WN_to_precompute)
  47. hex_heap_size = hex(heap_size_page_aligned)
  48. enclave_config = '''<!-- Please refer to User's Guide for the explanation of each field -->
  49. <EnclaveConfiguration>
  50. <ProdID>0</ProdID>
  51. <ISVSVN>0</ISVSVN>
  52. <StackMaxSize>0x40000</StackMaxSize>
  53. <HeapMaxSize>{H}</HeapMaxSize>
  54. <TCSNum>32</TCSNum>
  55. <TCSPolicy>1</TCSPolicy>
  56. <DisableDebug>0</DisableDebug>
  57. <MiscSelect>0</MiscSelect>
  58. <MiscMask>0xFFFFFFFF</MiscMask>
  59. </EnclaveConfiguration>
  60. '''.format(H = hex_heap_size)
  61. #print (enclave_config)
  62. cf.write(enclave_config)
  63. cf.close()
  64. if __name__ == "__main__":
  65. if(len(sys.argv)!=5):
  66. print("Incorrect usage!\n")
  67. print("./gen_enclave_config.py expects 4 parameters.")
  68. print("Usage: ./gen_enclave_config.py <N = number of clients> <M = number of servers> <T = number of threads> <B = message_size>")
  69. exit()
  70. n = int(sys.argv[1])
  71. m = int(sys.argv[2])
  72. t = int(sys.argv[3])
  73. b = int(sys.argv[4])
  74. generate_config(n, m, t, b)