Skip to content

Instantly share code, notes, and snippets.

@vyzo
Created August 2, 2022 09:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vyzo/77251c89950ef0d9ac422cfce8e5a09e to your computer and use it in GitHub Desktop.
Save vyzo/77251c89950ef0d9ac422cfce8e5a09e to your computer and use it in GitHub Desktop.
Some Preliminary EPISUB results

Some Expirements with Episub

The gossipsub simulator now has experimental support for episub -- see also the discussion in the specs repo.

The episub extension comes with two new control messages, CHOKE and UNCHOKE. Choking a peer means instructing it to not directly forward messages, except self-published through flood publish, even though it remains in the mesh; instead the peer sends gossip. Unchoking a peer means instructing it to resume forwarding messages.

The most interesting aspect of episub is how to decide on choking (and unchoking) a peer; we call this the choking strategy.

In these initial experiments, we test the following strategies for ranking peers:

  • order-avg: peers are ordered by time of delivery of each message; the order average strategy uses the average delivery order.
  • order-median: like above, but the strategy uses the median delivery order.
  • latency-avg: peers are order by latency of delivery, relative to the first delivery of a message.
  • latency-median: like above, but uses the median.
  • latency-p90: like above, but uses the P90 statistic (90th percentile).

The episub choking/unchoking algorithm, as implemented in the simulator, works as follows:

  • there is a warm up period (choke-threshold)where the node simply collects delivery samples; this is expressed as number of heartbeats.
  • after the warmp up period ends, the peer makes a decision with some frequency (choke-frequency), ie every some heartbeats.
  • when a peer makes a decision, it makes the following considerations:
    • a peer is only considered if it has at least a minimum number of samples (choke-min-samples).
    • choking:
      • only choke if there are more than D-choke unchoked peers in the mesh. That means, the effective mesh degree will never be less than D-choke.
      • order the peers per the strategy.
      • select the last slowest unchoked mesh peer and choke it.
    • unchoking:
      • only unchoke a peer if it is faster than some unchoked peer.
      • order the peers per the strategy
      • select the fastest choked mesh peer that is faster than some unchoked peer and unchoke it.
      • if there is no such peer, don't unchoke anyone.

See the implementation in episub.ss.

Simulation Results

  • We run simulations using 100 nodes, with 5, 10, and 20 sources, and peer connectivity of 20 (i.e. each peer is connected randomly to 20 other peers).
  • Network links have a (one-way) latency randomly selected between 10ms and 150ms, with 10% jitter.
  • Messages are sent 1 per second, for 120s (2min) and 300s (5min).
  • The overlay parameters are D=6, D_lo=4, D_hi=12, D-gossip=6, gossip-factor=.25.
  • The choking parameters choke-threshold=30, choke-frequency=15, choke-min-samples=3.
  • We also run the simulation with gossipsub/v1.0 and gossipsub/v1.1 as baselines.

The script used to produce the results is here

Note: I would also like to run bigger simulations (with maybe 1000 nodes), but unfortunately my computer is too slow for that and the simulation begins to lag horribly, even at 250 nodes. If you have a fast enough computer you can try running with more than 100 nodes (you can edit the script). The situation could also significantly improve if the gambit SMP backend was mature enough, but this is currently not the case.

Some Quick Observations

Looking at the simulation outputs, we can make some observations:

  • As expected, it takes a bit of time for episub choking to kick in; the mesh will need about 90s before it is fully choked, which becomes apparent in longer simulations.
  • There is a significant reduction in bandwidth usage, as measured by the number of data messages (!!pubsub.message). This is particularly pronounced in the longer simulations, showing that in production the bandwidth savings could be as big as 50% or more.
  • On the same time, the latency distribution is not particularly impacted, which means that the bandwidth savings exploit redundancy reduction and don't make delivery slower; this is a big win.
  • All 5 choking strategies produce good results; there is a small edge in message reduction for the latency-avg strategy, followed by the latency-median. This suggest that the strategy could be used as the default in production.
  • There is some unchoking happening, which increases as the number of sources increases. This suggests that there should be some logic to handle cases where a node is near or directly connected to busy sources, which could cause some choke fluttering, which is obviously undesirable. Alternatively, we could also identify messages directly originating from the peer and not unchoke on these samples.

Simulation Output

