From b1ce1927022d374198441afafeb27199fc8a052a Mon Sep 17 00:00:00 2001 From: eunhhu Date: Thu, 24 Sep 2026 17:14:54 +0100 Subject: Establish native micro runtime checkpoint --- docs/research/041-posix-idle-signal-wakeup.md | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/research/041-posix-idle-signal-wakeup.md (limited to 'docs/research/041-posix-idle-signal-wakeup.md') diff --git a/docs/research/041-posix-idle-signal-wakeup.md b/docs/research/041-posix-idle-signal-wakeup.md new file mode 100644 index 0000000..5f7ba40 --- /dev/null +++ b/docs/research/041-posix-idle-signal-wakeup.md @@ -0,0 +1,37 @@ +# 041 — 유휴 HTTP 호스트의 POSIX 종료 경로 + +2026-09-24. [039](039-idle-http-wakeups.md)는 50ms 주기 깨움을 없앴지만 +Linux `ppoll`에 의존했다. `poll` 대기 직전에 종료 신호가 도착하면 신호 +플래그만으로는 무기한 대기 경합을 막을 수 없다. 이번 변경은 HTTP 호스트에 +작은 비차단 신호 알림 파이프를 둔다. `SIGINT`·`SIGTERM` 처리기는 종료 +플래그를 설정하고 파이프에 한 바이트를 쓴다. `poll`은 그 읽기 끝을 +클라이언트 소켓과 함께 감시한다. 신호가 `poll` 전후 어느 때 도착해도 +다음 대기가 깨어날 준비를 한다. 대기 전용 스레드나 실행 코어 타입은 없다. + +Apple의 [`poll(2)` 매뉴얼](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/poll.2.html)과 +[`sigaction(2)` 매뉴얼](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/sigaction.2.html)은 +이 경계에서 쓰는 API를 문서화하고, 후자는 `write()`를 신호 처리기에서 +사용 가능한 함수로 열거한다. 여기서 검증한 것은 **Linux AArch64 실행**이다. +macOS SDK 컴파일·실행과 macOS 저장·패키지 경로는 아직 검증하지 않았다. + +[시스템 호출 추적](../../prototypes/connections/results/2026-09-24-posix-idle/reproducible-comparison.json)에서 +유휴 1.25초 동안 이전 호스트의 50ms 제한 대기 25회가 현재 호스트의 +무기한 대기 1회로 바뀌었다. `SIGTERM` 이후 프로세스는 정상 종료했다. +[HTTP 회귀 검사](../../prototypes/connections/results/2026-09-24-posix-idle/fixed-server-regression.json)는 +1 MiB 문서·느린 수신자·예산 회수를 통과했다. +[1,024개 문서·8개 클라이언트 검사](../../prototypes/connections/results/2026-09-24-posix-idle/service-scale.json)도 +고정·소스 호스트 각각 4,096 HTTP 작업, 같은 최종 문서 해시, 별도 CLI +복원, 종료 시 보유 0 B를 확인했다. 이 검사는 처리량 비교가 아니다. + +Linux AArch64/GCC 14에서 실행 코어 `text` 5,932 B와 고정 CLI 19,244 B는 +그대로다. [소스 HTTP 호스트](../../prototypes/connections/results/2026-09-24-posix-idle/source-profile.json)의 +`text`는 43,451→43,778 B, [고정 HTTP 호스트](../../prototypes/connections/results/2026-09-24-posix-idle/fixed-profile.json)는 +25,790→26,261 B다. 호스트마다 파이프 파일 디스크립터 2개를 더 쓴다. +[CLI+HTTP 묶음](../../prototypes/connections/results/2026-09-24-posix-idle/pure-document-fixed-http-linux-aarch64.tar.gz)은 +32,346 B이며 [다른 위치에서 실제 편집·복원](../../prototypes/connections/results/2026-09-24-posix-idle/package.json)을 +통과했다. 묶음 크기는 libc나 프로세스 메모리를 포함하지 않는다. + +`ppoll` 제거만으로 macOS 지원이 완성되지는 않는다. 현재 저장소, +컴파일러, 창, TLS 경계와 패키지도 macOS에서 각각 빌드·검증해야 한다. +마이크로 기준도 실행 코어만이 아니라 선택한 앱의 전체 메모리와 파일 +디스크립터를 포함해 판단해야 한다. -- cgit v1.2.3