--- category: reference tags: [phase-0, benchmarks, infrastructure] last_updated: 2026-03-13 confidence: high --- # Phase 0 — EFS Benchmarks ## Summary All Phase 0 exit criteria pass. Git on EFS via Lambda is viable for the wikibot.io use case. ## Environment - Lambda: Python 3.12, 512MB memory, VPC-attached (us-east-1a) - EFS: One Zone (us-east-1a), encrypted, access point at /wikibot - Git library: dulwich 1.1.0 (pure Python, no binary dependency) - X-Ray: Active tracing enabled ## Results ### Cold Start (5 invocations, forced via env var update) | Metric | Value | |--------|-------| | Mean | 3,407ms | | Median | 3,403ms | | P95 | 3,524ms | | Min | 3,234ms | | Max | 3,524ms | **Target: <5,000ms — PASS** Cold start breakdown (typical): ~2,400ms VPC ENI attach + ~160ms git init + ~600ms commit + ~2ms read + ~40ms log. ### Warm Read (25 invocations) | Metric | Lambda time | Wall time (incl. network) | |--------|-------------|--------------------------| | Mean | 2.07ms | 272ms | | Median | 2.02ms | 270ms | | P95 | 2.46ms | 282ms | **Target: <500ms wall — PASS** Wall time is dominated by Lambda invoke overhead (~270ms), not EFS I/O (~2ms). ### Warm Write (25 invocations) | Metric | Lambda time (init + commit) | |--------|---------------------------| | Mean | 247ms | | Median | 245ms | | P95 | 284ms | **Target: <1,000ms — PASS** ### Concurrent Reads (3 simultaneous, 5 rounds) - 15/15 succeeded, no errors - Mean wall time: 610ms (includes cold starts in early rounds) - Median wall time: 337ms (warm) **PASS — no errors under concurrent read load.** ### Concurrent Writes (5 simultaneous, 3 rounds) - 5/15 succeeded, 10 failed with git lock contention - No data corruption observed **Expected behavior.** dulwich uses file-based locking on the git repo. Concurrent writers are rejected, not queued. In production, writes are serialized through a single API endpoint, so this is not a concern. ## Git Library Decision **dulwich** (pure Python) over gitpython (shells out to `git` binary). Rationale: - Lambda Python 3.12 runtime does not include the `git` binary - Bundling git would add ~30MB and require a Lambda layer or container image - dulwich works with both bare and non-bare repos via its object API and porcelain API - 39MB total package size (dulwich + aws-xray-sdk) — well within Lambda limits ## Implications for Phase 1 - VPC cold starts (~3.4s) exceed the Core Web Vitals LCP "good" threshold of 2.5s. A cold-start page load in the web UI would score "poor" by LCP standards. Provisioned Concurrency ($10-15/mo for 1 warm instance) can eliminate this. - EFS I/O is fast (~2ms read, ~250ms write including git commit). Not a bottleneck. - The ~270ms Lambda invoke overhead dominates read latency. This is inherent to VPC Lambda and acceptable for MCP tool calls. - Concurrent write serialization must be handled at the application layer, not git layer.