19 #include <ripple/beast/clock/manual_clock.h>
20 #include <ripple/beast/unit_test.h>
24 #include <boost/algorithm/string/split.hpp>
25 #include <boost/algorithm/string/classification.hpp>
43 bool printHeaders =
false)
50 "DistributedValidators_"
51 "completeTrustCompleteConnectFixedDelay";
53 txLog(prefix +
"_tx.csv", std::ofstream::app),
54 ledgerLog(prefix +
"_ledger.csv", std::ofstream::app);
57 log << prefix <<
"(" << numPeers <<
"," << delay.count() <<
")"
61 BEAST_EXPECT(numPeers >= 1);
64 PeerGroup peers = sim.createGroup(numPeers);
70 peers.connect(peers, delay);
73 TxCollector txCollector;
74 LedgerCollector ledgerCollector;
75 auto colls = makeCollectors(txCollector, ledgerCollector);
76 sim.collectors.add(colls);
87 HeartbeatTimer heart(sim.scheduler);
90 auto peerSelector = makeSelector(peers.begin(),
94 auto txSubmitter = makeSubmitter(ConstantDistribution{
rate.inv()},
95 sim.scheduler.now() + quiet,
96 sim.scheduler.now() + simDuration - quiet,
103 sim.run(simDuration);
109 log <<
"| Peers: "<<
std::setw(2) << peers.size();
111 << duration_cast<milliseconds>(simDuration).count() <<
" ms";
112 log <<
" | Branches: " <<
std::setw(1) << sim.branches();
113 log <<
" | Synchronized: " <<
std::setw(1)
114 << (sim.synchronized() ?
"Y" :
"N");
117 txCollector.report(simDuration, log,
true);
118 ledgerCollector.report(simDuration, log,
false);
121 txCollector.csv(simDuration, txLog, tag, printHeaders);
122 ledgerCollector.csv(simDuration, ledgerLog, tag, printHeaders);
131 bool printHeaders =
false)
138 "DistributedValidators__"
139 "completeTrustScaleFreeConnectFixedDelay";
141 txLog(prefix +
"_tx.csv", std::ofstream::app),
142 ledgerLog(prefix +
"_ledger.csv", std::ofstream::app);
145 log << prefix <<
"(" << numPeers <<
"," << delay.count() <<
")"
149 int const numCNLs =
std::max(
int(1.00 * numPeers), 1);
150 int const minCNLSize =
std::max(
int(0.25 * numCNLs), 1);
151 int const maxCNLSize =
std::max(
int(0.50 * numCNLs), 1);
152 BEAST_EXPECT(numPeers >= 1);
153 BEAST_EXPECT(numCNLs >= 1);
154 BEAST_EXPECT(1 <= minCNLSize
155 && minCNLSize <= maxCNLSize
156 && maxCNLSize <= numPeers);
159 PeerGroup peers = sim.createGroup(numPeers);
166 sample(peers.size(), PowerLawDistribution{1, 3}, sim.rng);
167 randomRankedConnect(peers, ranks, numCNLs,
172 TxCollector txCollector;
173 LedgerCollector ledgerCollector;
174 auto colls = makeCollectors(txCollector, ledgerCollector);
175 sim.collectors.add(colls);
186 HeartbeatTimer heart(sim.scheduler);
189 auto peerSelector = makeSelector(peers.begin(),
193 auto txSubmitter = makeSubmitter(ConstantDistribution{
rate.inv()},
194 sim.scheduler.now() + quiet,
195 sim.scheduler.now() + simDuration - quiet,
202 sim.run(simDuration);
208 log <<
"| Peers: "<<
std::setw(2) << peers.size();
210 << duration_cast<milliseconds>(simDuration).count() <<
" ms";
211 log <<
" | Branches: " <<
std::setw(1) << sim.branches();
212 log <<
" | Synchronized: " <<
std::setw(1)
213 << (sim.synchronized() ?
"Y" :
"N");
216 txCollector.report(simDuration, log,
true);
217 ledgerCollector.report(simDuration, log,
false);
220 txCollector.csv(simDuration, txLog, tag, printHeaders);
221 ledgerCollector.csv(simDuration, ledgerLog, tag, printHeaders);
233 int maxNumValidators = 0;
235 argStream >> maxNumValidators;
236 argStream >> delayCount;
240 log <<
"DistributedValidators: 1 to " << maxNumValidators <<
" Peers"
250 for(
int i = 2; i <= maxNumValidators; i++)
262 for(
int i = 2; i <= maxNumValidators; i++)