Andrey Epifancev 8e9f53a478 perf: скрипты разбора и сводные данные прогонов 20261026
- perf/analysis: разбор trace (timeline_breakdown), CPU-профилей с source maps
  (cpuprofile_top), heap snapshots (heapdiff), циклов памяти, сравнения масштабов,
  ручной EXPLAIN вложенных запросов (explain_manual), API против X-DB-Time-Ms
  (api_split), сводка горячих точек; тесты ядра в perf/tests/test_analysis.py
- perf/e2e/scenarios/hotspots.spec.ts: CPU-профиль, рендеры React, мутации DOM
  после фильтра, рост CSS-правил по циклам (вне run-all)
- prod-сборка с source maps: PERF_SOURCEMAP=1, perf/stand.sh web-sourcemap (:8082)
- perf/report-data/20261026-s1, 20261026-s2 (summary, sql, analysis, explain-manual),
  t5-types (иллюстрация CPU 6x)
- design.md: решения T10b без обсуждения

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:43:46 +04:00

118 lines
8.6 KiB
JSON

{
"run_id": "20261026-s2",
"scale": 2,
"steps": {
"reset": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T07:54:02+0400",
"end": "2026-10-26T07:54:08+0400",
"duration_s": 6,
"cmd": "'/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/stand.sh' reset"
},
"gen": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T07:54:08+0400",
"end": "2026-10-26T08:49:46+0400",
"duration_s": 3338,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf' && '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.gen.run --scale 2"
},
"verify": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T08:49:46+0400",
"end": "2026-10-26T08:50:06+0400",
"duration_s": 20,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf' && '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.gen.verify --scale 2"
},
"stand": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T08:50:06+0400",
"end": "2026-10-26T08:50:07+0400",
"duration_s": 1,
"cmd": "(curl -fsS -o /dev/null 'http://localhost:8000/healthz' || '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/stand.sh' api) && ([ -f '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.build/prod/index.html' ] || '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/stand.sh' web-build) && (curl -fsS -o /dev/null 'http://localhost:8080/' || '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/stand.sh' web) && curl -fsS 'http://localhost:8080/' | cmp -s - '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.build/prod/index.html' && echo 'web :8080 = prod-сборка' && '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/stand.sh' smoke"
},
"preflight": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T08:50:07+0400",
"end": "2026-10-26T08:50:08+0400",
"duration_s": 1,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/e2e' && for f in scenarios/scroll.spec.ts scenarios/modals.spec.ts; do env -u PERF_TARGETS -u PERF_REPEATS -u PERF_CPU_RATES -u PERF_ROLES -u PERF_AXES -u PERF_MODALS -u PERF_PRIORITY -u PERF_PROFILING -u PERF_SQLSTATS_TAG -u PERF_SQLSTATS -u PERF_COAUTHOR_RATES -u PERF_TRACE -u PERF_RESULTS_DIR -u PERF_MEM_CYCLES -u PERF_MEM_SNAPSHOTS PERF_SCALE=2 PERF_PRIORITY=1,2 npx playwright test --list $f | tail -1 || exit 1; done"
},
"scroll": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T08:50:08+0400",
"end": "2026-10-26T11:19:59+0400",
"duration_s": 8991,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/e2e' && env -u PERF_TARGETS -u PERF_REPEATS -u PERF_CPU_RATES -u PERF_ROLES -u PERF_AXES -u PERF_MODALS -u PERF_PRIORITY -u PERF_PROFILING -u PERF_SQLSTATS_TAG -u PERF_SQLSTATS -u PERF_COAUTHOR_RATES -u PERF_TRACE -u PERF_RESULTS_DIR -u PERF_MEM_CYCLES -u PERF_MEM_SNAPSHOTS PERF_SCALE=2 PERF_RUN_ID=20261026-s2 PERF_WEB=http://localhost:8080 PERF_LOAD_TIMEOUT_MS=2400000 PERF_TEST_TIMEOUT_MS=5400000 PERF_SQLSTATS_TAG=scroll PERF_REPEATS=1 PERF_TRACE=0 npx playwright test scenarios/scroll.spec.ts"
},
"coauthor": {
"status": "SKIP",
"rc": 0,
"start": "2026-10-26T11:19:59+0400",
"end": "2026-10-26T11:19:59+0400",
"duration_s": 0,
"cmd": "scale 1 only"
},
"grow": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T11:19:59+0400",
"end": "2026-10-26T11:22:15+0400",
"duration_s": 136,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf' && '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.gen.grow --scale 2"
},
"modals": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T11:22:15+0400",
"end": "2026-10-26T11:31:24+0400",
"duration_s": 549,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/e2e' && env -u PERF_TARGETS -u PERF_REPEATS -u PERF_CPU_RATES -u PERF_ROLES -u PERF_AXES -u PERF_MODALS -u PERF_PRIORITY -u PERF_PROFILING -u PERF_SQLSTATS_TAG -u PERF_SQLSTATS -u PERF_COAUTHOR_RATES -u PERF_TRACE -u PERF_RESULTS_DIR -u PERF_MEM_CYCLES -u PERF_MEM_SNAPSHOTS PERF_SCALE=2 PERF_RUN_ID=20261026-s2 PERF_WEB=http://localhost:8080 PERF_LOAD_TIMEOUT_MS=2400000 PERF_TEST_TIMEOUT_MS=5400000 PERF_SQLSTATS_TAG=modals PERF_PRIORITY=1,2 npx playwright test scenarios/modals.spec.ts"
},
"modals_profiling": {
"status": "SKIP",
"rc": 0,
"start": "2026-10-26T11:31:24+0400",
"end": "2026-10-26T11:31:24+0400",
"duration_s": 0,
"cmd": "scale 1 only"
},
"memory": {
"status": "SKIP",
"rc": 0,
"start": "2026-10-26T11:31:24+0400",
"end": "2026-10-26T11:31:24+0400",
"duration_s": 0,
"cmd": "scale 1 only"
},
"memtrend": {
"status": "SKIP",
"rc": 0,
"start": "2026-10-26T11:31:25+0400",
"end": "2026-10-26T11:31:25+0400",
"duration_s": 0,
"cmd": "scale 1 only"
},
"bench": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T11:31:25+0400",
"end": "2026-10-26T11:47:44+0400",
"duration_s": 979,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf' && '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.bench 'results/20261026-s2' --repeats 20 --scale 2"
},
"aggregate": {
"status": "OK",
"rc": 0,
"start": "2026-10-26T11:47:44+0400",
"end": "2026-10-26T11:47:44+0400",
"duration_s": 0,
"cmd": "cd '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf' && rm -f '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2/summary.json' && '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.aggregate 'results/20261026-s2' && { [ ! -f 'results/20261026-s2/modal.jsonl' ] || '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/.venv/bin/python' -m perfkit.modals_inventory 'results/20261026-s2'; } && mkdir -p '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2' && for d in results/20261026-s2/sql/*/; do if [ -d \"$d\" ]; then t=$(basename \"$d\"); mkdir -p '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2/sql/'$t || exit 1; if [ -f \"$d\"sql_top.json ]; then cp \"$d\"sql_top.json '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2/sql/'$t/ || exit 1; fi; if [ -d \"$d\"explain ]; then cp -R \"$d\"explain '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2/sql/'$t/ || exit 1; fi; fi; done && for f in results/20261026-s2/memtrend.txt results/manifest-s2.json results/gen-stats-s2.json results/grow-s2.json results/20261026-s2/run-all.status.json; do if [ -f \"$f\" ]; then cp \"$f\" '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2/' || exit 1; fi; done && ls -R '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2' && test -f '/Users/andrey.epifancev/projects/fomichev_claude/DFiP_Budget_planing/.claude/worktrees/perf-profiling/perf/report-data/20261026-s2/summary.json'"
}
}
}