diff options
Diffstat (limited to 'docs/research/051-optional-runtime-metrics.md')
| -rw-r--r-- | docs/research/051-optional-runtime-metrics.md | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/docs/research/051-optional-runtime-metrics.md b/docs/research/051-optional-runtime-metrics.md new file mode 100644 index 0000000..6e8ae1c --- /dev/null +++ b/docs/research/051-optional-runtime-metrics.md @@ -0,0 +1,59 @@ +# 051 — 실행 영역의 계측을 선택형으로 분리 + +마이크로 런타임의 영역마다 최고 사용량과 누적 작업 수를 항상 저장할 필요는 없다. +`retained`, `active`, 예산, 티켓 세대는 안전한 실행에 남기고, 최고치·누적 +접수·읽기·쓰기·충돌·회수·대여 출력 바이트는 `PURE_RUNTIME_METRICS` 빌드에서만 +보관한다. 기본 CLI·TUI·네이티브 앱·TLS 피어는 작은 구조체를 사용한다. 통계 +응답을 제공하는 HTTP 호스트와 계수 검증 테스트는 계측 빌드로 유지했다. +서로 다른 구조체 배치의 오브젝트가 섞이면 초기화 심볼 +`pure_runtime_init`/`pure_runtime_init_metrics`의 차이로 링크가 실패한다. +이 구조체는 외부 ABI가 아니며, 한 실행물의 모든 컴파일 단위에 같은 설정을 써야 한다. + +| Linux AArch64, GCC 14 `-O2` | 기본 | 계측 선택 | +|---|---:|---:| +| `PureRuntime` / 영역 | 128 B | 200 B | +| `runtime.o + evaluate.o`의 `text` | [5,908 B](../../prototypes/connections/results/2026-09-24-compact-runtime/core.json) | 6,076 B | +| 코어 `data` / `bss` | 0 / 0 B | 0 / 0 B | +| 유휴 네이티브 앱 컨트롤러 | 408 B | 480 B | + +[실제 앱 1,000개 세 방식 비교](../../prototypes/workbench/results/2026-09-24-compact-runtime/app-memory-three-way-final.json)는 +동일한 준비된 `routed-layout.pure`·scalar 아카이브·현재 C 코어로 실행했다. +각 앱이 입력 한 건을 처리하고 서로 다른 문서를 저장하며, 다섯 앱은 복원도 했다. +세 방식 모두 입력 1,000건과 저장·복원 1,005건이 성공했고, 종료 시 활성 작업과 +보관 바이트는 0이었다. 세 번 실행한 RSS 증가량의 중앙값은 다음과 같다. + +| 1,000개 실제 앱 | 컨트롤러 / 앱 | 초기화 후 RSS 증가 | 저장 후 RSS 증가 | +|---|---:|---:|---:| +| 이전 상시 작업 슬롯, 작은 코어 | 856 B | 1,200 KiB | 1,264 KiB | +| 호출 중 슬롯, 작은 코어 | 408 B | 752 KiB | 816 KiB | +| 호출 중 슬롯, 계측 코어 | 480 B | 832 KiB | 896 KiB | + +같은 앱과 슬롯 배치에서 계측을 제외하면 컨트롤러는 **72 B/앱**, +측정된 RSS 증가는 1,000개에서 **80 KiB** 낮다. 이전 [049](049-idle-app-work-slots.md)의 +슬롯 절감도 **448 B/앱**, 이번 세 방식 비교에서는 RSS **448 KiB**로 분리된다. +RSS는 페이지 단위의 프로세스 관측값이며 구조체 바이트 수와 정확히 일치하지 않는다. +코어의 `text` 168 B 감소는 오브젝트 측정이고, 전체 앱 실행물·공유 라이브러리· +스택·저장 파일의 크기를 뜻하지 않는다. 계측을 빼면 HTTP 통계와 같은 누적 진단 +정보를 잃으므로, 그 호스트는 계속 선택형 계측을 링크한다. + +현재 소스에서 만든 [소스 편집 CLI](../../prototypes/connections/results/2026-09-24-compact-runtime/source-cli.tar.gz)는 +22,454 B, [고정 정의 CLI](../../prototypes/connections/results/2026-09-24-compact-runtime/cli.tar.gz)는 +12,885 B, [CLI+TUI](../../prototypes/connections/results/2026-09-24-compact-runtime/cli-tui.tar.gz)는 +31,971 B로 압축됐다. 각각 [소스 묶음](../../prototypes/connections/results/2026-09-24-compact-runtime/source-cli-check.json), +[고정 CLI](../../prototypes/connections/results/2026-09-24-compact-runtime/cli-check.json), +[TUI](../../prototypes/connections/results/2026-09-24-compact-runtime/cli-tui-check.json)를 +다른 경로에 풀어 실제 문서 작업으로 확인했다. 압축 크기는 실행 중 메모리와 다르며, +고정 정의 묶음에는 실행 시 `.pure` 수정 기능이 없다. +[기본 호스트](../../prototypes/connections/results/2026-09-24-compact-runtime/default-profile.json), +[고정 정의 호스트](../../prototypes/connections/results/2026-09-24-compact-runtime/fixed-profile.json), +[TUI](../../prototypes/connections/results/2026-09-24-compact-runtime/tui-profile.json)의 +링크된 코드·직접 의존성 검사도 각각 통과했다. 별도 [PTY 재검사](../../prototypes/connections/results/2026-09-24-compact-runtime/tui.json)의 +1 MiB 작업 피크 RSS는 3,168 KiB로 4,096 KiB 상한 이내였다. + +`make -C prototypes/connections check-portable check-core check-async`, `check-release`, +`check-async-server`, `check-tui`, `check-document-peer`가 통과했다. 비동기 HTTP는 +계측된 응답과 작업 회수도 확인했다. 현재 C 소스로 다시 링크한 scalar TLS 피어도 +상호 인증·충돌·재시작 검사를 통과했다. Linux AArch64의 결과이며 macOS 빌드나 +다수 앱의 처리량, 격리 수준을 증명하지 않는다. 이번 환경에는 Zig 0.15.2가 +없어 scalar 아카이브를 재생성하지 못했다. 작성된 C 정의가 현재 소스로 다시 +생성해도 동일한지 검사했고, 세 비교 빌드에 동일한 기존 scalar 아카이브를 사용했다. |
