1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/usr/bin/python3
- import math
- import sys
- ###############################################################################
- # CONFIGS TO SET:
- CONFIG_FILE = "Enclave/Enclave.config.xml"
- ###############################################################################
- '''
- Generate a manifest file with:
- N: number of clients
- M: number of servers
- T: number of threads for each server
- B: msg_size
- PRIVATE_ROUTE: Private (True) / Public (False) route
- PRO: PRivate Out
- PRI: PRivate In
- PUO: PUblic Out
- PUI: PUblic In
- num_WN_to_precompute: The default num_WN_to_precompute is 12 in App/start.cpp
- '''
- def generate_config(N, M, T, B, PRIVATE_ROUTE=True, PRO=1, PRI=1, PUO=1, PUI=1, num_WN_to_precompute=12):
- cf = open(CONFIG_FILE, 'w+')
- clients_per_server = math.ceil(N/M)
- # Base heap of 2 MB per thread
- heap_size = 2000000 * T
- num_buffers = 5
- num_out_mult = PRO
- if(not(PRIVATE_ROUTE)):
- num_out_mult = PUO
- # Storage and Ingestion data stored per_client = 52 bytes
- heap_size += clients_per_server * (B + 60)
- # 5 Buffers of clients_per_server items of B size each for
- # private routing
- heap_size += (clients_per_server * B * num_buffers) * num_out_mult
- # Additional buffers for public routing
- if(not(PRIVATE_ROUTE)):
- heap_size += (clients_per_server * B * 3) + ((M-1)**2 * B * 4)
- # num_WN_to_precompute times size of each WN
- heap_size += (num_WN_to_precompute * num_out_mult * \
- (clients_per_server * math.ceil(math.log(clients_per_server,2)) * 8))
- heap_size_page_aligned = math.ceil(heap_size/4096) * 4096
- hex_heap_size = hex(heap_size_page_aligned)
- enclave_config = '''<!-- Please refer to User's Guide for the explanation of each field -->
- <EnclaveConfiguration>
- <ProdID>0</ProdID>
- <ISVSVN>0</ISVSVN>
- <StackMaxSize>0x40000</StackMaxSize>
- <HeapMaxSize>{H}</HeapMaxSize>
- <TCSNum>32</TCSNum>
- <TCSPolicy>1</TCSPolicy>
- <DisableDebug>0</DisableDebug>
- <MiscSelect>0</MiscSelect>
- <MiscMask>0xFFFFFFFF</MiscMask>
- </EnclaveConfiguration>
- '''.format(H = str(hex_heap_size))
- #print (enclave_config)
- cf.write(enclave_config)
- cf.close()
- if __name__ == "__main__":
- if(len(sys.argv)!=5):
- print("Incorrect usage!\n")
- print("./gen_enclave_config.py expects 4 parameters.")
- print("Usage: ./gen_enclave_config.py <N = number of clients> <M = number of servers> <T = number of threads> <B = message_size>")
- exit()
- n = int(sys.argv[1])
- m = int(sys.argv[2])
- t = int(sys.argv[3])
- b = int(sys.argv[4])
- generate_config(n, m, t, b)
|