>>> Running simulations with nodes: 100, sources: 5, messages: 60, rng-state: #(1909714116 2260268287 2794071008 2037845734 4107325908 299493725)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 60
sources: 5
publish: 60
deliver: 6000
!!pubsub.connect: 2000
!!gossipsub.graft: 372
!!pubsub.message: 37683
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!gossipsub.ihave: 37236
!!gossipsub.iwant: 272
=== delivery latency histogram ===
     0-100ms	   981	****************
   100-200ms	  4341	************************************************************************
   200-300ms	   618	**********
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 60
sources: 5
publish: 60
deliver: 6000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 40453
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!gossipsub.ihave: 49618
!!gossipsub.iwant: 242
=== delivery latency histogram ===
     0-100ms	  3192	*****************************************************
   100-200ms	  2748	*********************************************
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 60
sources: 5
publish: 60
deliver: 6000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 37306
!!episub.choke: 286
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 4
!!gossipsub.ihave: 53423
!!gossipsub.iwant: 277
=== delivery latency histogram ===
     0-100ms	  2798	**********************************************
   100-200ms	  3141	****************************************************
   200-300ms	     1
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 60
sources: 5
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 37476
!!episub.choke: 287
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 6
!!gossipsub.ihave: 53362
!!gossipsub.iwant: 276
=== delivery latency histogram ===
     0-100ms	  3006	**************************************************
   100-200ms	  2933	************************************************
   200-300ms	     1
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 60
sources: 5
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37393
!!episub.choke: 287
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 6
!!gossipsub.ihave: 53395
!!gossipsub.iwant: 291
=== delivery latency histogram ===
     0-100ms	  3090	***************************************************
   100-200ms	  2850	***********************************************
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 60
sources: 5
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37394
!!episub.choke: 287
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 5
!!gossipsub.ihave: 53351
!!gossipsub.iwant: 252
=== delivery latency histogram ===
     0-100ms	  3172	****************************************************
   100-200ms	  2768	**********************************************
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 60
sources: 5
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37353
!!episub.choke: 287
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 8
!!gossipsub.ihave: 53336
!!gossipsub.iwant: 225
=== delivery latency histogram ===
     0-100ms	  3239	*****************************************************
   100-200ms	  2701	*********************************************
>>> Running simulations with nodes: 100, sources: 5, messages: 120, rng-state: #(2262035721 435381142 1227844784 3659733555 1992566586 45622844)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 120
sources: 5
publish: 120
deliver: 12000
!!pubsub.connect: 2000
!!gossipsub.graft: 371
!!pubsub.message: 74828
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!gossipsub.ihave: 73206
!!gossipsub.iwant: 285
=== delivery latency histogram ===
     0-100ms	  1776	**************
   100-200ms	  8620	************************************************************************
   200-300ms	  1484	************
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 120
sources: 5
publish: 120
deliver: 12000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 80875
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!gossipsub.ihave: 97649
!!gossipsub.iwant: 567
=== delivery latency histogram ===
     0-100ms	  6080	***************************************************
   100-200ms	  5798	************************************************
   200-300ms	     2
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 120
sources: 5
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 59161
!!episub.choke: 421
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 16
!!gossipsub.ihave: 121285
!!gossipsub.iwant: 404
=== delivery latency histogram ===
     0-100ms	  6451	******************************************************
   100-200ms	  5429	*********************************************
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 120
sources: 5
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 59465
!!episub.choke: 423
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 19
!!gossipsub.ihave: 121296
!!gossipsub.iwant: 519
=== delivery latency histogram ===
     0-100ms	  6385	*****************************************************
   100-200ms	  5491	**********************************************
   200-300ms	     4
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 120
sources: 5
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 59067
!!episub.choke: 430
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 26
!!gossipsub.ihave: 121310
!!gossipsub.iwant: 506
=== delivery latency histogram ===
     0-100ms	  6511	******************************************************
   100-200ms	  5369	*********************************************
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 120
sources: 5
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 58922
!!episub.choke: 422
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 15
!!gossipsub.ihave: 121523
!!gossipsub.iwant: 426
=== delivery latency histogram ===
     0-100ms	  5642	***********************************************
   100-200ms	  6230	****************************************************
   200-300ms	     8
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 120
sources: 5
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 58977
!!episub.choke: 433
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 36
!!gossipsub.ihave: 121177
!!gossipsub.iwant: 348
=== delivery latency histogram ===
     0-100ms	  6467	******************************************************
   100-200ms	  5397	*********************************************
   200-300ms	    16
