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/040-document-service-capacity.md | |
| parent | d34f9426d5317a1948f12f229439946728bc342a (diff) | |
| download | pure-b1ce1927022d374198441afafeb27199fc8a052a.tar.gz pure-b1ce1927022d374198441afafeb27199fc8a052a.zip | |
Establish native micro runtime checkpoint
Diffstat (limited to 'docs/research/040-document-service-capacity.md')
| -rw-r--r-- | docs/research/040-document-service-capacity.md | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/docs/research/040-document-service-capacity.md b/docs/research/040-document-service-capacity.md new file mode 100644 index 0000000..4016089 --- /dev/null +++ b/docs/research/040-document-service-capacity.md @@ -0,0 +1,48 @@ +# 040 — 한 문서 앱의 다중 객체·동시 요청 용량 확인 + +2026-09-24. 작은 코어와 한 문서 예제만으로 서비스 규모의 메모리 특성을 +판단할 수 없다. 기존 `editor.pure`를 그대로 사용하고, 소스 정의 HTTP 호스트와 +빌드 시 준비한 고정 정의 HTTP 호스트에 동일한 앱 작업을 실행했다. 새 런타임 +타입이나 전용 저장 형식을 추가하지 않았다. + +[재현 검사](../../prototypes/connections/check_service_scale.py)는 각 호스트에 +**8개 클라이언트**를 연결해 **1,024개 키**를 분담한다. 키마다 8,192 B 문서를 +생성하고, 읽고, 마지막 1 B를 조건부 수정하고, 새 버전을 다시 읽는다. +각 응답의 상태·버전·본문을 검증하고, 두 호스트가 만든 모든 최종 문서의 +해시를 비교한다. 호스트 종료 후에는 별도 CLI 프로세스로 네 문서를 읽어 +저장된 내용과 버전을 확인한다. 한 호스트당 **4,096 HTTP 작업**과 2,048개 저장 효과, +2,048개 읽기 효과다. 키별 작업은 순차적이며, 서로 다른 키 사이에 동시성이 +있다. 이전 검사에서 같은 키의 충돌과 느린 수신자는 별도로 검증했다. + +[현재 호스트의 실행 결과](../../prototypes/connections/results/2026-09-24-posix-idle/service-scale.json): + +| 한 호스트 기준 | 고정 정의 | 소스 정의 | +|---|---:|---:| +| 최종 저장 객체 | 1,024 | 1,024 | +| 저장 파일 총량 | 8,413,184 B | 8,413,184 B | +| 서버 유휴 RSS | 1,504 KiB | 1,552 KiB | +| 이 작업의 피크 RSS | **1,680 KiB** | **1,712 KiB** | +| 최대 동시 연결 | 8 | 8 | +| 최대 보유 payload | 49,185 B | 49,168 B | +| 종료 시 보유 payload | 0 B | 0 B | +| 거절·기한 만료 | 0 | 0 | + +두 호스트의 최종 문서 해시는 같다. 1 MiB 서버 payload 예산과 4 MiB +프로세스 피크 RSS 회귀 상한을 통과했다. 응답으로 빌려 보낸 논리적 본문은 +호스트당 25,166,848 B였고, 요청 헤더와 같은 첫 수신에 실린 본문을 입력 +버퍼로 옮긴 바이트는 이 실행에서 고정 정의 326,623 B, 소스 정의 +366,236 B였다. [앞선 동일 작업](../../prototypes/connections/results/2026-09-24-signal-safe-idle/service-scale-restored.json)에서는 +각각 696,751 B와 410,074 B였다. +TCP 분할·스케줄링에 따라 달라지는 값이므로 두 호스트의 우열을 뜻하지 +않지만, 복사 제거가 아직 완전하지 않다는 근거다. 빌린 출력 바이트는 실제 +네트워크·커널 복사량이나 고유 물리 메모리량을 뜻하지 않는다. + +이 검사는 **실제 문서 앱의 다중 객체·8연결 정확성 및 자원 상한**을 보여준다. +Python 클라이언트가 만든 요청의 실행 시간을 서버 처리량으로 취급하지 +않는다. 저장 파일과 페이지 캐시, 파일 디스크립터, OS 네트워크 버퍼, +클라이언트 메모리는 서버 RSS에 포함되지 않는다. 1,024개 파일을 쓰는 +운영·복구 비용, 다수의 1 MiB 동시 응답, 장시간 부하, 여러 Pure 프로세스, +실서비스 동등 비교와 macOS는 아직 검증하지 않았다. 한 바이트 수정에도 +기본 저장소가 문서 전체를 다시 쓰는 비용 역시 남아 있다. + +재현 명령은 `make -C prototypes/connections check-service-scale`이다. |
