diff options
| author | eunhhu <[email protected]> | 2026-09-24 17:14:54 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-24 17:14:54 +0100 |
| commit | b1ce1927022d374198441afafeb27199fc8a052a (patch) | |
| tree | 6021f175f4c67ed03b44240eaa2f90d846f12f6f /docs/research/063-real-in-process-routing.md | |
| parent | d34f9426d5317a1948f12f229439946728bc342a (diff) | |
| download | pure-b1ce1927022d374198441afafeb27199fc8a052a.tar.gz pure-b1ce1927022d374198441afafeb27199fc8a052a.zip | |
Establish native micro runtime checkpoint
Diffstat (limited to 'docs/research/063-real-in-process-routing.md')
| -rw-r--r-- | docs/research/063-real-in-process-routing.md | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/research/063-real-in-process-routing.md b/docs/research/063-real-in-process-routing.md new file mode 100644 index 0000000..24296c5 --- /dev/null +++ b/docs/research/063-real-in-process-routing.md @@ -0,0 +1,47 @@ +# 063 — 실제 문서 하나를 같은 프로세스의 여러 실행 영역으로 전달 + +Pure의 출력이 다른 입력이 되는 코어 계약을 실제 앱 데이터로 연결했다. +선택형 [네이티브 `pure-mirror`](../../prototypes/connections/mirror.c)는 +빌드 시 준비한 [`storage.pure`](../../prototypes/connections/examples/storage.pure)를 +사용한다. 원본 저장소·각 대상 저장소는 같은 프로세스의 독립된 `PureRuntime` +영역이다. 원본 문서를 한 번 읽어 매핑하고 `pure_runtime_forward`로 최대 8개 +대상에 전달한다. 대상 호스트의 입력 할당기는 `NULL`로 두었다. 원본 호출자의 +티켓을 대상 실행 전에 해제해도 코어가 매핑을 유지하며, 마지막 대상 완료 후 +영역의 보유 바이트와 작업 슬롯이 0으로 돌아오는 것을 호스트가 확인한다. +대상 파일을 영속화하는 쓰기는 각각 수행한다. **절약한 것은 그 사이의 추가 +입력 버퍼·직렬화**, 전체 저장 바이트나 디스크 쓰기가 아니다. + +[실제 ext4 검사](../../prototypes/connections/results/2026-09-24-in-process-routing/mirror-ext4.json)는 +`editor.pure`로 만든 1 MiB 문서를 두 영역에 전달해 각 최종 본문·리비전을 +새 CLI에서 검사했다. 원본을 한 바이트 수정해도 두 대상은 이전 스냅샷을 +유지했다. 다음 전달에서 한 대상은 리비전 2로 성공하고 다른 대상은 잘못된 +예상 리비전으로 충돌했다. 성공을 되돌리지 않고 대상별 결과를 보고하며, +충돌 대상은 올바른 리비전으로 다시 전달해 복구했다. 두 번째 대상의 키가 +잘못되면 모든 대상의 접수가 끝나기 전에 문서 쓰기를 시작하지 않았다. 빈 문서와 +원본 없음도 확인했다. 최대 8개 대상에도 1 MiB 본문·리비전이 모두 일치했다. +대상 예산을 1,024 B로 제한하면 1 MiB 전달은 문서 쓰기 전에 거절됐고, +예산이 0인 대상에는 빈 문서가 전달됐다. +[같은 시나리오의 임시 저장소 검사](../../prototypes/connections/results/2026-09-24-in-process-routing/mirror-tmp.json)도 통과했다. + +Linux AArch64에서 이 선택형 명령의 링크된 `text`는 **18,538 B**였다. +ext4의 1 MiB 문서를 두 저장소로 전달한 한 실행의 **전체 프로세스 피크 RSS는 +2,144 KiB**였고, 같은 실행기에서 8개 저장소로 전달한 샘플도 2,144 KiB였다. +대상별 예산 장부는 각각 1 MiB를 기록하지만 같은 원본 매핑의 크기를 물리 +메모리로 8번 더하지 않는다. 이 수치에는 libc와 파일 쓰기가 포함되지만 페이지 캐시, +커널 버퍼와 다른 앱은 포함되지 않는다. 기본 실행 코어·기본 CLI 코드에는 +변경이 없다. [ASan·UBSan 실행](../../prototypes/connections/results/2026-09-24-in-process-routing/mirror-sanitized.json)도 +같은 기능 검사를 통과했다. 이 샌드박스에서 LeakSanitizer는 ptrace 때문에 +실행되지 않아 누수 탐지는 그 검사에 포함되지 않는다. + +재현 명령은 `make -C prototypes/connections check-mirror`다. 이 경로는 +**프로세스 내 전달과 수명**의 실제 앱 증거다. 대상 간 원자적 트랜잭션, +강제 격리, 장애 시 자동 재시도, 장기 실행 영역 관리자, 네트워크 성능, +macOS 실행을 증명하지 않는다. 부분 성공을 호출자에게 명확히 보여주는 +것이 현재 계약이다. 이 결과를 일반적인 Kitex 수준 RPC 성능 주장으로 +확장하지 않는다. + +[최신 소스 묶음](../../prototypes/connections/results/2026-09-24-mirror-source/pure-source-preview.tar.gz)은 +170개 파일, 압축 332,792 B다. [분리된 디렉터리의 검증](../../prototypes/connections/results/2026-09-24-mirror-source/source-check-linux-aarch64.json)에서 +C·PTY·실제 전달·저장 형식 내보내기·Linux 릴리스 상한을 다시 통과했고, +독립 생성한 압축 파일의 해시도 일치했다. 앞선 묶음과 비교하면 기존 C·헤더는 +동일하며 새 C 파일은 이 선택형 명령 하나다. |
