docs: add DEVELOPMENT.md with performance testing guide
This commit is contained in:
parent
f6589121da
commit
0219f923e9
66
DEVELOPMENT.md
Normal file
66
DEVELOPMENT.md
Normal file
@ -0,0 +1,66 @@
|
||||
# Development Guide
|
||||
|
||||
## Performance Testing
|
||||
|
||||
### Prerequisites
|
||||
|
||||
Install hey (HTTP load generator) and samply (profiler):
|
||||
|
||||
```bash
|
||||
brew install hey
|
||||
cargo install samply
|
||||
```
|
||||
|
||||
### Benchmark
|
||||
|
||||
```bash
|
||||
# 1. Build release binary
|
||||
make build
|
||||
|
||||
# 2. Start server
|
||||
./target/dx/yggdrasil/release/web/server
|
||||
|
||||
# 3. Run load test (in another terminal)
|
||||
hey -c 100 -n 100000 http://localhost:8080/
|
||||
```
|
||||
|
||||
### Flame Graph
|
||||
|
||||
```bash
|
||||
# 1. Build with debug symbols (required for readable flame graphs)
|
||||
CARGO_PROFILE_RELEASE_DEBUG=1 make build
|
||||
|
||||
# Terminal 1: Start profiling
|
||||
samply record -- ./target/dx/yggdrasil/release/web/server
|
||||
|
||||
# Terminal 2: Wait for server to start, then send load
|
||||
hey -c 100 -n 100000 http://localhost:8080/
|
||||
|
||||
# Terminal 1: Ctrl+C after hey finishes — samply opens flame graph in browser
|
||||
```
|
||||
|
||||
### Key Metrics to Watch
|
||||
|
||||
| Metric | Description |
|
||||
|--------|-------------|
|
||||
| Requests/sec | Throughput |
|
||||
| Average latency | Mean response time |
|
||||
| P99 latency | Tail latency |
|
||||
| Status codes | Error rate (should be 0) |
|
||||
| Latency distribution | Consistency (tight = stable) |
|
||||
|
||||
### Flame Graph Hotspots
|
||||
|
||||
| Expected Hotspot | Code Location | Cause |
|
||||
|------------------|---------------|-------|
|
||||
| SSR rendering | Dioxus framework | Virtual DOM diff + render per request |
|
||||
| `deadpool` connection acquisition | `src/db/mod.rs` | Connection pool contention under concurrency |
|
||||
| `moka` cache lookup | `src/cache.rs` | Cache hit/miss overhead |
|
||||
| `tokio` scheduling | tokio runtime | Async task dispatch |
|
||||
| `serde` serialization | Models | Post/User serialization |
|
||||
|
||||
### Tuning
|
||||
|
||||
- `DB_POOL_SIZE` — increase if `deadpool` / `Semaphore` shows high in flame graph
|
||||
- `SSR_CACHE_SECS` — increase to cache SSR output longer
|
||||
- `TOKIO_WORKER_THREADS` — explicitly set worker thread count
|
||||
Loading…
x
Reference in New Issue
Block a user