123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #!/usr/bin/env python3
- # Compute analytical formulas for the bytes used per epoch by the
- # various modes
- import sympy
- A, R_B, R_N, R, logR, C_B, C_N, C, gamma, circ, P_Delta, \
- DirAuthConsensusMsg, DirAuthENDIVEDiffMsg, DirAuthGetConsensusMsg, \
- DirAuthGetENDIVEDiffMsg, DirAuthUploadDescMsg, DirAuthENDIVEMsg, \
- DirAuthGetENDIVEMsg, DirAuthUploadDescMsg, RelayConsensusMsg, \
- RelayDescMsg, RelayGetConsensusMsg, RelayGetDescMsg, \
- SinglePassCreateCircuitMsgNotLast, SinglePassCreateCircuitMsgLast, \
- SinglePassCreatedCircuitCellLast, SinglePassCreatedCircuitCellMiddle, \
- SinglePassCreatedCircuitCellFirst, TelescopingCreateCircuitMsg, \
- TelescopingCreatedCircuitCell, TelescopingExtendCircuitCell, \
- TelescopingExtendedCircuitCell, VanillaCreateCircuitMsg, \
- VanillaCreatedCircuitCell, VanillaExtendCircuitCell, \
- VanillaExtendedCircuitCell, DirAuthGetConsensusDiffMsg, \
- DirAuthConsensusDiffMsg, RelayGetConsensusDiffMsg, \
- RelayConsensusDiffMsg \
- = sympy.symbols("""
- A, R_B, R_N, R, logR, C_B, C_N, C, gamma, circ, P_Delta,
- DirAuthConsensusMsg, DirAuthENDIVEDiffMsg, DirAuthGetConsensusMsg,
- DirAuthGetENDIVEDiffMsg, DirAuthUploadDescMsg, DirAuthENDIVEMsg,
- DirAuthGetENDIVEMsg, DirAuthUploadDescMsg, RelayConsensusMsg,
- RelayDescMsg, RelayGetConsensusMsg, RelayGetDescMsg,
- SinglePassCreateCircuitMsgNotLast, SinglePassCreateCircuitMsgLast,
- SinglePassCreatedCircuitCellLast, SinglePassCreatedCircuitCellMiddle,
- SinglePassCreatedCircuitCellFirst, TelescopingCreateCircuitMsg,
- TelescopingCreatedCircuitCell, TelescopingExtendCircuitCell,
- TelescopingExtendedCircuitCell, VanillaCreateCircuitMsg,
- VanillaCreatedCircuitCell, VanillaExtendCircuitCell,
- VanillaExtendedCircuitCell, DirAuthGetConsensusDiffMsg,
- DirAuthConsensusDiffMsg, RelayGetConsensusDiffMsg,
- RelayConsensusDiffMsg
- """)
- globalsubs = [
- (A , 9),
- (R_N , R - R_B),
- (R_B , 0.010 * R),
- (C_N , C - C_B),
- (C_B , 0.16 * C),
- (circ , gamma * C),
- (gamma , 8.9),
- (C , 2500000*R/6500),
- (P_Delta, 0.019),
- ]
- # The actual sizes in bytes of each message type were logged by
- # uncommenting this line in network.py:
- # logging.info("%s size %d", type(self).__name__, sz)
- singlepass_merkle_subs = [
- (DirAuthConsensusMsg, 877),
- (DirAuthGetConsensusMsg, 41),
- (DirAuthGetENDIVEMsg, 38),
- (DirAuthGetENDIVEDiffMsg, 42),
- (DirAuthENDIVEDiffMsg, (P_Delta * DirAuthENDIVEMsg).subs(globalsubs)),
- (DirAuthENDIVEMsg, 274 * R),
- (DirAuthUploadDescMsg, 425),
- (RelayConsensusMsg, 873),
- (RelayDescMsg, 415),
- (RelayGetConsensusMsg, 37),
- (RelayGetDescMsg, 32),
- (SinglePassCreateCircuitMsgLast, 187),
- (SinglePassCreateCircuitMsgNotLast, 239),
- (SinglePassCreatedCircuitCellFirst, 1426+82*logR),
- (SinglePassCreatedCircuitCellMiddle, 903+41*logR),
- (SinglePassCreatedCircuitCellLast, 190),
- ]
- singlepass_threshsig_subs = [
- (DirAuthConsensusMsg, 789),
- (DirAuthGetConsensusMsg, 41),
- (DirAuthGetENDIVEMsg, 38),
- (DirAuthGetENDIVEDiffMsg, 42),
- (DirAuthENDIVEDiffMsg, DirAuthENDIVEMsg),
- (DirAuthENDIVEMsg, 348*R),
- (DirAuthUploadDescMsg, 425),
- (RelayConsensusMsg, 784),
- (RelayDescMsg, 415),
- (RelayGetConsensusMsg, 37),
- (RelayGetDescMsg, 32),
- (SinglePassCreateCircuitMsgLast, 187),
- (SinglePassCreateCircuitMsgNotLast, 239),
- (SinglePassCreatedCircuitCellFirst, 1554),
- (SinglePassCreatedCircuitCellMiddle, 969),
- (SinglePassCreatedCircuitCellLast, 190),
- ]
- telescoping_merkle_subs = [
- (DirAuthConsensusMsg, 877),
- (DirAuthGetConsensusMsg, 41),
- (DirAuthGetENDIVEMsg, 38),
- (DirAuthGetENDIVEDiffMsg, 42),
- (DirAuthENDIVEDiffMsg, (P_Delta * DirAuthENDIVEMsg).subs(globalsubs)),
- (DirAuthENDIVEMsg, 234 * R),
- (DirAuthUploadDescMsg, 372),
- (RelayConsensusMsg, 873),
- (RelayGetConsensusMsg, 37),
- (RelayGetDescMsg, 32),
- (RelayDescMsg, 362),
- (TelescopingCreateCircuitMsg, 120),
- (TelescopingCreatedCircuitCell, 179),
- (TelescopingExtendCircuitCell, 122),
- (TelescopingExtendedCircuitCell, 493+41*logR),
- ]
- telescoping_threshsig_subs = [
- (DirAuthConsensusMsg, 789),
- (DirAuthGetConsensusMsg, 41),
- (DirAuthGetENDIVEMsg, 38),
- (DirAuthGetENDIVEDiffMsg, 42),
- (DirAuthENDIVEDiffMsg, DirAuthENDIVEMsg),
- (DirAuthENDIVEMsg, 307*R),
- (DirAuthUploadDescMsg, 372),
- (RelayConsensusMsg, 788),
- (RelayGetConsensusMsg, 37),
- (RelayGetDescMsg, 32),
- (RelayDescMsg, 362),
- (TelescopingCreateCircuitMsg, 120),
- (TelescopingCreatedCircuitCell, 179),
- (TelescopingExtendCircuitCell, 122),
- (TelescopingExtendedCircuitCell, 556),
- ]
- vanilla_subs = [
- (DirAuthConsensusDiffMsg, (P_Delta * DirAuthConsensusMsg).subs(globalsubs)),
- (DirAuthConsensusMsg, RelayConsensusMsg),
- (DirAuthGetConsensusDiffMsg, 45),
- (DirAuthGetConsensusMsg, 41),
- (DirAuthUploadDescMsg, 372),
- (RelayConsensusDiffMsg, (P_Delta * RelayConsensusMsg).subs(globalsubs)),
- (RelayConsensusMsg, 219*R),
- (RelayGetConsensusDiffMsg, 41),
- (RelayGetConsensusMsg, 37),
- (VanillaCreateCircuitMsg, 116),
- (VanillaCreatedCircuitCell, 175),
- (VanillaExtendCircuitCell, 157),
- (VanillaExtendedCircuitCell, 176),
- ]
- # The formulas were output by bytecounts.py
- singlepass_totrelay = \
- R_N * ( DirAuthConsensusMsg + DirAuthENDIVEDiffMsg + DirAuthGetConsensusMsg + DirAuthGetENDIVEDiffMsg + A*DirAuthUploadDescMsg ) \
- + R_B * ( DirAuthConsensusMsg + DirAuthENDIVEMsg + DirAuthGetConsensusMsg + DirAuthGetENDIVEMsg + A*DirAuthUploadDescMsg ) \
- + C * ( RelayConsensusMsg + RelayDescMsg + RelayGetConsensusMsg + RelayGetDescMsg ) \
- + circ * ( 3*SinglePassCreateCircuitMsgNotLast + 2*SinglePassCreateCircuitMsgLast + 2*SinglePassCreatedCircuitCellLast + 2*SinglePassCreatedCircuitCellMiddle + SinglePassCreatedCircuitCellFirst + 20 )
- singlepass_totclient = \
- C * ( RelayConsensusMsg + RelayDescMsg + RelayGetConsensusMsg + RelayGetDescMsg ) \
- + circ * ( SinglePassCreateCircuitMsgNotLast + SinglePassCreatedCircuitCellFirst + 4 )
- telescoping_totrelay = \
- R_N * ( DirAuthConsensusMsg + DirAuthENDIVEDiffMsg + DirAuthGetConsensusMsg + DirAuthGetENDIVEDiffMsg + A*DirAuthUploadDescMsg ) \
- + R_B * ( DirAuthConsensusMsg + DirAuthENDIVEMsg + DirAuthGetConsensusMsg + DirAuthGetENDIVEMsg + A*DirAuthUploadDescMsg ) \
- + C * ( RelayConsensusMsg + RelayDescMsg + RelayGetConsensusMsg + RelayGetDescMsg ) \
- + circ * ( 5*TelescopingCreateCircuitMsg + 5*TelescopingCreatedCircuitCell + 4*TelescopingExtendCircuitCell + 4*TelescopingExtendedCircuitCell + 52 )
- telescoping_totclient = \
- C * ( RelayConsensusMsg + RelayDescMsg + RelayGetConsensusMsg + RelayGetDescMsg ) \
- + circ * ( TelescopingCreateCircuitMsg + TelescopingCreatedCircuitCell + 2*TelescopingExtendCircuitCell + 2*TelescopingExtendedCircuitCell + 20 )
- vanilla_totrelay = \
- R_N * ( DirAuthConsensusDiffMsg + DirAuthGetConsensusDiffMsg + A*DirAuthUploadDescMsg ) \
- + R_B * ( DirAuthConsensusMsg + DirAuthGetConsensusMsg + A*DirAuthUploadDescMsg ) \
- + C_N * ( RelayConsensusDiffMsg + RelayGetConsensusDiffMsg ) \
- + C_B * ( RelayConsensusMsg + RelayGetConsensusMsg ) \
- + circ * ( 5*VanillaCreateCircuitMsg + 5*VanillaCreatedCircuitCell + 4*VanillaExtendCircuitCell + 4*VanillaExtendedCircuitCell + 52 )
- vanilla_totclient = \
- C_N * ( RelayConsensusDiffMsg + RelayGetConsensusDiffMsg ) \
- + C_B * ( RelayConsensusMsg + RelayGetConsensusMsg ) \
- + circ * ( VanillaCreateCircuitMsg + VanillaCreatedCircuitCell + 2*VanillaExtendCircuitCell + 2*VanillaExtendedCircuitCell + 20 )
- # Copy the output into plotdats.py, replacing 'R' by 'x' and 'logR' by
- # 'cail(log(x)/log(2))'
- print('singlepass_merkle_relay =', (singlepass_totrelay/C).subs(globalsubs).subs(singlepass_merkle_subs).simplify())
- print('singlepass_merkle_client =', (singlepass_totclient/C).subs(globalsubs).subs(singlepass_merkle_subs).simplify())
- print('singlepass_threshsig_relay =', (singlepass_totrelay/C).subs(globalsubs).subs(singlepass_threshsig_subs).simplify())
- print('singlepass_threshsig_client =', (singlepass_totclient/C).subs(globalsubs).subs(singlepass_threshsig_subs).simplify())
- print('telescoping_merkle_relay =', (telescoping_totrelay/C).subs(globalsubs).subs(telescoping_merkle_subs).simplify())
- print('telescoping_merkle_client =', (telescoping_totclient/C).subs(globalsubs).subs(telescoping_merkle_subs).simplify())
- print('telescoping_threshsig_relay =', (telescoping_totrelay/C).subs(globalsubs).subs(telescoping_threshsig_subs).simplify())
- print('telescoping_threshsig_client =', (telescoping_totclient/C).subs(globalsubs).subs(telescoping_threshsig_subs).simplify())
- print('vanilla_relay =', (vanilla_totrelay/C).subs(globalsubs).subs(vanilla_subs).simplify())
- print('vanilla_client =', (vanilla_totclient/C).subs(globalsubs).subs(vanilla_subs).simplify())
|