@peerbit/stream 5.1.6 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,221 +0,0 @@
1
- import { tcp } from "@libp2p/tcp";
2
- import { TestSession } from "@peerbit/libp2p-test-utils";
3
- import { AcknowledgeDelivery } from "@peerbit/stream-interface";
4
- import { waitForResolved } from "@peerbit/time";
5
- import { DirectStream, waitForNeighbour, } from "../src/index.js";
6
- const modes = ["silent", "ack"];
7
- const envInt = (name, fallback) => {
8
- const value = process.env[name];
9
- if (value == null) {
10
- return fallback;
11
- }
12
- const parsed = Number.parseInt(value, 10);
13
- return Number.isFinite(parsed) ? parsed : fallback;
14
- };
15
- const chunkBytes = Math.max(1, envInt("CHUNK_TRANSFER_CHUNK_BYTES", 262144));
16
- const chunkCount = Math.max(1, envInt("CHUNK_TRANSFER_CHUNKS", 24));
17
- const warmupIterations = Math.max(0, envInt("CHUNK_TRANSFER_WARMUP", 1));
18
- const iterations = Math.max(1, envInt("CHUNK_TRANSFER_ITERATIONS", 3));
19
- const timeoutMs = Math.max(1_000, envInt("CHUNK_TRANSFER_TIMEOUT_MS", 30_000));
20
- class TestStreamImpl extends DirectStream {
21
- constructor(components) {
22
- super(components, ["bench/0.0.0"], {
23
- canRelayMessage: true,
24
- connectionManager: false,
25
- });
26
- }
27
- }
28
- const round = (value, digits = 3) => Number.isFinite(value) ? Number(value.toFixed(digits)) : value;
29
- const average = (values) => values.reduce((sum, value) => sum + value, 0) / values.length;
30
- const summarizeTask = (name, values) => {
31
- const meanMs = average(values);
32
- return {
33
- name,
34
- hz: round(1000 / meanMs, 6),
35
- mean_ms: round(meanMs, 6),
36
- rme: null,
37
- samples: values.length,
38
- };
39
- };
40
- const makePayload = (size, sequence) => {
41
- const payload = new Uint8Array(size);
42
- payload.fill(sequence % 251);
43
- if (size >= 8) {
44
- const view = Buffer.from(payload.buffer, payload.byteOffset, payload.byteLength);
45
- view.writeUInt32BE(sequence >>> 0, 0);
46
- view.writeUInt32BE((sequence ^ 0x9e3779b9) >>> 0, 4);
47
- }
48
- return payload;
49
- };
50
- const readSequence = (data) => {
51
- if (data.byteLength < 8) {
52
- return null;
53
- }
54
- const view = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
55
- return view.readUInt32BE(0);
56
- };
57
- const waitForPayloadBatch = (receiver, startSequence, count, timeout) => new Promise((resolve, reject) => {
58
- const pending = new Set();
59
- for (let i = 0; i < count; i++) {
60
- pending.add(startSequence + i);
61
- }
62
- const timer = setTimeout(() => {
63
- cleanup();
64
- reject(new Error(`Timed out waiting for payload batch start=${startSequence} count=${count} pending=${pending.size}`));
65
- }, timeout);
66
- const onData = (event) => {
67
- const data = event.detail.data;
68
- const sequence = readSequence(data);
69
- if (sequence == null || !pending.has(sequence)) {
70
- return;
71
- }
72
- pending.delete(sequence);
73
- if (pending.size === 0) {
74
- cleanup();
75
- resolve();
76
- }
77
- };
78
- const cleanup = () => {
79
- clearTimeout(timer);
80
- receiver.removeEventListener("data", onData);
81
- };
82
- receiver.addEventListener("data", onData);
83
- });
84
- const modeOptions = (mode, receiver) => mode === "ack"
85
- ? {
86
- mode: new AcknowledgeDelivery({
87
- redundancy: 1,
88
- to: [receiver.publicKey],
89
- }),
90
- }
91
- : {
92
- to: [receiver.publicKey],
93
- };
94
- const runIteration = async (sender, receiver, mode, startSequence) => {
95
- const payloads = Array.from({ length: chunkCount }, (_, index) => makePayload(chunkBytes, startSequence + index));
96
- const startedAt = performance.now();
97
- let receiverCompleteMs = 0;
98
- const receivePromise = waitForPayloadBatch(receiver, startSequence, payloads.length, timeoutMs).then(() => {
99
- receiverCompleteMs = performance.now() - startedAt;
100
- });
101
- for (const payload of payloads) {
102
- await sender.publish(payload, modeOptions(mode, receiver));
103
- }
104
- const senderCompleteMs = performance.now() - startedAt;
105
- await receivePromise;
106
- return {
107
- senderCompleteMs,
108
- receiverCompleteMs,
109
- senderAfterReceiverMs: Math.max(0, senderCompleteMs - receiverCompleteMs),
110
- receiverAfterSenderMs: Math.max(0, receiverCompleteMs - senderCompleteMs),
111
- };
112
- };
113
- const prepareSession = async () => {
114
- const session = await TestSession.disconnected(4, {
115
- transports: [tcp()],
116
- services: { directstream: (c) => new TestStreamImpl(c) },
117
- });
118
- await session.connect([
119
- [session.peers[0], session.peers[1]],
120
- [session.peers[1], session.peers[2]],
121
- [session.peers[2], session.peers[3]],
122
- ]);
123
- const stream = (i) => session.peers[i].services.directstream;
124
- await waitForNeighbour(stream(0), stream(1));
125
- await waitForNeighbour(stream(1), stream(2));
126
- await waitForNeighbour(stream(2), stream(3));
127
- await stream(0).publish(new Uint8Array([1, 2, 3, 4]), {
128
- mode: new AcknowledgeDelivery({
129
- redundancy: 1,
130
- to: [stream(3).publicKey],
131
- }),
132
- });
133
- await waitForResolved(() => stream(0).routes.isReachable(stream(0).publicKeyHash, stream(3).publicKeyHash));
134
- return {
135
- session,
136
- sender: stream(0),
137
- receiver: stream(3),
138
- };
139
- };
140
- const runMode = async (mode) => {
141
- let sequence = 1_000;
142
- const { session, sender, receiver } = await prepareSession();
143
- const samples = [];
144
- try {
145
- for (let i = 0; i < warmupIterations; i++) {
146
- await runIteration(sender, receiver, mode, sequence);
147
- sequence += chunkCount;
148
- }
149
- for (let i = 0; i < iterations; i++) {
150
- samples.push(await runIteration(sender, receiver, mode, sequence));
151
- sequence += chunkCount;
152
- }
153
- }
154
- finally {
155
- await session.stop();
156
- }
157
- return samples;
158
- };
159
- const results = await Promise.all(modes.map(async (mode) => ({
160
- mode,
161
- samples: await runMode(mode),
162
- })));
163
- const totalBytes = chunkBytes * chunkCount;
164
- const totalMb = totalBytes / (1024 * 1024);
165
- const tasks = [];
166
- for (const result of results) {
167
- tasks.push(summarizeTask(`${result.mode}: sender-complete`, result.samples.map((sample) => sample.senderCompleteMs)));
168
- tasks.push(summarizeTask(`${result.mode}: receiver-complete`, result.samples.map((sample) => sample.receiverCompleteMs)));
169
- tasks.push(summarizeTask(`${result.mode}: sender-after-receiver`, result.samples.map((sample) => sample.senderAfterReceiverMs)));
170
- tasks.push(summarizeTask(`${result.mode}: receiver-after-sender`, result.samples.map((sample) => sample.receiverAfterSenderMs)));
171
- }
172
- const output = {
173
- name: "chunk-transfer",
174
- tasks,
175
- meta: {
176
- chunkBytes,
177
- chunkCount,
178
- totalBytes,
179
- totalMb: round(totalMb, 3),
180
- hops: 3,
181
- warmupIterations,
182
- iterations,
183
- timeoutMs,
184
- results: results.map((result) => ({
185
- mode: result.mode,
186
- senderCompleteMsAvg: round(average(result.samples.map((sample) => sample.senderCompleteMs))),
187
- receiverCompleteMsAvg: round(average(result.samples.map((sample) => sample.receiverCompleteMs))),
188
- senderAfterReceiverMsAvg: round(average(result.samples.map((sample) => sample.senderAfterReceiverMs))),
189
- receiverAfterSenderMsAvg: round(average(result.samples.map((sample) => sample.receiverAfterSenderMs))),
190
- senderMbPerSecondAvg: round(average(result.samples.map((sample) => totalMb / (sample.senderCompleteMs / 1000)))),
191
- receiverMbPerSecondAvg: round(average(result.samples.map((sample) => totalMb / (sample.receiverCompleteMs / 1000)))),
192
- samples: result.samples.map((sample) => ({
193
- senderCompleteMs: round(sample.senderCompleteMs),
194
- receiverCompleteMs: round(sample.receiverCompleteMs),
195
- senderAfterReceiverMs: round(sample.senderAfterReceiverMs),
196
- receiverAfterSenderMs: round(sample.receiverAfterSenderMs),
197
- })),
198
- })),
199
- },
200
- };
201
- if (process.env.BENCH_JSON === "1") {
202
- await new Promise((resolve, reject) => {
203
- process.stdout.write(JSON.stringify(output, null, 2), (error) => {
204
- if (error) {
205
- reject(error);
206
- return;
207
- }
208
- resolve();
209
- });
210
- });
211
- }
212
- else {
213
- console.table(tasks.map((task) => ({
214
- task: task.name,
215
- mean_ms: task.mean_ms,
216
- ops_s: round(task.hz, 3),
217
- samples: task.samples,
218
- })));
219
- }
220
- process.exit(0);
221
- //# sourceMappingURL=chunk-transfer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-transfer.js","sourceRoot":"","sources":["../../benchmark/chunk-transfer.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * In-memory "real DirectStream" simulator.
3
- *
4
- * Goal: run most of @peerbit/stream's real logic (routing, ACK learning, dialer,
5
- * pruning) but swap the underlying libp2p transport for a lightweight, in-memory
6
- * shim so we can explore 100s–1000s of nodes.
7
- *
8
- * Run:
9
- * node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 200 --degree 4 --messages 20 --targets 5 --redundancy 2 --seed 1
10
- */
11
- export {};
12
- //# sourceMappingURL=directstream-sim.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directstream-sim.d.ts","sourceRoot":"","sources":["../../benchmark/directstream-sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,299 +0,0 @@
1
- /**
2
- * In-memory "real DirectStream" simulator.
3
- *
4
- * Goal: run most of @peerbit/stream's real logic (routing, ACK learning, dialer,
5
- * pruning) but swap the underlying libp2p transport for a lightweight, in-memory
6
- * shim so we can explore 100s–1000s of nodes.
7
- *
8
- * Run:
9
- * node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 200 --degree 4 --messages 20 --targets 5 --redundancy 2 --seed 1
10
- */
11
- import { AcknowledgeDelivery } from "@peerbit/stream-interface";
12
- import { PreHash, SignatureWithKey } from "@peerbit/crypto";
13
- import { delay } from "@peerbit/time";
14
- import { DirectStream } from "../src/index.js";
15
- import { InMemoryConnectionManager, InMemoryNetwork, } from "@peerbit/libp2p-test-utils/inmemory-libp2p.js";
16
- const mulberry32 = (seed) => {
17
- let t = seed >>> 0;
18
- return () => {
19
- t += 0x6d2b79f5;
20
- let x = t;
21
- x = Math.imul(x ^ (x >>> 15), x | 1);
22
- x ^= x + Math.imul(x ^ (x >>> 7), x | 61);
23
- return ((x ^ (x >>> 14)) >>> 0) / 4294967296;
24
- };
25
- };
26
- const int = (rng, maxExclusive) => Math.floor(rng() * maxExclusive);
27
- const pickDistinct = (rng, n, k, exclude) => {
28
- const out = new Set();
29
- while (out.size < k) {
30
- const candidate = int(rng, n);
31
- if (candidate === exclude)
32
- continue;
33
- out.add(candidate);
34
- }
35
- return [...out];
36
- };
37
- const buildRandomGraph = (n, targetDegree, rng) => {
38
- if (n <= 0)
39
- throw new Error("nodes must be > 0");
40
- if (targetDegree < 0)
41
- throw new Error("degree must be >= 0");
42
- if (targetDegree >= n) {
43
- throw new Error("degree must be < nodes for a simple graph");
44
- }
45
- const adj = Array.from({ length: n }, () => new Set());
46
- const degree = new Uint16Array(n);
47
- const connect = (a, b) => {
48
- if (a === b)
49
- return false;
50
- if (adj[a].has(b))
51
- return false;
52
- if (degree[a] >= targetDegree || degree[b] >= targetDegree)
53
- return false;
54
- adj[a].add(b);
55
- adj[b].add(a);
56
- degree[a] += 1;
57
- degree[b] += 1;
58
- return true;
59
- };
60
- // Seed connectivity.
61
- if (targetDegree >= 2 && n >= 3) {
62
- for (let i = 0; i < n; i++)
63
- connect(i, (i + 1) % n);
64
- }
65
- else if (targetDegree >= 1 && n >= 2) {
66
- for (let i = 0; i < n - 1; i++)
67
- connect(i, i + 1);
68
- }
69
- const available = [];
70
- const pos = new Int32Array(n).fill(-1);
71
- for (let i = 0; i < n; i++) {
72
- if (degree[i] < targetDegree) {
73
- pos[i] = available.length;
74
- available.push(i);
75
- }
76
- }
77
- const removeAvailable = (id) => {
78
- const p = pos[id];
79
- if (p < 0)
80
- return;
81
- const last = available.pop();
82
- if (last !== id) {
83
- available[p] = last;
84
- pos[last] = p;
85
- }
86
- pos[id] = -1;
87
- };
88
- const maxAttempts = n * Math.max(1, targetDegree) * 200;
89
- let attempts = 0;
90
- while (available.length > 1 && attempts < maxAttempts) {
91
- attempts++;
92
- const a = available[int(rng, available.length)];
93
- const b = available[int(rng, available.length)];
94
- if (a === b)
95
- continue;
96
- if (!connect(a, b))
97
- continue;
98
- if (degree[a] >= targetDegree)
99
- removeAvailable(a);
100
- if (degree[b] >= targetDegree)
101
- removeAvailable(b);
102
- }
103
- return adj.map((s) => [...s]);
104
- };
105
- class SimDirectStream extends DirectStream {
106
- constructor(c, opts) {
107
- super(c, ["sim/stream/0.0.0"], {
108
- canRelayMessage: true,
109
- connectionManager: {
110
- // Keep it simple by default; can be expanded later.
111
- dialer: opts.dialer ? { retryDelay: 1_000 } : false,
112
- pruner: opts.pruner
113
- ? {
114
- interval: opts.prunerIntervalMs,
115
- maxBuffer: opts.prunerMaxBufferBytes,
116
- }
117
- : false,
118
- maxConnections: Number.MAX_SAFE_INTEGER,
119
- minConnections: 0,
120
- },
121
- });
122
- // Fast/mock signing: we only need the signer identity to flow through the
123
- // signatures list for routing semantics; crypto verification is skipped.
124
- this.sign = async () => new SignatureWithKey({
125
- signature: new Uint8Array([0]),
126
- publicKey: this.publicKey,
127
- prehash: PreHash.NONE,
128
- });
129
- }
130
- async verifyAndProcess(message) {
131
- // Skip expensive crypto verify for large sims, but keep session handling
132
- // behavior consistent with the real implementation.
133
- const from = message.header.signatures.publicKeys[0];
134
- if (this.peers.has(from.hashcode())) {
135
- // do nothing
136
- }
137
- else {
138
- this.updateSession(from, Number(message.header.session));
139
- }
140
- return true;
141
- }
142
- }
143
- const parseArgs = (argv) => {
144
- const get = (key) => {
145
- const idx = argv.indexOf(key);
146
- if (idx === -1)
147
- return undefined;
148
- return argv[idx + 1];
149
- };
150
- if (argv.includes("--help") || argv.includes("-h")) {
151
- console.log([
152
- "directstream-sim.ts",
153
- "",
154
- "Args:",
155
- " --nodes N number of nodes (default: 200)",
156
- " --degree K target undirected degree (default: 4)",
157
- " --messages M number of seek waves (default: 20)",
158
- " --targets T targets per message (default: 5)",
159
- " --redundancy R seek redundancy (default: 2)",
160
- " --seed S RNG seed (default: 1)",
161
- " --dialer 0|1 enable autodial (default: 1)",
162
- " --pruner 0|1 enable pruning (default: 0)",
163
- " --prunerIntervalMs X pruner interval (default: 50)",
164
- " --prunerMaxBufferBytes B prune when queued bytes > B (default: 65536)",
165
- " --dialDelayMs X artificial dial delay (default: 0)",
166
- " --streamRxDelayMs X per-chunk inbound delay in shim (default: 0)",
167
- " --streamHighWaterMarkBytes B backpressure threshold (default: 262144)",
168
- "",
169
- "Example:",
170
- " node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 500 --degree 6 --messages 50 --targets 20 --redundancy 2 --seed 42",
171
- ].join("\n"));
172
- process.exit(0);
173
- }
174
- return {
175
- nodes: Number(get("--nodes") ?? 200),
176
- degree: Number(get("--degree") ?? 4),
177
- messages: Number(get("--messages") ?? 20),
178
- targetsPerMessage: Number(get("--targets") ?? 5),
179
- redundancy: Number(get("--redundancy") ?? 2),
180
- seed: Number(get("--seed") ?? 1),
181
- dialer: String(get("--dialer") ?? "1") !== "0",
182
- pruner: String(get("--pruner") ?? "0") === "1",
183
- prunerIntervalMs: Number(get("--prunerIntervalMs") ?? 50),
184
- prunerMaxBufferBytes: Number(get("--prunerMaxBufferBytes") ?? 64 * 1024),
185
- dialDelayMs: Number(get("--dialDelayMs") ?? 0),
186
- streamRxDelayMs: Number(get("--streamRxDelayMs") ?? 0),
187
- streamHighWaterMarkBytes: Number(get("--streamHighWaterMarkBytes") ?? 256 * 1024),
188
- };
189
- };
190
- const waitForProtocolStreams = async (peers, timeoutMs = 30_000) => {
191
- const start = Date.now();
192
- while (Date.now() - start < timeoutMs) {
193
- let missing = 0;
194
- for (const p of peers) {
195
- const protocols = p.stream.multicodecs;
196
- for (const conn of p.stream.components.connectionManager.getConnections()) {
197
- const streams = conn.streams;
198
- const hasOutbound = streams.some((s) => s.protocol && protocols.includes(s.protocol) && s.direction === "outbound");
199
- const hasInbound = streams.some((s) => s.protocol && protocols.includes(s.protocol) && s.direction === "inbound");
200
- if (!hasOutbound || !hasInbound)
201
- missing++;
202
- }
203
- }
204
- if (missing === 0)
205
- return;
206
- await delay(0);
207
- }
208
- throw new Error("Timeout waiting for protocol streams to become duplex");
209
- };
210
- const main = async () => {
211
- const params = parseArgs(process.argv.slice(2));
212
- const rng = mulberry32(params.seed);
213
- const graph = buildRandomGraph(params.nodes, params.degree, rng);
214
- const network = new InMemoryNetwork({
215
- streamRxDelayMs: params.streamRxDelayMs,
216
- streamHighWaterMarkBytes: params.streamHighWaterMarkBytes,
217
- dialDelayMs: params.dialDelayMs,
218
- });
219
- const peers = [];
220
- const basePort = 30_000;
221
- for (let i = 0; i < params.nodes; i++) {
222
- const port = basePort + i;
223
- const { runtime } = InMemoryNetwork.createPeer({ index: i, port, network });
224
- runtime.connectionManager = new InMemoryConnectionManager(network, runtime);
225
- network.registerPeer(runtime, port);
226
- const components = {
227
- peerId: runtime.peerId,
228
- privateKey: runtime.privateKey,
229
- addressManager: runtime.addressManager,
230
- registrar: runtime.registrar,
231
- connectionManager: runtime.connectionManager,
232
- peerStore: runtime.peerStore,
233
- events: runtime.events,
234
- };
235
- peers.push({
236
- peerId: runtime.peerId,
237
- stream: new SimDirectStream(components, {
238
- dialer: params.dialer,
239
- pruner: params.pruner,
240
- prunerIntervalMs: params.prunerIntervalMs,
241
- prunerMaxBufferBytes: params.prunerMaxBufferBytes,
242
- }),
243
- });
244
- }
245
- await Promise.all(peers.map((p) => p.stream.start()));
246
- // Establish initial graph via dials.
247
- for (let a = 0; a < graph.length; a++) {
248
- for (const b of graph[a]) {
249
- if (b <= a)
250
- continue;
251
- const addrB = peers[b].stream.components.addressManager.getAddresses()[0];
252
- await peers[a].stream.components.connectionManager.openConnection(addrB);
253
- }
254
- }
255
- await waitForProtocolStreams(peers);
256
- let delivered = 0;
257
- for (let i = 0; i < params.messages; i++) {
258
- const source = int(rng, params.nodes);
259
- const targets = pickDistinct(rng, params.nodes, Math.min(params.targetsPerMessage, params.nodes - 1), source);
260
- const to = targets.map((t) => peers[t].stream.publicKey);
261
- await peers[source].stream.publish(new Uint8Array([1]), {
262
- mode: new AcknowledgeDelivery({
263
- to,
264
- redundancy: params.redundancy,
265
- }),
266
- });
267
- delivered += to.length;
268
- }
269
- // Allow any dialer follow-ups / pruning timers to run briefly.
270
- await delay(50);
271
- const m = network.metrics;
272
- let peerEdges = 0;
273
- let neighbourSum = 0;
274
- let routeSum = 0;
275
- for (const p of peers) {
276
- peerEdges += p.stream.components.connectionManager.getConnections().length;
277
- neighbourSum += p.stream.peers.size;
278
- routeSum += p.stream.routes.count();
279
- }
280
- const connectionsNow = peerEdges / 2;
281
- const avgNeighbours = neighbourSum / peers.length;
282
- const avgRoutes = routeSum / peers.length;
283
- const lines = [];
284
- lines.push("stream directstream-sim results");
285
- lines.push(`- nodes: ${params.nodes}, degree: ${params.degree}`);
286
- lines.push(`- messages: ${params.messages}, targets/message: ${params.targetsPerMessage}, redundancy: ${params.redundancy}`);
287
- lines.push(`- dialer: ${params.dialer ? "on" : "off"}, pruner: ${params.pruner ? "on" : "off"} (interval=${params.prunerIntervalMs}ms, maxBuffer=${params.prunerMaxBufferBytes}B)`);
288
- lines.push(`- transport: rxDelay=${params.streamRxDelayMs}ms, hwm=${params.streamHighWaterMarkBytes}B`);
289
- lines.push(`- target deliveries attempted: ${delivered}`);
290
- lines.push(`- connections: opened=${m.connectionsOpened}, closed=${m.connectionsClosed}, dials=${m.dials}`);
291
- lines.push(`- connections now: ${connectionsNow} (avg neighbours/node=${avgNeighbours.toFixed(2)}, avg routes/node=${avgRoutes.toFixed(2)})`);
292
- lines.push(`- protocol streams opened: ${m.streamsOpened}`);
293
- lines.push(`- frames sent: total=${m.framesSent} (data=${m.dataFramesSent}, ack=${m.ackFramesSent}, goodbye=${m.goodbyeFramesSent}, other=${m.otherFramesSent})`);
294
- lines.push(`- bytes sent: ${m.bytesSent}`);
295
- console.log(lines.join("\n"));
296
- await Promise.all(peers.map((p) => p.stream.stop()));
297
- };
298
- await main();
299
- //# sourceMappingURL=directstream-sim.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directstream-sim.js","sourceRoot":"","sources":["../../benchmark/directstream-sim.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Benchmark entrypoint (wired to `pnpm -C packages/transport/stream run bench`).
3
- *
4
- * Examples:
5
- * pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6
6
- * pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4
7
- * pnpm -C packages/transport/stream run bench -- transfer
8
- * pnpm -C packages/transport/stream run bench -- chunk-transfer
9
- */
10
- export {};
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -1,54 +0,0 @@
1
- /**
2
- * Benchmark entrypoint (wired to `pnpm -C packages/transport/stream run bench`).
3
- *
4
- * Examples:
5
- * pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6
6
- * pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4
7
- * pnpm -C packages/transport/stream run bench -- transfer
8
- * pnpm -C packages/transport/stream run bench -- chunk-transfer
9
- */
10
- const argv = process.argv.slice(2);
11
- const bench = argv[0] === "--" ? argv[1] : argv[0];
12
- const usage = () => {
13
- console.log([
14
- "@peerbit/stream benchmarks",
15
- "",
16
- "Usage:",
17
- " pnpm -C packages/transport/stream run bench -- <benchmark> [args]",
18
- "",
19
- "Benchmarks:",
20
- " directstream-sim in-memory DirectStream network sim",
21
- " topology-sim discrete-event topology/routing sim",
22
- " transfer real-libp2p transfer throughput bench",
23
- " chunk-transfer chunked multi-hop transfer bench",
24
- "",
25
- "Examples:",
26
- " pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6",
27
- " pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4",
28
- " pnpm -C packages/transport/stream run bench -- transfer --sizes 262144,1048576 --mode both",
29
- " pnpm -C packages/transport/stream run bench -- chunk-transfer",
30
- ].join("\n"));
31
- };
32
- if (!bench || bench === "--help" || bench === "-h") {
33
- usage();
34
- process.exit(1);
35
- }
36
- switch (bench) {
37
- case "directstream-sim":
38
- await import("./directstream-sim.js");
39
- break;
40
- case "topology-sim":
41
- await import("./topology-sim.js");
42
- break;
43
- case "transfer":
44
- await import("./transfer.js");
45
- break;
46
- case "chunk-transfer":
47
- await import("./chunk-transfer.js");
48
- break;
49
- default:
50
- usage();
51
- process.exit(1);
52
- }
53
- export {};
54
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnD,MAAM,KAAK,GAAG,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CACV;QACC,4BAA4B;QAC5B,EAAE;QACF,QAAQ;QACR,qEAAqE;QACrE,EAAE;QACF,aAAa;QACb,wDAAwD;QACxD,yDAAyD;QACzD,2DAA2D;QAC3D,sDAAsD;QACtD,EAAE;QACF,WAAW;QACX,0FAA0F;QAC1F,uFAAuF;QACvF,8FAA8F;QAC9F,iEAAiE;KACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;IACpD,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,QAAQ,KAAK,EAAE,CAAC;IACf,KAAK,kBAAkB;QACtB,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM;IACP,KAAK,cAAc;QAClB,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAClC,MAAM;IACP,KAAK,UAAU;QACd,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM;IACP,KAAK,gBAAgB;QACpB,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACpC,MAAM;IACP;QACC,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}