1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 아카이브를 사용했다.
|