aboutsummaryrefslogtreecommitdiffstats
path: root/docs/design
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-26 05:48:40 +0100
committereunhhu <[email protected]>2026-09-26 05:48:40 +0100
commitc7ae77cdf4623c3eb07935081510478be9063024 (patch)
tree79430358736adab332b4d5bb61c9e7b78e67a30f /docs/design
parent7771461a93f993425f97d4e05c91e64d17179e60 (diff)
downloadpure-c7ae77cdf4623c3eb07935081510478be9063024.tar.gz
pure-c7ae77cdf4623c3eb07935081510478be9063024.zip
Shard pure-serve across cores
A burst now looks at the store once (pure_store_pin) instead of once per request; another shard's commit ends before its answer is sent, so a request made after that answer still reads it. With this alone one thread serves 125k small keep-alive reads per second, as many as axum on three cores, with a shorter p99. --threads N runs a shard per thread: its own SO_REUSEPORT listener, epoll set, runtime domain, app and store handle. Writer sessions of the tree store now take turns inside a process with a mutex (the file lock belongs to the process and does not keep threads apart), and revisions settle concurrent edits of a key. A module with states runs on one thread. Three shards serve 151k reads per second; they still commit one by one, so durable writes and 1 MiB reads are better on one thread for now, which stays the default. Note 075 records the numbers.
Diffstat (limited to 'docs/design')
-rw-r--r--docs/design/008-module-format.md5
1 files changed, 4 insertions, 1 deletions
diff --git a/docs/design/008-module-format.md b/docs/design/008-module-format.md
index 2407980..01f2dc0 100644
--- a/docs/design/008-module-format.md
+++ b/docs/design/008-module-format.md
@@ -210,7 +210,10 @@ text·리스트가 남을 때만 위치를 유지한다.
- **이벤트 한 바퀴가 묶음 하나다.** 준비된 요청을 모두 지연 저장 모드의 앱에 차례로 적용하고, 저장 한 번 **뒤에**
응답한다. 저장이 실패하면 묶음의 읽기까지 모두 실패한다. 같은 키가 다시 오거나 문서 수가 한 저장의 한도를 넘으려
하면 묶음을 먼저 끝낸다. 그래서 묶음 안의 모든 요청은 자기 묶음의 저장으로 저장되거나 그것과 함께 실패한다.
-- **저장소 핸들.** 문서와 상태를 저장소 핸들(`pure_store_data`)로 열어 파일 매핑 하나를 공유한다.
+- **저장소 핸들.** 문서와 상태를 저장소 핸들(`pure_store_data`)로 열어 파일 매핑 하나를 공유하고, 묶음마다 한 번만
+ 저장소가 바뀌었는지 본다.
+- **샤드.** `--threads N`은 스레드마다 같은 포트의 리스너(`SO_REUSEPORT`), epoll, 런타임 코어, 앱, 저장소 핸들을 둔다.
+ 키 없는 상태를 가진 모듈은 한 스레드로만 돈다(상태의 소유자는 하나다).
- GET 응답은 예산에 계상되는 자원으로 복사한다. PUT 응답은 요청 본문에서 빌려야 하므로 `edit` 핸들러는 메시지
필드만 응답할 수 있다(`reply edit.insert`). 시작할 때 확인한다.