>>> Running simulations with nodes: 100, sources: 5, messages: 300, rng-state: #(307535537 347369200 2483850757 2838693792 139022963 1818071111)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 300
sources: 5
publish: 300
deliver: 30000
!!pubsub.connect: 2000
!!gossipsub.graft: 372
!!pubsub.message: 187973
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!gossipsub.ihave: 181122
!!gossipsub.iwant: 896
=== delivery latency histogram ===
     0-100ms	  4842	****************
   100-200ms	 21909	*************************************************************************
   200-300ms	  2949	*********
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 300
sources: 5
publish: 300
deliver: 30000
!!gossipsub.graft: 371
!!pubsub.connect: 2073
!!pubsub.message: 201390
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!gossipsub.ihave: 241136
!!gossipsub.iwant: 655
=== delivery latency histogram ===
     0-100ms	 15995	*****************************************************
   100-200ms	 13689	**********************************************
   200-300ms	    16
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 300
sources: 5
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 111236
!!episub.choke: 459
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 43
!!gossipsub.ihave: 339134
!!gossipsub.iwant: 529
=== delivery latency histogram ===
     0-100ms	 16279	******************************************************
   100-200ms	 13413	*********************************************
   200-300ms	     8
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 300
sources: 5
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 112242
!!episub.choke: 472
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 54
!!gossipsub.ihave: 339146
!!gossipsub.iwant: 891
=== delivery latency histogram ===
     0-100ms	 13935	**********************************************
   100-200ms	 15693	****************************************************
   200-300ms	    72
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 300
sources: 5
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 111382
!!episub.choke: 492
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 75
!!gossipsub.ihave: 339036
!!gossipsub.iwant: 1461
=== delivery latency histogram ===
     0-100ms	 16477	*******************************************************
   100-200ms	 13220	********************************************
   200-300ms	     3
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 300
sources: 5
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 110387
!!episub.choke: 471
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 53
!!gossipsub.ihave: 339313
!!gossipsub.iwant: 957
=== delivery latency histogram ===
     0-100ms	 15985	*****************************************************
   100-200ms	 13691	**********************************************
   200-300ms	    24
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 300
sources: 5
publish: 300
deliver: 30000
!!gossipsub.graft: 371
!!pubsub.connect: 2073
!!pubsub.message: 110870
!!episub.choke: 528
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 124
!!gossipsub.ihave: 336687
!!gossipsub.iwant: 754
=== delivery latency histogram ===
     0-100ms	 16047	******************************************************
   100-200ms	 13562	*********************************************
   200-300ms	    91
>>> Running simulations with nodes: 100, sources: 10, messages: 60, rng-state: #(3151218757 181760974 437719415 3593321411 1926763591 2368211987)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 60
sources: 10
publish: 60
deliver: 6000
!!pubsub.connect: 2000
!!gossipsub.graft: 374
!!pubsub.message: 37900
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!gossipsub.ihave: 37188
!!gossipsub.iwant: 230
=== delivery latency histogram ===
     0-100ms	   924	***************
   100-200ms	  4394	*************************************************************************
   200-300ms	   622	**********
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 60
sources: 10
publish: 60
deliver: 6000
!!gossipsub.graft: 368
!!pubsub.connect: 2073
!!pubsub.message: 40153
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!gossipsub.ihave: 49598
!!gossipsub.iwant: 198
=== delivery latency histogram ===
     0-100ms	  2822	***********************************************
   100-200ms	  3107	***************************************************
   200-300ms	    11
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 60
sources: 10
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37385
!!episub.choke: 290
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 12
!!gossipsub.ihave: 53197
!!gossipsub.iwant: 173
=== delivery latency histogram ===
     0-100ms	  3404	********************************************************
   100-200ms	  2536	******************************************
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 60
sources: 10
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 37424
!!episub.choke: 291
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 15
!!gossipsub.ihave: 53261
!!gossipsub.iwant: 182
=== delivery latency histogram ===
     0-100ms	  3361	********************************************************
   100-200ms	  2578	******************************************
   200-300ms	     1
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 60
sources: 10
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37372
!!episub.choke: 289
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 10
!!gossipsub.ihave: 53187
!!gossipsub.iwant: 184
=== delivery latency histogram ===
     0-100ms	  3317	*******************************************************
   100-200ms	  2622	*******************************************
   200-300ms	     1
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 60
sources: 10
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37372
!!episub.choke: 289
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 11
!!gossipsub.ihave: 53228
!!gossipsub.iwant: 174
=== delivery latency histogram ===
     0-100ms	  3199	*****************************************************
   100-200ms	  2741	*********************************************
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 60
sources: 10
publish: 60
deliver: 6000
!!gossipsub.graft: 371
!!pubsub.connect: 2073
!!pubsub.message: 37312
!!episub.choke: 289
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 12
!!gossipsub.ihave: 53235
!!gossipsub.iwant: 209
=== delivery latency histogram ===
     0-100ms	  3096	***************************************************
   100-200ms	  2843	***********************************************
   200-300ms	     1
