Skip to content

Commit 4bfff22

Browse files
Merge pull request #658 from dao-xyz/codex/fix-part6-shared-log-flakes
perf: optimize ingest path and wire PR benchmarks
2 parents dac5207 + aa9f4d9 commit 4bfff22

File tree

77 files changed

+9925
-709
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+9925
-709
lines changed

.github/workflows/benchmarks.yml

Lines changed: 140 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,39 +63,62 @@ jobs:
6363
const wantAll = argv.includes('all');
6464
const wantSharedLog =
6565
wantAll || argv.includes('shared-log') || argv.includes('sharedlog') || argv.includes('shared');
66-
const wantDocument = wantAll || argv.includes('document') || argv.includes('doc');
66+
const wantTransport =
67+
wantAll ||
68+
argv.includes('transport') ||
69+
argv.includes('stream') ||
70+
argv.includes('transfer') ||
71+
argv.includes('ack');
72+
const wantDocument =
73+
wantAll ||
74+
argv.includes('document') ||
75+
argv.includes('doc') ||
76+
argv.includes('ingest') ||
77+
argv.includes('file-ingest');
6778
6879
const touchedSharedLog = filenames.some(
6980
(p) =>
7081
p.startsWith('packages/programs/data/shared-log/') ||
7182
p.startsWith('packages/utils/rateless-iblt/'),
7283
);
73-
const touchedDocument = filenames.some((p) => p.startsWith('packages/programs/data/document/'));
84+
const touchedIngestStack = filenames.some(
85+
(p) =>
86+
p.startsWith('packages/programs/data/document/') ||
87+
p.startsWith('packages/programs/data/shared-log/') ||
88+
p.startsWith('packages/log/') ||
89+
p.startsWith('packages/transport/stream/') ||
90+
p.startsWith('packages/transport/stream-interface/') ||
91+
p.startsWith('packages/transport/blocks/') ||
92+
p.startsWith('packages/transport/blocks-interface/') ||
93+
p.startsWith('packages/utils/indexer/') ||
94+
p.startsWith('packages/utils/crypto/'),
95+
);
96+
const touchedTransport = filenames.some(
97+
(p) =>
98+
p.startsWith('packages/transport/stream/') ||
99+
p.startsWith('packages/transport/stream-interface/') ||
100+
p.startsWith('packages/utils/crypto/'),
101+
);
74102
75103
const runSharedLog = wantSharedLog || (!hasArgs && touchedSharedLog);
76-
const runDocument = wantDocument || (!hasArgs && touchedDocument);
104+
const runTransport = wantTransport || (!hasArgs && touchedTransport);
105+
const runDocument = wantDocument || (!hasArgs && touchedIngestStack);
77106
78107
core.setOutput('run_shared_log', runSharedLog ? 'true' : 'false');
108+
core.setOutput('run_transport', runTransport ? 'true' : 'false');
79109
core.setOutput('run_document', runDocument ? 'true' : 'false');
80110
81111
const selected = [];
82112
if (runSharedLog) selected.push('shared-log');
113+
if (runTransport) selected.push('transport');
83114
if (runDocument) selected.push('document');
84115
core.setOutput('selected', selected.join(',') || 'none');
85116
core.setOutput('mode', hasArgs ? 'manual' : 'auto');
86117
core.setOutput('args', argv.join(' '));
87118
88-
const runAny = runSharedLog || runDocument;
119+
const runAny = runSharedLog || runTransport || runDocument;
89120
core.setOutput('run_any', runAny ? 'true' : 'false');
90121
91-
let buildFilter = '';
92-
if (runDocument) {
93-
buildFilter = '@peerbit/document...';
94-
} else if (runSharedLog) {
95-
buildFilter = '@peerbit/shared-log...';
96-
}
97-
core.setOutput('build_filter', buildFilter);
98-
99122
- name: Skip forked PRs
100123
if: steps.pr.outputs.same_repo != 'true'
101124
run: |
@@ -145,12 +168,30 @@ jobs:
145168
- name: Build (base)
146169
if: steps.pr.outputs.same_repo == 'true' && steps.pr.outputs.run_any == 'true'
147170
working-directory: bench-base
148-
run: pnpm --filter ${{ steps.pr.outputs.build_filter }} run build
171+
run: |
172+
if [ "${{ steps.pr.outputs.run_shared_log }}" = "true" ]; then
173+
pnpm --filter @peerbit/shared-log... run build
174+
fi
175+
if [ "${{ steps.pr.outputs.run_transport }}" = "true" ]; then
176+
pnpm --filter @peerbit/stream... run build
177+
fi
178+
if [ "${{ steps.pr.outputs.run_document }}" = "true" ]; then
179+
pnpm --filter @peerbit/document... run build
180+
fi
149181
150182
- name: Build (head)
151183
if: steps.pr.outputs.same_repo == 'true' && steps.pr.outputs.run_any == 'true'
152184
working-directory: bench-head
153-
run: pnpm --filter ${{ steps.pr.outputs.build_filter }} run build
185+
run: |
186+
if [ "${{ steps.pr.outputs.run_shared_log }}" = "true" ]; then
187+
pnpm --filter @peerbit/shared-log... run build
188+
fi
189+
if [ "${{ steps.pr.outputs.run_transport }}" = "true" ]; then
190+
pnpm --filter @peerbit/stream... run build
191+
fi
192+
if [ "${{ steps.pr.outputs.run_document }}" = "true" ]; then
193+
pnpm --filter @peerbit/document... run build
194+
fi
154195
155196
- name: Run shared-log benchmarks (base)
156197
if: steps.pr.outputs.same_repo == 'true' && steps.pr.outputs.run_shared_log == 'true'
@@ -202,13 +243,42 @@ jobs:
202243
BENCH_JSON: "1"
203244
DOC_WARMUP: "2"
204245
DOC_ITERATIONS: "10"
246+
FILE_INGEST_WARMUP: "1"
247+
FILE_INGEST_ITERATIONS: "3"
248+
FILE_INGEST_CHUNKS: "24"
249+
FILE_INGEST_CHUNK_BYTES: "262144"
250+
FILE_INGEST_READY_TIMEOUT_MS: "30000"
205251
run: |
206252
mkdir -p "$GITHUB_WORKSPACE/bench-results/base"
207253
if [ -f ./benchmark/document-put.ts ]; then
208254
node --loader ts-node/esm ./benchmark/document-put.ts > "$GITHUB_WORKSPACE/bench-results/base/document-put.json"
209255
else
210256
echo "document-put benchmark not present in base; skipping."
211257
fi
258+
if [ -f ./benchmark/file-ingest.ts ]; then
259+
node --loader ts-node/esm ./benchmark/file-ingest.ts > "$GITHUB_WORKSPACE/bench-results/base/file-ingest.json"
260+
else
261+
echo "file-ingest benchmark not present in base; skipping."
262+
fi
263+
264+
- name: Run transport benchmarks (base)
265+
if: steps.pr.outputs.same_repo == 'true' && steps.pr.outputs.run_transport == 'true'
266+
working-directory: bench-base/packages/transport/stream
267+
env:
268+
NODE_OPTIONS: --no-warnings
269+
BENCH_JSON: "1"
270+
CHUNK_TRANSFER_WARMUP: "1"
271+
CHUNK_TRANSFER_ITERATIONS: "3"
272+
CHUNK_TRANSFER_CHUNKS: "24"
273+
CHUNK_TRANSFER_CHUNK_BYTES: "262144"
274+
CHUNK_TRANSFER_TIMEOUT_MS: "30000"
275+
run: |
276+
mkdir -p "$GITHUB_WORKSPACE/bench-results/base"
277+
if [ -f ./benchmark/chunk-transfer.ts ]; then
278+
node ./dist/benchmark/chunk-transfer.js > "$GITHUB_WORKSPACE/bench-results/base/chunk-transfer.json"
279+
else
280+
echo "chunk-transfer benchmark not present in base; skipping."
281+
fi
212282
213283
- name: Run document benchmarks (head)
214284
if: steps.pr.outputs.same_repo == 'true' && steps.pr.outputs.run_document == 'true'
@@ -218,13 +288,42 @@ jobs:
218288
BENCH_JSON: "1"
219289
DOC_WARMUP: "2"
220290
DOC_ITERATIONS: "10"
291+
FILE_INGEST_WARMUP: "1"
292+
FILE_INGEST_ITERATIONS: "3"
293+
FILE_INGEST_CHUNKS: "24"
294+
FILE_INGEST_CHUNK_BYTES: "262144"
295+
FILE_INGEST_READY_TIMEOUT_MS: "30000"
221296
run: |
222297
mkdir -p "$GITHUB_WORKSPACE/bench-results/head"
223298
if [ -f ./benchmark/document-put.ts ]; then
224299
node --loader ts-node/esm ./benchmark/document-put.ts > "$GITHUB_WORKSPACE/bench-results/head/document-put.json"
225300
else
226301
echo "document-put benchmark not present in head; skipping."
227302
fi
303+
if [ -f ./benchmark/file-ingest.ts ]; then
304+
node --loader ts-node/esm ./benchmark/file-ingest.ts > "$GITHUB_WORKSPACE/bench-results/head/file-ingest.json"
305+
else
306+
echo "file-ingest benchmark not present in head; skipping."
307+
fi
308+
309+
- name: Run transport benchmarks (head)
310+
if: steps.pr.outputs.same_repo == 'true' && steps.pr.outputs.run_transport == 'true'
311+
working-directory: bench-head/packages/transport/stream
312+
env:
313+
NODE_OPTIONS: --no-warnings
314+
BENCH_JSON: "1"
315+
CHUNK_TRANSFER_WARMUP: "1"
316+
CHUNK_TRANSFER_ITERATIONS: "3"
317+
CHUNK_TRANSFER_CHUNKS: "24"
318+
CHUNK_TRANSFER_CHUNK_BYTES: "262144"
319+
CHUNK_TRANSFER_TIMEOUT_MS: "30000"
320+
run: |
321+
mkdir -p "$GITHUB_WORKSPACE/bench-results/head"
322+
if [ -f ./benchmark/chunk-transfer.ts ]; then
323+
node ./dist/benchmark/chunk-transfer.js > "$GITHUB_WORKSPACE/bench-results/head/chunk-transfer.json"
324+
else
325+
echo "chunk-transfer benchmark not present in head; skipping."
326+
fi
228327
229328
- name: Comment results
230329
if: always() && steps.pr.outputs.same_repo == 'true'
@@ -270,9 +369,28 @@ jobs:
270369
base: 'bench-results/base/document-put.json',
271370
head: 'bench-results/head/document-put.json',
272371
},
372+
{
373+
title: 'transport: multi-hop chunk transfer',
374+
base: 'bench-results/base/chunk-transfer.json',
375+
head: 'bench-results/head/chunk-transfer.json',
376+
},
377+
{
378+
title: 'document: chunked file-ingest',
379+
base: 'bench-results/base/file-ingest.json',
380+
head: 'bench-results/head/file-ingest.json',
381+
},
273382
];
274383
275-
const readJson = (file) => JSON.parse(fs.readFileSync(file, 'utf8'));
384+
const readJson = (file) => {
385+
try {
386+
return JSON.parse(fs.readFileSync(file, 'utf8'));
387+
} catch (error) {
388+
return {
389+
tasks: [],
390+
__parseError: error instanceof Error ? error.message : String(error),
391+
};
392+
}
393+
};
276394
277395
const format = (value, digits = 3) => {
278396
if (value === null || value === undefined || Number.isNaN(value)) return '-';
@@ -339,6 +457,13 @@ jobs:
339457
const headJson = headExists ? readJson(suite.head) : { tasks: [] };
340458
body += `### ${suite.title}\n\n`;
341459
body += formatSuite(baseJson, headJson);
460+
if (baseJson.__parseError || headJson.__parseError) {
461+
body += '\n\n';
462+
body += [
463+
baseJson.__parseError ? `base parse error: ${baseJson.__parseError}` : null,
464+
headJson.__parseError ? `head parse error: ${headJson.__parseError}` : null,
465+
].filter(Boolean).join(' • ');
466+
}
342467
body += `\n\n`;
343468
includedSuites += 1;
344469
}

0 commit comments

Comments
 (0)