diff options
| author | eunhhu <[email protected]> | 2026-10-04 16:20:17 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-10-04 16:20:17 +0100 |
| commit | bcfc4fe3baa94bc054f949e65389e05969b7ff50 (patch) | |
| tree | 80b6540957659890e9c45a45404e710f6a2b2097 /docs/research/120-pushing-views.md | |
| parent | 50d8263492d69ca8521d3b1d51f60b551c76c443 (diff) | |
| download | pure-bcfc4fe3baa94bc054f949e65389e05969b7ff50.tar.gz pure-bcfc4fe3baa94bc054f949e65389e05969b7ff50.zip | |
Wake each thread at most once a push, end streams only of stopped apps, and show a subscriber costs writes nothing (019)
Diffstat (limited to 'docs/research/120-pushing-views.md')
| -rw-r--r-- | docs/research/120-pushing-views.md | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/docs/research/120-pushing-views.md b/docs/research/120-pushing-views.md index 53339b8..05352bb 100644 --- a/docs/research/120-pushing-views.md +++ b/docs/research/120-pushing-views.md @@ -14,6 +14,8 @@ 100번 바뀔 때 같은 CPU로 더 신선하다(p99 11 ms 대 20 ms). - **크기.** 구독자 1만에서 호스트의 메모리는 구독자마다 0.29–0.42 KiB 늘었다(기준 1 KiB). 값 하나가 1만에게 다 닿기까지 p99는 37–45 ms다(기준 100 ms). +- **쓰기 옆의 구독자.** 초당 13만 9천 번의 쓰기 옆에서 구독자 하나가 매번 바뀌는 보기를 따라가도 쓰기는 그대로다(+0.1%). 미는 일은 + 10 ms마다 한 번이다. - **지금의 길.** TPC-C는 +0.3%, 은행 질의의 명령 수는 같다(±0.1%). 질의 하나(in_credit, 0.84 ms)의 시간이 처음 여섯 쌍에서 +4.2%, 다음 여섯 쌍에서 +2.4%, 열두 쌍 모두 +3.0%였다. 명령 수가 같으니 일이 아니라 자리의 차이다. @@ -55,6 +57,19 @@ CPU는 `/proc/PID/stat`의 utime+stime, 메모리는 클라이언트를 붙이� 구독자는 요청을 읽던 연결 기록(6,192 바이트)을 돌려주고 소켓과 구독만 남는다. 구독자 1,000의 런에서 구독자마다 1.5–4 KiB로 보인 것은 붙는 동안 한꺼번에 생긴 연결 기록이 남은 것이다(돌려준 기록은 다음 연결이 다시 쓴다). 1만이면 그 몫이 묽어진다. +**쓰기 옆의 구독자**(`under_load.py`, `under-load.jsonl`). 점수판(`scores.aup`)에 64연결이 10초 동안 점수를 보낸다. 구독자 없이와, +구독자 하나가 `total`(쓰기마다 바뀐다)을 따라가며. 번갈아 세 라운드. + +| 중앙값 | 쓰기(초당) | 쓰기 p99 | +|---|---:|---:| +| 구독자 없음 | 139,012 | 1,024 µs | +| 구독자 하나 | 139,164 (+0.1%) | 832 µs | + +호스트는 10초 동안 미는 일을 3,000번 했다(스레드 셋이 10 ms마다). 이것은 처음 구현을 다시 읽다 찾은 것을 고친 뒤에 쟀다: 스레드가 미는 +일을 미루는 동안에도 깨우라는 말을 매번 지워서, 쓰기가 많으면 소유자가 저장마다 스레드마다 eventfd에 썼다. 이제 그 말은 미는 일이 +돌 때만 지운다(미는 일 한 번에 스레드마다 많아야 한 번 쓴다). 또 앱이 조용한 동안(모듈을 바꾸는 중)에 미는 일이 돌면 스트림을 끊던 +것을, 조용하고 스냅숏도 놓은 때(멈춘 때)만 끊게 고쳤다. 검사에 앱을 구성에서 빼면 스트림이 끝나는 것을 더했다. + **지금의 길**(전 `84483fe`, 후 `a7de450` 다음의 `watch_subscriber`를 넣은 빌드). TPC-C(RAM, W=1, 64터미널)와 은행 질의를 번갈아 여섯 쌍, 은행 질의만 여섯 쌍 더. |