>>> Running simulations with nodes: 100, sources: 10, messages: 120, rng-state: #(3025431964 8168486 3827161923 373689506 1198475513 2481900662)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 120
sources: 10
publish: 120
deliver: 12000
!!pubsub.connect: 2000
!!gossipsub.graft: 371
!!pubsub.message: 75076
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!gossipsub.ihave: 73176
!!gossipsub.iwant: 464
=== delivery latency histogram ===
     0-100ms	  1850	***************
   100-200ms	  8768	*************************************************************************
   200-300ms	  1262	**********
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 120
sources: 10
publish: 120
deliver: 12000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 81019
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!gossipsub.ihave: 97686
!!gossipsub.iwant: 401
=== delivery latency histogram ===
     0-100ms	  6618	*******************************************************
   100-200ms	  5261	********************************************
   200-300ms	     1
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 120
sources: 10
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 60308
!!episub.choke: 451
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 59
!!gossipsub.ihave: 120516
!!gossipsub.iwant: 535
=== delivery latency histogram ===
     0-100ms	  6720	********************************************************
   100-200ms	  5158	*******************************************
   200-300ms	     2
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 120
sources: 10
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 60216
!!episub.choke: 450
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 52
!!gossipsub.ihave: 120617
!!gossipsub.iwant: 490
=== delivery latency histogram ===
     0-100ms	  6461	******************************************************
   100-200ms	  5414	*********************************************
   200-300ms	     5
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 120
sources: 10
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 59724
!!episub.choke: 438
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 45
!!gossipsub.ihave: 120925
!!gossipsub.iwant: 540
=== delivery latency histogram ===
     0-100ms	  6256	****************************************************
   100-200ms	  5621	***********************************************
   200-300ms	     3
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 120
sources: 10
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 60004
!!episub.choke: 449
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 59
!!gossipsub.ihave: 120505
!!gossipsub.iwant: 439
=== delivery latency histogram ===
     0-100ms	  6646	*******************************************************
   100-200ms	  5232	*******************************************
   200-300ms	     2
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 120
sources: 10
publish: 120
deliver: 12000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 59454
!!episub.choke: 439
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 48
!!gossipsub.ihave: 120715
!!gossipsub.iwant: 398
=== delivery latency histogram ===
     0-100ms	  6564	*******************************************************
   100-200ms	  5308	********************************************
   200-300ms	     8
>>> Running simulations with nodes: 100, sources: 10, messages: 300, rng-state: #(1054113798 359887107 4160489176 522646022 639371617 3465482128)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 300
sources: 10
publish: 300
deliver: 30000
!!pubsub.connect: 2000
!!gossipsub.graft: 372
!!pubsub.message: 187555
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!gossipsub.ihave: 181146
!!gossipsub.iwant: 552
=== delivery latency histogram ===
     0-100ms	  4262	**************
   100-200ms	 21357	***********************************************************************
   200-300ms	  4081	*************
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 300
sources: 10
publish: 300
deliver: 30000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 202400
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!gossipsub.ihave: 240978
!!gossipsub.iwant: 833
=== delivery latency histogram ===
     0-100ms	 15628	****************************************************
   100-200ms	 14061	***********************************************
   200-300ms	    11
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 300
sources: 10
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 114581
!!episub.choke: 564
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 157
!!gossipsub.ihave: 336511
!!gossipsub.iwant: 1210
=== delivery latency histogram ===
     0-100ms	 16132	******************************************************
   100-200ms	 13496	*********************************************
   200-300ms	    72
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 300
sources: 10
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 114510
!!episub.choke: 552
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 139
!!gossipsub.ihave: 337571
!!gossipsub.iwant: 802
=== delivery latency histogram ===
     0-100ms	 16295	******************************************************
   100-200ms	 13382	*********************************************
   200-300ms	    23
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 300
sources: 10
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 112808
!!episub.choke: 562
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 158
!!gossipsub.ihave: 337002
!!gossipsub.iwant: 990
=== delivery latency histogram ===
     0-100ms	 16774	********************************************************
   100-200ms	 12916	*******************************************
   200-300ms	    10
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 300
sources: 10
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 112938
!!episub.choke: 567
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 154
!!gossipsub.ihave: 337274
!!gossipsub.iwant: 1099
=== delivery latency histogram ===
     0-100ms	 16347	*******************************************************
   100-200ms	 13323	********************************************
   200-300ms	    30
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 300
sources: 10
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 113134
!!episub.choke: 587
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 182
!!gossipsub.ihave: 336298
!!gossipsub.iwant: 1580
=== delivery latency histogram ===
     0-100ms	 16027	*****************************************************
   100-200ms	 13626	*********************************************
   200-300ms	    47
