@sparkleideas/performance 3.0.0-alpha.7
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.
- package/README.md +256 -0
- package/__tests__/README.md +242 -0
- package/__tests__/attention.test.ts +516 -0
- package/__tests__/benchmarks.test.ts +515 -0
- package/benchmarks/attention/memory-efficiency.bench.ts +569 -0
- package/benchmarks/attention/multi-head-attention.bench.ts +566 -0
- package/benchmarks/startup/agent-spawn.bench.ts +422 -0
- package/benchmarks/startup/cli-cold-start.bench.ts +327 -0
- package/benchmarks/startup/cli-warm-start.bench.ts +277 -0
- package/benchmarks/startup/mcp-server-init.bench.ts +380 -0
- package/docs/ATTENTION.md +277 -0
- package/package.json +29 -0
- package/src/attention-benchmarks.ts +459 -0
- package/src/attention-integration.ts +507 -0
- package/src/examples/flash-attention-demo.ts +160 -0
- package/src/examples/quick-test.ts +62 -0
- package/src/framework/benchmark.ts +583 -0
- package/src/index.ts +63 -0
- package/tmp.json +0 -0
- package/tsconfig.json +9 -0
- package/vitest.config.ts +31 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Cold Start Benchmark
|
|
3
|
+
*
|
|
4
|
+
* Target: <500ms (5x faster than current ~2.5s)
|
|
5
|
+
*
|
|
6
|
+
* Measures the time to start the CLI from a completely cold state,
|
|
7
|
+
* including module loading, initialization, and ready state.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { benchmark, BenchmarkRunner, formatTime, meetsTarget } from '../../src/framework/benchmark.js';
|
|
11
|
+
import { spawn, ChildProcess } from 'child_process';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Test Helpers
|
|
16
|
+
// ============================================================================
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Measure CLI cold start time by spawning a new process
|
|
20
|
+
*/
|
|
21
|
+
async function measureColdStart(command: string, args: string[]): Promise<number> {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
const startTime = performance.now();
|
|
24
|
+
|
|
25
|
+
const child: ChildProcess = spawn(command, args, {
|
|
26
|
+
stdio: 'pipe',
|
|
27
|
+
shell: false, // Security: Avoid shell injection vulnerabilities
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
let output = '';
|
|
31
|
+
|
|
32
|
+
child.stdout?.on('data', (data) => {
|
|
33
|
+
output += data.toString();
|
|
34
|
+
// Check for ready signal
|
|
35
|
+
if (output.includes('Ready') || output.includes('initialized')) {
|
|
36
|
+
const endTime = performance.now();
|
|
37
|
+
child.kill();
|
|
38
|
+
resolve(endTime - startTime);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
child.stderr?.on('data', (data) => {
|
|
43
|
+
output += data.toString();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
child.on('error', reject);
|
|
47
|
+
|
|
48
|
+
child.on('close', () => {
|
|
49
|
+
const endTime = performance.now();
|
|
50
|
+
resolve(endTime - startTime);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Timeout after 10 seconds
|
|
54
|
+
setTimeout(() => {
|
|
55
|
+
child.kill();
|
|
56
|
+
reject(new Error('Cold start timeout'));
|
|
57
|
+
}, 10000);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Simulate module loading overhead
|
|
63
|
+
*/
|
|
64
|
+
async function simulateModuleLoading(): Promise<void> {
|
|
65
|
+
// Simulate loading core modules
|
|
66
|
+
const modules = [
|
|
67
|
+
'commander',
|
|
68
|
+
'chalk',
|
|
69
|
+
'ora',
|
|
70
|
+
'inquirer',
|
|
71
|
+
'fs-extra',
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
for (const mod of modules) {
|
|
75
|
+
// Simulate require overhead
|
|
76
|
+
await new Promise((resolve) => setTimeout(resolve, 1));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Simulate CLI initialization
|
|
82
|
+
*/
|
|
83
|
+
async function simulateCLIInit(): Promise<void> {
|
|
84
|
+
// Configuration loading
|
|
85
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
86
|
+
|
|
87
|
+
// Command registration
|
|
88
|
+
const commands = Array.from({ length: 50 }, (_, i) => `command-${i}`);
|
|
89
|
+
for (const cmd of commands) {
|
|
90
|
+
// Register command
|
|
91
|
+
void cmd;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Plugin loading
|
|
95
|
+
await new Promise((resolve) => setTimeout(resolve, 3));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Benchmark Suite
|
|
100
|
+
// ============================================================================
|
|
101
|
+
|
|
102
|
+
export async function runColdStartBenchmarks(): Promise<void> {
|
|
103
|
+
const runner = new BenchmarkRunner('CLI Cold Start');
|
|
104
|
+
|
|
105
|
+
console.log('\n--- CLI Cold Start Benchmarks ---\n');
|
|
106
|
+
|
|
107
|
+
// Benchmark 1: Module Loading Simulation
|
|
108
|
+
const moduleResult = await runner.run(
|
|
109
|
+
'module-loading',
|
|
110
|
+
async () => {
|
|
111
|
+
await simulateModuleLoading();
|
|
112
|
+
},
|
|
113
|
+
{ iterations: 50 }
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
console.log(`Module Loading: ${formatTime(moduleResult.mean)}`);
|
|
117
|
+
const moduleTarget = meetsTarget('cli-cold-start', moduleResult.mean);
|
|
118
|
+
console.log(` Target (<500ms): ${moduleTarget.met ? 'PASS' : 'FAIL'}`);
|
|
119
|
+
|
|
120
|
+
// Benchmark 2: CLI Initialization
|
|
121
|
+
const initResult = await runner.run(
|
|
122
|
+
'cli-initialization',
|
|
123
|
+
async () => {
|
|
124
|
+
await simulateCLIInit();
|
|
125
|
+
},
|
|
126
|
+
{ iterations: 50 }
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
console.log(`CLI Initialization: ${formatTime(initResult.mean)}`);
|
|
130
|
+
|
|
131
|
+
// Benchmark 3: Lazy Loading Benefits
|
|
132
|
+
const lazyLoadResult = await runner.run(
|
|
133
|
+
'lazy-load-startup',
|
|
134
|
+
async () => {
|
|
135
|
+
// Simulate lazy loading - only load what's needed
|
|
136
|
+
const essentialModules = ['commander'];
|
|
137
|
+
for (const mod of essentialModules) {
|
|
138
|
+
void mod;
|
|
139
|
+
await new Promise((resolve) => setTimeout(resolve, 0.5));
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{ iterations: 100 }
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
console.log(`Lazy Load Startup: ${formatTime(lazyLoadResult.mean)}`);
|
|
146
|
+
|
|
147
|
+
// Benchmark 4: Parallel Module Loading
|
|
148
|
+
const parallelLoadResult = await runner.run(
|
|
149
|
+
'parallel-module-loading',
|
|
150
|
+
async () => {
|
|
151
|
+
// Load modules in parallel
|
|
152
|
+
await Promise.all([
|
|
153
|
+
new Promise((resolve) => setTimeout(resolve, 1)),
|
|
154
|
+
new Promise((resolve) => setTimeout(resolve, 1)),
|
|
155
|
+
new Promise((resolve) => setTimeout(resolve, 1)),
|
|
156
|
+
new Promise((resolve) => setTimeout(resolve, 1)),
|
|
157
|
+
new Promise((resolve) => setTimeout(resolve, 1)),
|
|
158
|
+
]);
|
|
159
|
+
},
|
|
160
|
+
{ iterations: 100 }
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
console.log(`Parallel Module Loading: ${formatTime(parallelLoadResult.mean)}`);
|
|
164
|
+
|
|
165
|
+
// Benchmark 5: Configuration Caching
|
|
166
|
+
const configCacheResult = await runner.run(
|
|
167
|
+
'cached-config-load',
|
|
168
|
+
async () => {
|
|
169
|
+
// Simulate cached configuration load
|
|
170
|
+
const cache = new Map<string, object>();
|
|
171
|
+
cache.set('config', { version: 3, mode: 'production' });
|
|
172
|
+
const config = cache.get('config');
|
|
173
|
+
void config;
|
|
174
|
+
},
|
|
175
|
+
{ iterations: 1000 }
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
console.log(`Cached Config Load: ${formatTime(configCacheResult.mean)}`);
|
|
179
|
+
|
|
180
|
+
// Benchmark 6: Full Cold Start Simulation
|
|
181
|
+
const fullColdStartResult = await runner.run(
|
|
182
|
+
'full-cold-start-simulation',
|
|
183
|
+
async () => {
|
|
184
|
+
// Phase 1: Essential imports (parallel)
|
|
185
|
+
await Promise.all([
|
|
186
|
+
new Promise((resolve) => setTimeout(resolve, 10)),
|
|
187
|
+
new Promise((resolve) => setTimeout(resolve, 10)),
|
|
188
|
+
]);
|
|
189
|
+
|
|
190
|
+
// Phase 2: Configuration
|
|
191
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
192
|
+
|
|
193
|
+
// Phase 3: Minimal command setup
|
|
194
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
195
|
+
},
|
|
196
|
+
{ iterations: 50 }
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
console.log(`Full Cold Start (Optimized): ${formatTime(fullColdStartResult.mean)}`);
|
|
200
|
+
const fullTarget = meetsTarget('cli-cold-start', fullColdStartResult.mean);
|
|
201
|
+
console.log(` Target (<500ms): ${fullTarget.met ? 'PASS' : 'FAIL'}`);
|
|
202
|
+
|
|
203
|
+
// Benchmark 7: V2 vs V3 Comparison Simulation
|
|
204
|
+
const v2SimulationResult = await runner.run(
|
|
205
|
+
'v2-cold-start-simulation',
|
|
206
|
+
async () => {
|
|
207
|
+
// Simulate V2's heavier startup
|
|
208
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
209
|
+
},
|
|
210
|
+
{ iterations: 20 }
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
const v3SimulationResult = await runner.run(
|
|
214
|
+
'v3-cold-start-simulation',
|
|
215
|
+
async () => {
|
|
216
|
+
// Simulate V3's optimized startup
|
|
217
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
218
|
+
},
|
|
219
|
+
{ iterations: 50 }
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
const speedup = v2SimulationResult.mean / v3SimulationResult.mean;
|
|
223
|
+
console.log(`\nV2 vs V3 Speedup: ${speedup.toFixed(2)}x`);
|
|
224
|
+
console.log(` V2 Simulation: ${formatTime(v2SimulationResult.mean)}`);
|
|
225
|
+
console.log(` V3 Simulation: ${formatTime(v3SimulationResult.mean)}`);
|
|
226
|
+
|
|
227
|
+
// Print summary
|
|
228
|
+
runner.printResults();
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// Optimization Strategies
|
|
233
|
+
// ============================================================================
|
|
234
|
+
|
|
235
|
+
export const coldStartOptimizations = {
|
|
236
|
+
/**
|
|
237
|
+
* Lazy loading: Only load modules when needed
|
|
238
|
+
*/
|
|
239
|
+
lazyLoading: {
|
|
240
|
+
description: 'Defer non-essential module loading until first use',
|
|
241
|
+
expectedImprovement: '40-60%',
|
|
242
|
+
implementation: `
|
|
243
|
+
// Instead of:
|
|
244
|
+
import * as allModules from './modules';
|
|
245
|
+
|
|
246
|
+
// Use:
|
|
247
|
+
async function getModule(name) {
|
|
248
|
+
return await import(\`./modules/\${name}\`);
|
|
249
|
+
}
|
|
250
|
+
`,
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Parallel initialization: Initialize independent components concurrently
|
|
255
|
+
*/
|
|
256
|
+
parallelInit: {
|
|
257
|
+
description: 'Initialize independent components in parallel',
|
|
258
|
+
expectedImprovement: '20-40%',
|
|
259
|
+
implementation: `
|
|
260
|
+
// Instead of:
|
|
261
|
+
await initConfig();
|
|
262
|
+
await initLogger();
|
|
263
|
+
await initPlugins();
|
|
264
|
+
|
|
265
|
+
// Use:
|
|
266
|
+
await Promise.all([
|
|
267
|
+
initConfig(),
|
|
268
|
+
initLogger(),
|
|
269
|
+
initPlugins(),
|
|
270
|
+
]);
|
|
271
|
+
`,
|
|
272
|
+
},
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Pre-bundling: Use esbuild/Rollup for faster module resolution
|
|
276
|
+
*/
|
|
277
|
+
preBundling: {
|
|
278
|
+
description: 'Pre-bundle dependencies to reduce require() overhead',
|
|
279
|
+
expectedImprovement: '30-50%',
|
|
280
|
+
implementation: `
|
|
281
|
+
// Build step:
|
|
282
|
+
esbuild --bundle --platform=node --outfile=dist/cli.js
|
|
283
|
+
`,
|
|
284
|
+
},
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Configuration caching: Cache parsed configuration
|
|
288
|
+
*/
|
|
289
|
+
configCaching: {
|
|
290
|
+
description: 'Cache parsed configuration to avoid repeated parsing',
|
|
291
|
+
expectedImprovement: '10-20%',
|
|
292
|
+
implementation: `
|
|
293
|
+
const configCache = new Map();
|
|
294
|
+
|
|
295
|
+
function loadConfig(path) {
|
|
296
|
+
if (configCache.has(path)) {
|
|
297
|
+
return configCache.get(path);
|
|
298
|
+
}
|
|
299
|
+
const config = parseConfig(readFile(path));
|
|
300
|
+
configCache.set(path, config);
|
|
301
|
+
return config;
|
|
302
|
+
}
|
|
303
|
+
`,
|
|
304
|
+
},
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Snapshot: Use V8 startup snapshots for instant loading
|
|
308
|
+
*/
|
|
309
|
+
v8Snapshot: {
|
|
310
|
+
description: 'Use V8 startup snapshots for pre-compiled code',
|
|
311
|
+
expectedImprovement: '50-70%',
|
|
312
|
+
implementation: `
|
|
313
|
+
// Generate snapshot:
|
|
314
|
+
node --snapshot-blob=snapshot.blob --build-snapshot script.js
|
|
315
|
+
|
|
316
|
+
// Run with snapshot:
|
|
317
|
+
node --snapshot-blob=snapshot.blob
|
|
318
|
+
`,
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
// Run if executed directly
|
|
323
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
324
|
+
runColdStartBenchmarks().catch(console.error);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export default runColdStartBenchmarks;
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Warm Start Benchmark
|
|
3
|
+
*
|
|
4
|
+
* Target: <100ms
|
|
5
|
+
*
|
|
6
|
+
* Measures the time to start the CLI when modules are already cached
|
|
7
|
+
* and configuration is pre-loaded.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { benchmark, BenchmarkRunner, formatTime, meetsTarget } from '../../src/framework/benchmark.js';
|
|
11
|
+
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Simulated Components
|
|
14
|
+
// ============================================================================
|
|
15
|
+
|
|
16
|
+
// Simulated module cache
|
|
17
|
+
const moduleCache = new Map<string, object>();
|
|
18
|
+
|
|
19
|
+
// Simulated configuration cache
|
|
20
|
+
const configCache = new Map<string, object>();
|
|
21
|
+
|
|
22
|
+
// Pre-populate caches
|
|
23
|
+
function initializeCaches(): void {
|
|
24
|
+
// Simulate cached modules
|
|
25
|
+
moduleCache.set('commander', { Command: class {} });
|
|
26
|
+
moduleCache.set('chalk', { red: (s: string) => s, green: (s: string) => s });
|
|
27
|
+
moduleCache.set('ora', { default: () => ({ start: () => {}, stop: () => {} }) });
|
|
28
|
+
|
|
29
|
+
// Simulate cached configuration
|
|
30
|
+
configCache.set('main', {
|
|
31
|
+
version: '3.0.0',
|
|
32
|
+
mode: 'production',
|
|
33
|
+
features: ['swarm', 'memory', 'mcp'],
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Get cached module (instant)
|
|
39
|
+
*/
|
|
40
|
+
function getCachedModule(name: string): object | undefined {
|
|
41
|
+
return moduleCache.get(name);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Get cached configuration (instant)
|
|
46
|
+
*/
|
|
47
|
+
function getCachedConfig(name: string): object | undefined {
|
|
48
|
+
return configCache.get(name);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Simulate warm start initialization
|
|
53
|
+
*/
|
|
54
|
+
async function warmStartInit(): Promise<void> {
|
|
55
|
+
// Get cached modules
|
|
56
|
+
getCachedModule('commander');
|
|
57
|
+
getCachedModule('chalk');
|
|
58
|
+
getCachedModule('ora');
|
|
59
|
+
|
|
60
|
+
// Get cached config
|
|
61
|
+
getCachedConfig('main');
|
|
62
|
+
|
|
63
|
+
// Minimal setup
|
|
64
|
+
await Promise.resolve();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ============================================================================
|
|
68
|
+
// Benchmark Suite
|
|
69
|
+
// ============================================================================
|
|
70
|
+
|
|
71
|
+
export async function runWarmStartBenchmarks(): Promise<void> {
|
|
72
|
+
const runner = new BenchmarkRunner('CLI Warm Start');
|
|
73
|
+
|
|
74
|
+
console.log('\n--- CLI Warm Start Benchmarks ---\n');
|
|
75
|
+
|
|
76
|
+
// Initialize caches before benchmarks
|
|
77
|
+
initializeCaches();
|
|
78
|
+
|
|
79
|
+
// Benchmark 1: Cached Module Access
|
|
80
|
+
const moduleAccessResult = await runner.run(
|
|
81
|
+
'cached-module-access',
|
|
82
|
+
async () => {
|
|
83
|
+
getCachedModule('commander');
|
|
84
|
+
getCachedModule('chalk');
|
|
85
|
+
getCachedModule('ora');
|
|
86
|
+
},
|
|
87
|
+
{ iterations: 10000 }
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
console.log(`Cached Module Access: ${formatTime(moduleAccessResult.mean)}`);
|
|
91
|
+
|
|
92
|
+
// Benchmark 2: Cached Config Access
|
|
93
|
+
const configAccessResult = await runner.run(
|
|
94
|
+
'cached-config-access',
|
|
95
|
+
async () => {
|
|
96
|
+
getCachedConfig('main');
|
|
97
|
+
},
|
|
98
|
+
{ iterations: 10000 }
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
console.log(`Cached Config Access: ${formatTime(configAccessResult.mean)}`);
|
|
102
|
+
|
|
103
|
+
// Benchmark 3: Full Warm Start
|
|
104
|
+
const warmStartResult = await runner.run(
|
|
105
|
+
'full-warm-start',
|
|
106
|
+
async () => {
|
|
107
|
+
await warmStartInit();
|
|
108
|
+
},
|
|
109
|
+
{ iterations: 1000 }
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
console.log(`Full Warm Start: ${formatTime(warmStartResult.mean)}`);
|
|
113
|
+
const target = meetsTarget('cli-warm-start', warmStartResult.mean);
|
|
114
|
+
console.log(` Target (<100ms): ${target.met ? 'PASS' : 'FAIL'}`);
|
|
115
|
+
|
|
116
|
+
// Benchmark 4: Command Resolution (Warm)
|
|
117
|
+
const commandResolutionResult = await runner.run(
|
|
118
|
+
'command-resolution-warm',
|
|
119
|
+
async () => {
|
|
120
|
+
const commands = new Map<string, () => void>();
|
|
121
|
+
commands.set('agent', () => {});
|
|
122
|
+
commands.set('swarm', () => {});
|
|
123
|
+
commands.set('memory', () => {});
|
|
124
|
+
|
|
125
|
+
commands.get('swarm');
|
|
126
|
+
},
|
|
127
|
+
{ iterations: 10000 }
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
console.log(`Command Resolution (Warm): ${formatTime(commandResolutionResult.mean)}`);
|
|
131
|
+
|
|
132
|
+
// Benchmark 5: Plugin Activation (Warm)
|
|
133
|
+
const pluginActivationResult = await runner.run(
|
|
134
|
+
'plugin-activation-warm',
|
|
135
|
+
async () => {
|
|
136
|
+
const plugins = new Map<string, { activate: () => void }>();
|
|
137
|
+
plugins.set('mcp', { activate: () => {} });
|
|
138
|
+
plugins.set('hooks', { activate: () => {} });
|
|
139
|
+
|
|
140
|
+
const plugin = plugins.get('mcp');
|
|
141
|
+
plugin?.activate();
|
|
142
|
+
},
|
|
143
|
+
{ iterations: 5000 }
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
console.log(`Plugin Activation (Warm): ${formatTime(pluginActivationResult.mean)}`);
|
|
147
|
+
|
|
148
|
+
// Benchmark 6: Repeat Command Execution
|
|
149
|
+
const repeatCommandResult = await runner.run(
|
|
150
|
+
'repeat-command-execution',
|
|
151
|
+
async () => {
|
|
152
|
+
// Simulate executing a command that was already run
|
|
153
|
+
const executionCache = new Map<string, object>();
|
|
154
|
+
executionCache.set('agent list', { result: [] });
|
|
155
|
+
|
|
156
|
+
const cached = executionCache.get('agent list');
|
|
157
|
+
void cached;
|
|
158
|
+
},
|
|
159
|
+
{ iterations: 10000 }
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
console.log(`Repeat Command (Cached): ${formatTime(repeatCommandResult.mean)}`);
|
|
163
|
+
|
|
164
|
+
// Benchmark 7: State Restoration
|
|
165
|
+
const stateRestorationResult = await runner.run(
|
|
166
|
+
'state-restoration',
|
|
167
|
+
async () => {
|
|
168
|
+
// Restore session state from memory
|
|
169
|
+
const sessionState = {
|
|
170
|
+
agents: [{ id: 'agent-1', status: 'active' }],
|
|
171
|
+
tasks: [{ id: 'task-1', status: 'pending' }],
|
|
172
|
+
memory: new Map([['key1', 'value1']]),
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
// Shallow copy for restoration
|
|
176
|
+
const restored = { ...sessionState };
|
|
177
|
+
void restored;
|
|
178
|
+
},
|
|
179
|
+
{ iterations: 5000 }
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
console.log(`State Restoration: ${formatTime(stateRestorationResult.mean)}`);
|
|
183
|
+
|
|
184
|
+
// Calculate total warm start overhead
|
|
185
|
+
const totalOverhead =
|
|
186
|
+
moduleAccessResult.mean +
|
|
187
|
+
configAccessResult.mean +
|
|
188
|
+
commandResolutionResult.mean;
|
|
189
|
+
|
|
190
|
+
console.log(`\nTotal Warm Start Overhead: ${formatTime(totalOverhead)}`);
|
|
191
|
+
console.log(`Target (<100ms): ${totalOverhead < 100 ? 'PASS' : 'FAIL'}`);
|
|
192
|
+
|
|
193
|
+
// Print summary
|
|
194
|
+
runner.printResults();
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// ============================================================================
|
|
198
|
+
// Warm Start Optimization Strategies
|
|
199
|
+
// ============================================================================
|
|
200
|
+
|
|
201
|
+
export const warmStartOptimizations = {
|
|
202
|
+
/**
|
|
203
|
+
* Module caching: Keep frequently used modules in memory
|
|
204
|
+
*/
|
|
205
|
+
moduleCaching: {
|
|
206
|
+
description: 'Keep frequently used modules in memory between runs',
|
|
207
|
+
expectedImprovement: '80-90%',
|
|
208
|
+
implementation: `
|
|
209
|
+
const moduleCache = new Map();
|
|
210
|
+
|
|
211
|
+
function requireCached(moduleName) {
|
|
212
|
+
if (!moduleCache.has(moduleName)) {
|
|
213
|
+
moduleCache.set(moduleName, require(moduleName));
|
|
214
|
+
}
|
|
215
|
+
return moduleCache.get(moduleName);
|
|
216
|
+
}
|
|
217
|
+
`,
|
|
218
|
+
},
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* State persistence: Keep application state between runs
|
|
222
|
+
*/
|
|
223
|
+
statePersistence: {
|
|
224
|
+
description: 'Persist application state for instant restoration',
|
|
225
|
+
expectedImprovement: '60-80%',
|
|
226
|
+
implementation: `
|
|
227
|
+
// Save state
|
|
228
|
+
process.on('beforeExit', () => {
|
|
229
|
+
saveState(currentState);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Restore state
|
|
233
|
+
const state = loadState() || createDefaultState();
|
|
234
|
+
`,
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Worker pool: Keep worker processes alive
|
|
239
|
+
*/
|
|
240
|
+
workerPool: {
|
|
241
|
+
description: 'Maintain a pool of pre-warmed worker processes',
|
|
242
|
+
expectedImprovement: '70-85%',
|
|
243
|
+
implementation: `
|
|
244
|
+
const workerPool = new WorkerPool({
|
|
245
|
+
min: 2,
|
|
246
|
+
max: 10,
|
|
247
|
+
idleTimeout: 60000,
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// Reuse workers instead of spawning new ones
|
|
251
|
+
const worker = await workerPool.acquire();
|
|
252
|
+
`,
|
|
253
|
+
},
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Connection pooling: Reuse network connections
|
|
257
|
+
*/
|
|
258
|
+
connectionPooling: {
|
|
259
|
+
description: 'Maintain connection pools for MCP and other services',
|
|
260
|
+
expectedImprovement: '50-70%',
|
|
261
|
+
implementation: `
|
|
262
|
+
const connectionPool = new ConnectionPool({
|
|
263
|
+
maxConnections: 10,
|
|
264
|
+
idleTimeout: 30000,
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
const connection = await connectionPool.acquire('mcp-server');
|
|
268
|
+
`,
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
// Run if executed directly
|
|
273
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
274
|
+
runWarmStartBenchmarks().catch(console.error);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export default runWarmStartBenchmarks;
|