>>> Running simulations with nodes: 100, sources: 20, messages: 60, rng-state: #(3058947743 2056481636 2600557948 3263983127 1134616589 4050555119)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 60
sources: 20
publish: 60
deliver: 6000
!!pubsub.connect: 2000
!!gossipsub.graft: 372
!!pubsub.message: 37716
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!gossipsub.ihave: 37260
!!gossipsub.iwant: 286
=== delivery latency histogram ===
     0-100ms	   822	*************
   100-200ms	  4478	**************************************************************************
   200-300ms	   640	**********
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 60
sources: 20
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 40654
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!gossipsub.ihave: 49644
!!gossipsub.iwant: 204
=== delivery latency histogram ===
     0-100ms	  3070	***************************************************
   100-200ms	  2870	***********************************************
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 60
sources: 20
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37477
!!episub.choke: 289
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 16
!!gossipsub.ihave: 53416
!!gossipsub.iwant: 180
=== delivery latency histogram ===
     0-100ms	  3106	***************************************************
   100-200ms	  2833	***********************************************
   200-300ms	     1
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 60
sources: 20
publish: 60
deliver: 6000
!!gossipsub.graft: 370
!!pubsub.connect: 2073
!!pubsub.message: 37249
!!episub.choke: 284
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 15
!!gossipsub.ihave: 53357
!!gossipsub.iwant: 158
=== delivery latency histogram ===
     0-100ms	  2395	***************************************
   100-200ms	  3518	**********************************************************
   200-300ms	    27
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 60
sources: 20
publish: 60
deliver: 6000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 37390
!!episub.choke: 288
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 11
!!gossipsub.ihave: 53415
!!gossipsub.iwant: 225
=== delivery latency histogram ===
     0-100ms	  2981	*************************************************
   100-200ms	  2959	*************************************************
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 60
sources: 20
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37555
!!episub.choke: 288
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 13
!!gossipsub.ihave: 53327
!!gossipsub.iwant: 239
=== delivery latency histogram ===
     0-100ms	  3072	***************************************************
   100-200ms	  2867	***********************************************
   200-300ms	     1
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 60
sources: 20
publish: 60
deliver: 6000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 37514
!!episub.choke: 287
!!pubsub.publish: 60
!!gossipsub.prune: 7
!!episub.unchoke: 15
!!gossipsub.ihave: 53333
!!gossipsub.iwant: 231
=== delivery latency histogram ===
     0-100ms	  3035	**************************************************
   100-200ms	  2905	************************************************
>>> Running simulations with nodes: 100, sources: 20, messages: 120, rng-state: #(961840466 2083455974 2427635254 3399819608 3806951367 2451328898)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 120
sources: 20
publish: 120
deliver: 12000
!!pubsub.connect: 2000
!!gossipsub.graft: 372
!!pubsub.message: 75266
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!gossipsub.ihave: 73230
!!gossipsub.iwant: 439
=== delivery latency histogram ===
     0-100ms	  1668	**************
   100-200ms	  8850	**************************************************************************
   200-300ms	  1362	***********
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 120
sources: 20
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2073
!!pubsub.message: 81295
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!gossipsub.ihave: 97764
!!gossipsub.iwant: 389
=== delivery latency histogram ===
     0-100ms	  5715	************************************************
   100-200ms	  6160	***************************************************
   200-300ms	     5
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 120
sources: 20
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 60192
!!episub.choke: 459
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 64
!!gossipsub.ihave: 120882
!!gossipsub.iwant: 358
=== delivery latency histogram ===
     0-100ms	  6436	******************************************************
   100-200ms	  5433	*********************************************
   200-300ms	    11
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 120
sources: 20
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 60441
!!episub.choke: 457
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 60
!!gossipsub.ihave: 120891
!!gossipsub.iwant: 538
=== delivery latency histogram ===
     0-100ms	  6367	*****************************************************
   100-200ms	  5509	**********************************************
   200-300ms	     4
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 120
sources: 20
publish: 120
deliver: 12000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 59963
!!episub.choke: 452
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 59
!!gossipsub.ihave: 120768
!!gossipsub.iwant: 384
=== delivery latency histogram ===
     0-100ms	  6394	*****************************************************
   100-200ms	  5479	**********************************************
   200-300ms	     7
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 120
sources: 20
publish: 120
deliver: 12000
!!gossipsub.graft: 371
!!pubsub.connect: 2072
!!pubsub.message: 60072
!!episub.choke: 455
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 63
!!gossipsub.ihave: 120501
!!gossipsub.iwant: 509
=== delivery latency histogram ===
     0-100ms	  6177	***************************************************
   100-200ms	  5691	***********************************************
   200-300ms	    12
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 120
sources: 20
publish: 120
deliver: 12000
!!gossipsub.graft: 367
!!pubsub.connect: 2073
!!pubsub.message: 58652
!!episub.choke: 440
!!pubsub.publish: 120
!!gossipsub.prune: 7
!!episub.unchoke: 51
!!gossipsub.ihave: 120933
!!gossipsub.iwant: 212
=== delivery latency histogram ===
     0-100ms	  5005	******************************************
   100-200ms	  6809	*********************************************************
   200-300ms	    66
>>> Running simulations with nodes: 100, sources: 20, messages: 300, rng-state: #(1934882194 1655701175 3356742171 3178576292 3674537792 501434862)
+++ gossipsub/v1.0
=== simulation summary ===
nodes: 100
messages: 300
sources: 20
publish: 300
deliver: 30000
!!pubsub.connect: 2000
!!gossipsub.graft: 372
!!pubsub.message: 187663
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!gossipsub.ihave: 181152
!!gossipsub.iwant: 662
=== delivery latency histogram ===
     0-100ms	  4180	**************
   100-200ms	 22146	**************************************************************************
   200-300ms	  3374	***********
+++ gossipsub/v1.1
=== simulation summary ===
nodes: 100
messages: 300
sources: 20
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 203060
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!gossipsub.ihave: 241305
!!gossipsub.iwant: 816
=== delivery latency histogram ===
     0-100ms	 15780	*****************************************************
   100-200ms	 13915	**********************************************
   200-300ms	     5
+++ episub/order-avg
=== simulation summary ===
nodes: 100
messages: 300
sources: 20
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 114331
!!episub.choke: 598
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 188
!!gossipsub.ihave: 336849
!!gossipsub.iwant: 865
=== delivery latency histogram ===
     0-100ms	 16045	******************************************************
   100-200ms	 13623	*********************************************
   200-300ms	    32
+++ episub/order-median
=== simulation summary ===
nodes: 100
messages: 300
sources: 20
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 114525
!!episub.choke: 593
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 182
!!gossipsub.ihave: 337313
!!gossipsub.iwant: 887
=== delivery latency histogram ===
     0-100ms	 15003	**************************************************
   100-200ms	 14651	*************************************************
   200-300ms	    46
+++ episub/latency-avg
=== simulation summary ===
nodes: 100
messages: 300
sources: 20
publish: 300
deliver: 30000
!!gossipsub.graft: 367
!!pubsub.connect: 2073
!!pubsub.message: 112615
!!episub.choke: 592
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 195
!!gossipsub.ihave: 334888
!!gossipsub.iwant: 966
=== delivery latency histogram ===
     0-100ms	 14676	*************************************************
   100-200ms	 14949	**************************************************
   200-300ms	    75
+++ episub/latency-median
=== simulation summary ===
nodes: 100
messages: 300
sources: 20
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 113570
!!episub.choke: 614
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 202
!!gossipsub.ihave: 336267
!!gossipsub.iwant: 624
=== delivery latency histogram ===
     0-100ms	 15821	*****************************************************
   100-200ms	 13829	**********************************************
   200-300ms	    50
+++ episub/latency-p90
=== simulation summary ===
nodes: 100
messages: 300
sources: 20
publish: 300
deliver: 30000
!!gossipsub.graft: 372
!!pubsub.connect: 2072
!!pubsub.message: 114126
!!episub.choke: 630
!!pubsub.publish: 300
!!gossipsub.prune: 7
!!episub.unchoke: 226
!!gossipsub.ihave: 335615
!!gossipsub.iwant: 1044
=== delivery latency histogram ===
     0-100ms	 15943	*****************************************************
   100-200ms	 13731	**********************************************
   200-300ms	    26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment