diff options
59 files changed, 655 insertions, 0 deletions
diff --git a/docs/research/111-apps-on-one-host.md b/docs/research/111-apps-on-one-host.md new file mode 100644 index 0000000..3086a23 --- /dev/null +++ b/docs/research/111-apps-on-one-host.md @@ -0,0 +1,109 @@ +# 111 — 한 호스트의 여러 앱: 앱마다 프로세스와 견주어 + +2026-10-01. [017](../design/017-apps-on-one-host.md)의 1단계를 잰다. 기준은 구현하기 전에 017에 적어 커밋했다(`0b5fa1d`). +비교 상대는 앱마다 프로세스 하나다. + +- 격리: 앱 A를 64연결의 쓰기로 포화시키는 동안 앱 B(한 연결)의 p99가 두 프로세스일 때의 1.5배를 넘지 않는다(실행 스레드 둘). +- 비용: 작은 앱 하나를 더하는 자기만의 메모리가 유휴 프로세스(864 KiB)의 4분의 1 미만이고, 앱 100개까지 스레드가 그대로다. +- 처리량: A와 B의 처리량 합이 두 프로세스보다 10% 넘게 낮지 않다. +- 앱 하나: TPC-C(RAM, W=1, 64터미널)와 은행 질의를 전(`0b5fa1d`)과 후 번갈아 여섯 쌍 재서 중앙값이 3% 넘게 느려지지 않고, + 은행 질의의 명령 수([110](110-counting-instead-of-timing.md)의 `count.py`)가 1% 넘게 늘지 않는다. + +## 쉬운 말로 + +- **통과했다.** A가 몰릴 때 B의 p99는 두 프로세스의 0.5배다. 앱 하나에 120 KiB가 든다(프로세스 하나의 PSS 1,311 KiB의 9%). 둘 + 다 바쁠 때 처리량과 p99는 두 프로세스와 같다. 앱 하나의 호스트는 전과 같다. +- **처음 구현은 처리량을 넘지 못했다.** 짧게 쟀을 때 두 앱이 84k/s, 두 프로세스가 117k/s였다. 실행 스레드가 차례마다 앱을 줄 + 끝에 다시 세우며 다른 실행 스레드를 깨웠다. 바쁜 앱이 차례마다 코어를 옮겨 다닌 것이다. 다른 앱이 기다리지 않으면 같은 + 실행 스레드가 잇게 하자 같아졌다(`d95740e`). +- **그다음은 꼬리였다.** 두 앱이 다 바쁘면 p99가 늘 4.1 ms였다(두 프로세스 1.5 ms). 한 앱의 연결이 연결 스레드들에 흩어져서, + 넘기고 돌려받는 일이 모두-대-모두였다. 요청당 CPU가 3분의 1 더 들고 자발적 문맥 전환이 다섯 배였다. 코어가 붐비니 깨어난 + 스레드가 커널의 한 틱(HZ=250, 4 ms)을 기다렸다. 앱마다 집 연결 스레드를 두고 연결을 첫 요청에서 그리로 옮기자 1.4 ms가 됐다 + (`41502b9`). 프로세스의 1:1 모양을 한 프로세스 안에서 되찾은 셈이다. +- **실행량 예산이 표의 줄마다 일을 더하고 있었다.** 앱 하나의 명령 수 기준(1%)을 넘었다(1만 줄 표 +3.0%). 표본은 호스트가 + 칸마다 실패의 까닭을 묻는 데를 가리켰다. 예산이 없으면 세지 않고, 까닭은 실패했을 때만 쓰게 하자 +0.94%가 됐다(`aef14c0`). +- **시간은 여기서도 흔들렸다.** 은행 질의의 시간이 후에 +3–6%로 보인 네 쌍이 있었지만 명령 수는 오히려 줄어 있었다. 110에서 본 + 배치의 흔들림이다. 판정은 깨끗한 여섯 쌍과 명령 수로 했다. + +## 결과 + +원시 결과와 명령은 [026-apps-on-one-host](../../research/experiments/026-apps-on-one-host/)에 있다(`runs.sh` 단계별, `isolation.py`, +`memory.py`; 부하 도구 `benchmarks/http/load`는 경로 앞에 앱의 이름을 붙이는 인자를 받는다). + +**격리와 처리량**(`isolation.py`, 점수판 앱 둘, RAM, 서버는 코어 0–2, 부하는 코어 3, 15초씩 다섯 라운드, 방식의 순서를 +번갈았다. 라운드 사이의 차이는 1–2%였다). 프로세스 둘은 스레드 넷(연결 하나와 소유자 하나씩), 호스트는 스레드 넷(연결 둘, +실행 둘), host1은 셋(연결 하나, 실행 둘)이다. + +| 중앙값 | 프로세스 둘 | 호스트 | host1 | +|---|---:|---:|---:| +| B 혼자, p99 | 108 µs | 112 µs | 112 µs | +| A가 몰릴 때 B의 p99 | 336 µs | **168 µs (0.50배)** | 544 µs (1.62배) | +| A가 몰릴 때 A의 처리량 | 111.1k/s | 104.5k/s | 136.1k/s | +| 둘 다 바쁠 때 처리량 합 | 146.2k/s | **146.1k/s (−0.04%)** | 139.5k/s (−4.6%) | +| 둘 다 바쁠 때 p99 | 1,408 µs | 1,408 µs | 1,088 µs | + +host1은 연결 스레드가 하나라 둘 다 바쁠 때 꼬리가 가장 짧지만, A가 몰리면 B가 같은 스레드를 기다린다. 기준은 스레드 수가 같은 +호스트로 판정했다. + +집 스레드를 두기 전(`d95740e`, `2026-10-01-isolation-d95740e-…`)에는 같은 표가 이랬다. A가 몰릴 때 B의 p99는 232 µs였고, +둘 다 바쁠 때 처리량 합은 145.6k/s, p99는 4,096 µs였다. 그때 두 앱이 둘 다 바쁜 6초 동안 스레드마다 잰 것(한 번 잰 것으로, +파일로 남기지 않았다): + +| 6초 동안 | 프로세스 둘 | 호스트(집 스레드 전) | +|---|---:|---:| +| 연결 스레드의 CPU, 자발적 전환 | 3.0 s, 3.3만 (각각) | 4.0 s, 18만 (각각) | +| 소유자·실행 스레드의 CPU, 자발적 전환 | 0.82 s, 5.8만 | 1.37 s, 10.5만 | + +모으기(저장 뒤에 잠깐 기다리기)를 끈 빌드도 p99가 4,096 µs 그대로여서 원인에서 뺐다. + +**비용**(`memory.py`, 점수판 앱 N개를 한 호스트에, 앱마다 한 번 쓰고 한 번 읽은 뒤의 `smaps_rollup`, 연결 스레드 하나, 실행 +스레드 둘). + +| | 자기만의 더티 | RSS | PSS | 스레드 | +|---|---:|---:|---:|---:| +| 프로세스 하나(`--module`) | 1,296 KiB | 2,752 KiB | 1,311 KiB | 2 | +| 호스트, 앱 1 | 1,328 KiB | 2,784 KiB | 1,343 KiB | 3 | +| 호스트, 앱 10 | 2,384 KiB | 3,840 KiB | 2,399 KiB | 3 | +| 호스트, 앱 100 | 13,232 KiB | 14,688 KiB | 13,247 KiB | 3 | + +앱 하나에 (13,232 − 1,328) / 99 = 120 KiB다. 기준(216 KiB)의 절반 남짓이다. 프로세스 하나의 자기만의 더티가 087의 864 KiB보다 +큰 것은 재부팅 뒤 공유 라이브러리를 함께 매핑한 프로세스가 적어서다(PSS는 같다). + +**앱 하나**(`runs.sh pairs`, 전은 `0b5fa1d`, 후는 `aef14c0`). + +| 쌍 | TPC-C 초당 거래(전 → 후) | 거래당 CPU(µs) | 소유자의 코어 몫 | +|---|---:|---:|---:| +| 1 | 46,682 → 45,754 (−2.0%) | 41.0 → 41.8 | 0.92 → 0.91 | +| 2 | 45,195 → 45,762 (+1.3%) | 42.3 → 42.0 | 0.90 → 0.91 | +| 3 | 44,967 → 44,905 (−0.1%) | 42.5 → 42.5 | 0.90 → 0.90 | +| 4 | 44,086 → 45,181 (+2.5%) | 42.7 → 42.4 | 0.89 → 0.90 | +| 5 | 42,992 → 40,751 (−5.2%) | 42.9 → 44.1 | 0.88 → 0.85 (후가 방해받음) | +| 6 | 43,066 → 37,280 (−13.4%) | 43.0 → 45.3 | 0.87 → 0.81 (후가 방해받음) | + +중앙값 44,527 → 45,043(+1.2%), 거래당 CPU 42.6 → 42.45 µs. 은행 질의의 중앙값은 지점별 합계 +1.7%, 흑자 계좌 수 −1.8%, 조인 +−2.6%, 순위 −0.4%다. 017의 커밋마다 짧게 잰 TPC-C(10초, 두 라운드, `2026-10-01-tpcc-by-commit-…`)도 모두 ±3% 안이었다. + +| 명령 수(한 번 물을 때) | 전 | 후 | +|---|---:|---:| +| `per_branch` | 27.07M | 26.77M (−1.1%) | +| `in_credit` | 3.49M | 3.42M (−1.9%) | +| `large` | 1.438M | 1.445M (+0.44%) | +| `ranks` | 24.21M | 24.06M (−0.6%) | +| `field`(1만 줄, 열 하나) | 8.695M | 8.776M (+0.94%) | +| `found`(1만 줄, 키로 찾기) | 15.64M | 15.69M (+0.35%) | + +`aef14c0` 전(`41502b9`)에는 `field` +3.0%, `large` +1.5%, `found` +1.4%였다(`41502b9/`). 그때의 쌍 넷과, 시간 한도로 끊긴 첫 +시도(`interrupted/`)도 남겼다. + +## 판정 + +- **017의 1단계는 들어간다.** 네 기준을 모두 채웠다. 앱 여러 개를 한 프로세스에서 Pure의 차례로 돌린다. +- 같은 프로세스 안의 격리는 검증기와 예산과 집 스레드가 만든다. 리눅스 프로세스만큼의 보호(호스트 자신의 결함)는 아니다. + +## 다음 + +- **앱당 120 KiB의 내역.** 모듈(18.7 KB), 소유자의 앱과 연결 스레드마다의 리더(앱 하나에 6 KB씩), 저장소의 매핑, 스냅숏이 + 있다. 잠든 앱의 리더를 처음 쓸 때 만들면 더 줄 것이다. +- **연결 스레드의 수.** 앱이 연결 스레드보다 많으면 한 스레드에 앱 여럿이 산다. 한 앱이 몰리면 같은 집의 앱이 기다린다 + (host1의 1.6배가 그 모습이다). 집을 정하는 규칙(지금은 순서)을 부하에 맞출 수 있다. +- 017의 2단계(앱 사이와 노드 사이)와 3단계(앱의 수명). diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-counts-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-counts-linux-aarch64.jsonl new file mode 100644 index 0000000..1af3fbc --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-counts-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"serve": "pure-serve-before", "per_branch": {"instructions": 26859547, "cycles": 11867170}, "in_credit": {"instructions": 3443924, "cycles": 1579085}, "large": {"instructions": 1438503, "cycles": 649704}, "ranks": {"instructions": 24092075, "cycles": 14828566}, "none": {"instructions": 606073, "cycles": 194113}, "field": {"instructions": 8694610, "cycles": 3126191}, "found": {"instructions": 15639640, "cycles": 12618787}} +{"serve": "pure-serve-after", "per_branch": {"instructions": 26783556, "cycles": 12126938}, "in_credit": {"instructions": 3427136, "cycles": 1570048}, "large": {"instructions": 1444860, "cycles": 652963}, "ranks": {"instructions": 24063602, "cycles": 14716504}, "none": {"instructions": 606876, "cycles": 190004}, "field": {"instructions": 8776041, "cycles": 3151811}, "found": {"instructions": 15692481, "cycles": 12800466}} +{"serve": "pure-serve-before", "per_branch": {"instructions": 27282684, "cycles": 14480028}, "in_credit": {"instructions": 3538446, "cycles": 2102038}, "large": {"instructions": 1438375, "cycles": 787335}, "ranks": {"instructions": 24321113, "cycles": 15114898}, "none": {"instructions": 606073, "cycles": 189096}, "field": {"instructions": 8694610, "cycles": 3136411}, "found": {"instructions": 15635360, "cycles": 12414260}} +{"serve": "pure-serve-after", "per_branch": {"instructions": 26754728, "cycles": 11964483}, "in_credit": {"instructions": 3420610, "cycles": 1535264}, "large": {"instructions": 1444780, "cycles": 670966}, "ranks": {"instructions": 24047506, "cycles": 14803180}, "none": {"instructions": 606876, "cycles": 190148}, "field": {"instructions": 8776041, "cycles": 3152577}, "found": {"instructions": 15692544, "cycles": 12726014}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-isolation-d95740e-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-isolation-d95740e-linux-aarch64.jsonl new file mode 100644 index 0000000..b4f74a0 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-isolation-d95740e-linux-aarch64.jsonl @@ -0,0 +1,45 @@ +{"round": 1, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 152, "b_per_second": 11290, "b_5xx": 0} +{"round": 1, "way": "host", "kind": "alone", "b_p50_us": 80, "b_p99_us": 120, "b_per_second": 11415, "b_5xx": 0} +{"round": 1, "way": "host1", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11123, "b_5xx": 0} +{"round": 1, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 320, "b_per_second": 8301, "b_5xx": 0, "a_per_second": 110704, "a_p99_us": 864, "a_5xx": 0} +{"round": 1, "way": "host", "kind": "flood", "b_p50_us": 104, "b_p99_us": 232, "b_per_second": 8804, "b_5xx": 0, "a_per_second": 108163, "a_p99_us": 960, "a_5xx": 0} +{"round": 1, "way": "host1", "kind": "flood", "b_p50_us": 320, "b_p99_us": 496, "b_per_second": 3230, "b_5xx": 0, "a_per_second": 134864, "a_p99_us": 704, "a_5xx": 0} +{"round": 1, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1472, "b_per_second": 73211, "b_5xx": 0, "a_per_second": 73181, "a_p99_us": 1472, "a_5xx": 0} +{"round": 1, "way": "host", "kind": "both", "b_p50_us": 208, "b_p99_us": 4096, "b_per_second": 73048, "b_5xx": 0, "a_per_second": 72866, "a_p99_us": 4096, "a_5xx": 0} +{"round": 1, "way": "host1", "kind": "both", "b_p50_us": 368, "b_p99_us": 1152, "b_per_second": 69754, "b_5xx": 0, "a_per_second": 69774, "a_p99_us": 1152, "a_5xx": 0} +{"round": 2, "way": "host1", "kind": "alone", "b_p50_us": 92, "b_p99_us": 116, "b_per_second": 10558, "b_5xx": 0} +{"round": 2, "way": "host", "kind": "alone", "b_p50_us": 92, "b_p99_us": 112, "b_per_second": 10974, "b_5xx": 0} +{"round": 2, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11450, "b_5xx": 0} +{"round": 2, "way": "host1", "kind": "flood", "b_p50_us": 336, "b_p99_us": 608, "b_per_second": 2899, "b_5xx": 0, "a_per_second": 134801, "a_p99_us": 672, "a_5xx": 0} +{"round": 2, "way": "host", "kind": "flood", "b_p50_us": 104, "b_p99_us": 224, "b_per_second": 8749, "b_5xx": 0, "a_per_second": 108619, "a_p99_us": 960, "a_5xx": 0} +{"round": 2, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 336, "b_per_second": 8250, "b_5xx": 0, "a_per_second": 112004, "a_p99_us": 864, "a_5xx": 0} +{"round": 2, "way": "host1", "kind": "both", "b_p50_us": 368, "b_p99_us": 1152, "b_per_second": 69816, "b_5xx": 0, "a_per_second": 70023, "a_p99_us": 1152, "a_5xx": 0} +{"round": 2, "way": "host", "kind": "both", "b_p50_us": 216, "b_p99_us": 4096, "b_per_second": 72767, "b_5xx": 0, "a_per_second": 72859, "a_p99_us": 4096, "a_5xx": 0} +{"round": 2, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1472, "b_per_second": 73558, "b_5xx": 0, "a_per_second": 73531, "a_p99_us": 1472, "a_5xx": 0} +{"round": 3, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 104, "b_per_second": 11693, "b_5xx": 0} +{"round": 3, "way": "host", "kind": "alone", "b_p50_us": 84, "b_p99_us": 112, "b_per_second": 11076, "b_5xx": 0} +{"round": 3, "way": "host1", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11385, "b_5xx": 0} +{"round": 3, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 320, "b_per_second": 8293, "b_5xx": 0, "a_per_second": 113081, "a_p99_us": 832, "a_5xx": 0} +{"round": 3, "way": "host", "kind": "flood", "b_p50_us": 104, "b_p99_us": 248, "b_per_second": 8746, "b_5xx": 0, "a_per_second": 108231, "a_p99_us": 960, "a_5xx": 0} +{"round": 3, "way": "host1", "kind": "flood", "b_p50_us": 352, "b_p99_us": 576, "b_per_second": 2776, "b_5xx": 0, "a_per_second": 136385, "a_p99_us": 640, "a_5xx": 0} +{"round": 3, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1472, "b_per_second": 73490, "b_5xx": 0, "a_per_second": 73622, "a_p99_us": 1472, "a_5xx": 0} +{"round": 3, "way": "host", "kind": "both", "b_p50_us": 216, "b_p99_us": 4096, "b_per_second": 72839, "b_5xx": 0, "a_per_second": 72753, "a_p99_us": 4096, "a_5xx": 0} +{"round": 3, "way": "host1", "kind": "both", "b_p50_us": 368, "b_p99_us": 1152, "b_per_second": 69976, "b_5xx": 0, "a_per_second": 70232, "a_p99_us": 1152, "a_5xx": 0} +{"round": 4, "way": "host1", "kind": "alone", "b_p50_us": 80, "b_p99_us": 104, "b_per_second": 11557, "b_5xx": 0} +{"round": 4, "way": "host", "kind": "alone", "b_p50_us": 92, "b_p99_us": 112, "b_per_second": 10813, "b_5xx": 0} +{"round": 4, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11210, "b_5xx": 0} +{"round": 4, "way": "host1", "kind": "flood", "b_p50_us": 336, "b_p99_us": 512, "b_per_second": 2875, "b_5xx": 0, "a_per_second": 136148, "a_p99_us": 608, "a_5xx": 0} +{"round": 4, "way": "host", "kind": "flood", "b_p50_us": 104, "b_p99_us": 232, "b_per_second": 8697, "b_5xx": 0, "a_per_second": 109015, "a_p99_us": 960, "a_5xx": 0} +{"round": 4, "way": "processes", "kind": "flood", "b_p50_us": 104, "b_p99_us": 352, "b_per_second": 8343, "b_5xx": 0, "a_per_second": 116421, "a_p99_us": 800, "a_5xx": 0} +{"round": 4, "way": "host1", "kind": "both", "b_p50_us": 352, "b_p99_us": 1152, "b_per_second": 69979, "b_5xx": 0, "a_per_second": 70046, "a_p99_us": 1216, "a_5xx": 0} +{"round": 4, "way": "host", "kind": "both", "b_p50_us": 224, "b_p99_us": 4096, "b_per_second": 72204, "b_5xx": 0, "a_per_second": 72485, "a_p99_us": 4096, "a_5xx": 0} +{"round": 4, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1472, "b_per_second": 73074, "b_5xx": 0, "a_per_second": 73184, "a_p99_us": 1472, "a_5xx": 0} +{"round": 5, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11177, "b_5xx": 0} +{"round": 5, "way": "host", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11106, "b_5xx": 0} +{"round": 5, "way": "host1", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11291, "b_5xx": 0} +{"round": 5, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 336, "b_per_second": 8316, "b_5xx": 0, "a_per_second": 114338, "a_p99_us": 800, "a_5xx": 0} +{"round": 5, "way": "host", "kind": "flood", "b_p50_us": 104, "b_p99_us": 232, "b_per_second": 8772, "b_5xx": 0, "a_per_second": 108196, "a_p99_us": 960, "a_5xx": 0} +{"round": 5, "way": "host1", "kind": "flood", "b_p50_us": 352, "b_p99_us": 512, "b_per_second": 2768, "b_5xx": 0, "a_per_second": 136786, "a_p99_us": 576, "a_5xx": 0} +{"round": 5, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1536, "b_per_second": 72868, "b_5xx": 0, "a_per_second": 72906, "a_p99_us": 1472, "a_5xx": 0} +{"round": 5, "way": "host", "kind": "both", "b_p50_us": 208, "b_p99_us": 4096, "b_per_second": 73391, "b_5xx": 0, "a_per_second": 73201, "a_p99_us": 4096, "a_5xx": 0} +{"round": 5, "way": "host1", "kind": "both", "b_p50_us": 368, "b_p99_us": 1088, "b_per_second": 69988, "b_5xx": 0, "a_per_second": 69996, "a_p99_us": 1152, "a_5xx": 0} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-isolation-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-isolation-linux-aarch64.jsonl new file mode 100644 index 0000000..a0fe46f --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-isolation-linux-aarch64.jsonl @@ -0,0 +1,45 @@ +{"round": 1, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11524, "b_5xx": 0} +{"round": 1, "way": "host", "kind": "alone", "b_p50_us": 84, "b_p99_us": 116, "b_per_second": 11001, "b_5xx": 0} +{"round": 1, "way": "host1", "kind": "alone", "b_p50_us": 84, "b_p99_us": 112, "b_per_second": 11100, "b_5xx": 0} +{"round": 1, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 352, "b_per_second": 8191, "b_5xx": 0, "a_per_second": 111849, "a_p99_us": 864, "a_5xx": 0} +{"round": 1, "way": "host", "kind": "flood", "b_p50_us": 96, "b_p99_us": 168, "b_per_second": 9846, "b_5xx": 0, "a_per_second": 106669, "a_p99_us": 928, "a_5xx": 0} +{"round": 1, "way": "host1", "kind": "flood", "b_p50_us": 368, "b_p99_us": 576, "b_per_second": 2743, "b_5xx": 0, "a_per_second": 135345, "a_p99_us": 640, "a_5xx": 0} +{"round": 1, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1408, "b_per_second": 73148, "b_5xx": 0, "a_per_second": 73455, "a_p99_us": 1408, "a_5xx": 0} +{"round": 1, "way": "host", "kind": "both", "b_p50_us": 232, "b_p99_us": 1408, "b_per_second": 72715, "b_5xx": 0, "a_per_second": 72881, "a_p99_us": 1472, "a_5xx": 0} +{"round": 1, "way": "host1", "kind": "both", "b_p50_us": 368, "b_p99_us": 1088, "b_per_second": 69843, "b_5xx": 0, "a_per_second": 69850, "a_p99_us": 1088, "a_5xx": 0} +{"round": 2, "way": "host1", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11401, "b_5xx": 0} +{"round": 2, "way": "host", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11354, "b_5xx": 0} +{"round": 2, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11379, "b_5xx": 0} +{"round": 2, "way": "host1", "kind": "flood", "b_p50_us": 368, "b_p99_us": 544, "b_per_second": 2639, "b_5xx": 0, "a_per_second": 136230, "a_p99_us": 608, "a_5xx": 0} +{"round": 2, "way": "host", "kind": "flood", "b_p50_us": 96, "b_p99_us": 168, "b_per_second": 9796, "b_5xx": 0, "a_per_second": 105159, "a_p99_us": 928, "a_5xx": 0} +{"round": 2, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 336, "b_per_second": 8245, "b_5xx": 0, "a_per_second": 111460, "a_p99_us": 832, "a_5xx": 0} +{"round": 2, "way": "host1", "kind": "both", "b_p50_us": 384, "b_p99_us": 1088, "b_per_second": 69703, "b_5xx": 0, "a_per_second": 69832, "a_p99_us": 1088, "a_5xx": 0} +{"round": 2, "way": "host", "kind": "both", "b_p50_us": 232, "b_p99_us": 1408, "b_per_second": 72878, "b_5xx": 0, "a_per_second": 72964, "a_p99_us": 1408, "a_5xx": 0} +{"round": 2, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1408, "b_per_second": 73014, "b_5xx": 0, "a_per_second": 73166, "a_p99_us": 1472, "a_5xx": 0} +{"round": 3, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11355, "b_5xx": 0} +{"round": 3, "way": "host", "kind": "alone", "b_p50_us": 92, "b_p99_us": 116, "b_per_second": 10709, "b_5xx": 0} +{"round": 3, "way": "host1", "kind": "alone", "b_p50_us": 88, "b_p99_us": 112, "b_per_second": 10968, "b_5xx": 0} +{"round": 3, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 336, "b_per_second": 8254, "b_5xx": 0, "a_per_second": 111085, "a_p99_us": 864, "a_5xx": 0} +{"round": 3, "way": "host", "kind": "flood", "b_p50_us": 96, "b_p99_us": 168, "b_per_second": 9740, "b_5xx": 0, "a_per_second": 103766, "a_p99_us": 960, "a_5xx": 0} +{"round": 3, "way": "host1", "kind": "flood", "b_p50_us": 384, "b_p99_us": 512, "b_per_second": 2613, "b_5xx": 0, "a_per_second": 136063, "a_p99_us": 576, "a_5xx": 0} +{"round": 3, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1472, "b_per_second": 72441, "b_5xx": 0, "a_per_second": 72495, "a_p99_us": 1408, "a_5xx": 0} +{"round": 3, "way": "host", "kind": "both", "b_p50_us": 224, "b_p99_us": 1536, "b_per_second": 73284, "b_5xx": 0, "a_per_second": 73680, "a_p99_us": 1472, "a_5xx": 0} +{"round": 3, "way": "host1", "kind": "both", "b_p50_us": 384, "b_p99_us": 1088, "b_per_second": 69499, "b_5xx": 0, "a_per_second": 69671, "a_p99_us": 1088, "a_5xx": 0} +{"round": 4, "way": "host1", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11339, "b_5xx": 0} +{"round": 4, "way": "host", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11212, "b_5xx": 0} +{"round": 4, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11273, "b_5xx": 0} +{"round": 4, "way": "host1", "kind": "flood", "b_p50_us": 352, "b_p99_us": 544, "b_per_second": 2764, "b_5xx": 0, "a_per_second": 136121, "a_p99_us": 608, "a_5xx": 0} +{"round": 4, "way": "host", "kind": "flood", "b_p50_us": 96, "b_p99_us": 168, "b_per_second": 9856, "b_5xx": 0, "a_per_second": 104503, "a_p99_us": 960, "a_5xx": 0} +{"round": 4, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 336, "b_per_second": 8236, "b_5xx": 0, "a_per_second": 110230, "a_p99_us": 864, "a_5xx": 0} +{"round": 4, "way": "host1", "kind": "both", "b_p50_us": 368, "b_p99_us": 1088, "b_per_second": 69493, "b_5xx": 0, "a_per_second": 69639, "a_p99_us": 1088, "a_5xx": 0} +{"round": 4, "way": "host", "kind": "both", "b_p50_us": 232, "b_p99_us": 1408, "b_per_second": 73333, "b_5xx": 0, "a_per_second": 73619, "a_p99_us": 1408, "a_5xx": 0} +{"round": 4, "way": "processes", "kind": "both", "b_p50_us": 272, "b_p99_us": 1408, "b_per_second": 68374, "b_5xx": 0, "a_per_second": 68394, "a_p99_us": 1408, "a_5xx": 0} +{"round": 5, "way": "processes", "kind": "alone", "b_p50_us": 80, "b_p99_us": 108, "b_per_second": 11207, "b_5xx": 0} +{"round": 5, "way": "host", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11127, "b_5xx": 0} +{"round": 5, "way": "host1", "kind": "alone", "b_p50_us": 80, "b_p99_us": 112, "b_per_second": 11226, "b_5xx": 0} +{"round": 5, "way": "processes", "kind": "flood", "b_p50_us": 108, "b_p99_us": 352, "b_per_second": 8154, "b_5xx": 0, "a_per_second": 109753, "a_p99_us": 928, "a_5xx": 0} +{"round": 5, "way": "host", "kind": "flood", "b_p50_us": 96, "b_p99_us": 160, "b_per_second": 9749, "b_5xx": 0, "a_per_second": 104439, "a_p99_us": 960, "a_5xx": 0} +{"round": 5, "way": "host1", "kind": "flood", "b_p50_us": 352, "b_p99_us": 544, "b_per_second": 2783, "b_5xx": 0, "a_per_second": 136101, "a_p99_us": 576, "a_5xx": 0} +{"round": 5, "way": "processes", "kind": "both", "b_p50_us": 232, "b_p99_us": 1472, "b_per_second": 73178, "b_5xx": 0, "a_per_second": 73290, "a_p99_us": 1408, "a_5xx": 0} +{"round": 5, "way": "host", "kind": "both", "b_p50_us": 232, "b_p99_us": 1408, "b_per_second": 73002, "b_5xx": 0, "a_per_second": 73119, "a_p99_us": 1408, "a_5xx": 0} +{"round": 5, "way": "host1", "kind": "both", "b_p50_us": 384, "b_p99_us": 1088, "b_per_second": 69756, "b_5xx": 0, "a_per_second": 70013, "a_p99_us": 1088, "a_5xx": 0} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-load.txt b/research/experiments/026-apps-on-one-host/2026-10-01-load.txt new file mode 100644 index 0000000..8bdf107 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-load.txt @@ -0,0 +1,26 @@ +isolation 03:56:18 up 1:08, 2 users, load average: 0.34, 1.39, 3.50 +isolation 04:17:12 up 1:29, 2 users, load average: 0.43, 1.29, 2.23 +1 before 04:31:43 up 1:44, 1 user, load average: 0.35, 1.48, 1.96 +1 after 04:33:29 up 1:45, 1 user, load average: 0.91, 1.43, 1.90 +2 after 04:57:21 up 2:09, 1 user, load average: 0.01, 1.42, 2.44 +2 before 04:58:47 up 2:11, 1 user, load average: 1.01, 1.43, 2.35 +1 before 05:05:52 up 2:18, 1 user, load average: 1.27, 1.54, 2.06 +1 after 05:07:19 up 2:19, 1 user, load average: 1.16, 1.44, 1.97 +2 after 05:08:45 up 2:21, 1 user, load average: 1.36, 1.49, 1.95 +2 before 05:10:31 up 2:22, 1 user, load average: 1.27, 1.53, 1.92 +3 before 05:12:03 up 2:24, 1 user, load average: 1.19, 1.48, 1.87 +3 after 05:13:30 up 2:25, 1 user, load average: 1.31, 1.48, 1.84 +4 after 05:14:57 up 2:27, 1 user, load average: 1.36, 1.51, 1.81 +4 before 05:16:34 up 2:28, 1 user, load average: 1.31, 1.53, 1.79 +1 before 05:47:20 up 2:59, 3 users, load average: 1.30, 3.61, 4.08 +1 after 05:48:46 up 3:01, 3 users, load average: 1.32, 3.09, 3.86 +2 after 05:50:20 up 3:02, 3 users, load average: 1.35, 2.66, 3.63 +2 before 05:51:56 up 3:04, 3 users, load average: 1.29, 2.33, 3.42 +3 before 05:53:31 up 3:05, 3 users, load average: 1.23, 2.12, 3.24 +3 after 05:55:07 up 3:07, 3 users, load average: 1.38, 2.05, 3.12 +4 after 05:56:33 up 3:08, 3 users, load average: 1.37, 1.91, 2.97 +4 before 05:58:09 up 3:10, 3 users, load average: 1.42, 1.89, 2.87 +5 before 06:01:18 up 3:13, 3 users, load average: 1.31, 2.11, 2.80 +5 after 06:03:15 up 3:15, 3 users, load average: 1.40, 2.02, 2.70 +6 after 06:04:53 up 3:17, 3 users, load average: 1.36, 1.93, 2.60 +6 before 06:20:04 up 3:32, 3 users, load average: 1.30, 3.78, 3.64 diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-memory-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-memory-linux-aarch64.jsonl new file mode 100644 index 0000000..d739fa2 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-memory-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"way": "process", "apps": 1, "private_dirty_kib": 1296, "rss_kib": 2752, "pss_kib": 1311, "threads": 2} +{"way": "host", "apps": 1, "private_dirty_kib": 1328, "rss_kib": 2784, "pss_kib": 1343, "threads": 3} +{"way": "host", "apps": 10, "private_dirty_kib": 2384, "rss_kib": 3840, "pss_kib": 2399, "threads": 3} +{"way": "host", "apps": 100, "private_dirty_kib": 13232, "rss_kib": 14688, "pss_kib": 13247, "threads": 3} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-1-linux-aarch64.jsonl new file mode 100644 index 0000000..5b3858c --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-1-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.24, "pure_fastest_ms": 5.17, "sqlite_median_ms": 48.09, "sqlite_fastest_ms": 48.0, "sqlite_indexed_median_ms": 14.44, "sqlite_indexed_fastest_ms": 14.43} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.81, "pure_fastest_ms": 0.78, "sqlite_median_ms": 6.82, "sqlite_fastest_ms": 6.77, "sqlite_indexed_median_ms": 0.2, "sqlite_indexed_fastest_ms": 0.2} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.68, "sqlite_fastest_ms": 1.67, "sqlite_indexed_median_ms": 1.68, "sqlite_indexed_fastest_ms": 1.66} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.6, "pure_fastest_ms": 6.53, "sqlite_median_ms": 3323.33, "sqlite_fastest_ms": 3319.8, "sqlite_indexed_median_ms": 8.8, "sqlite_indexed_fastest_ms": 8.72} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-2-linux-aarch64.jsonl new file mode 100644 index 0000000..56318e0 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-2-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.19, "pure_fastest_ms": 5.09, "sqlite_median_ms": 45.3, "sqlite_fastest_ms": 45.18, "sqlite_indexed_median_ms": 14.18, "sqlite_indexed_fastest_ms": 14.13} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.79, "pure_fastest_ms": 0.76, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.91, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.46, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.62, "pure_fastest_ms": 6.56, "sqlite_median_ms": 2832.72, "sqlite_fastest_ms": 2828.29, "sqlite_indexed_median_ms": 7.8, "sqlite_indexed_fastest_ms": 7.72} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-3-linux-aarch64.jsonl new file mode 100644 index 0000000..34ada20 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-3-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.23, "pure_fastest_ms": 5.17, "sqlite_median_ms": 44.94, "sqlite_fastest_ms": 44.81, "sqlite_indexed_median_ms": 14.11, "sqlite_indexed_fastest_ms": 14.0} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.78, "pure_fastest_ms": 0.76, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.9, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.61, "pure_fastest_ms": 6.56, "sqlite_median_ms": 2831.48, "sqlite_fastest_ms": 2828.52, "sqlite_indexed_median_ms": 7.49, "sqlite_indexed_fastest_ms": 7.48} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-4-linux-aarch64.jsonl new file mode 100644 index 0000000..28a6eec --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-4-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.33, "pure_fastest_ms": 5.2, "sqlite_median_ms": 45.38, "sqlite_fastest_ms": 45.28, "sqlite_indexed_median_ms": 14.06, "sqlite_indexed_fastest_ms": 14.04} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 1.07, "pure_fastest_ms": 0.88, "sqlite_median_ms": 6.08, "sqlite_fastest_ms": 6.04, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.61, "pure_fastest_ms": 0.51, "sqlite_median_ms": 1.67, "sqlite_fastest_ms": 1.56, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 7.4, "pure_fastest_ms": 6.96, "sqlite_median_ms": 2831.77, "sqlite_fastest_ms": 2827.71, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-5-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-5-linux-aarch64.jsonl new file mode 100644 index 0000000..ffb80c2 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-5-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.38, "pure_fastest_ms": 5.24, "sqlite_median_ms": 45.1, "sqlite_fastest_ms": 44.9, "sqlite_indexed_median_ms": 14.11, "sqlite_indexed_fastest_ms": 14.03} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.8, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.9, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.66, "pure_fastest_ms": 6.58, "sqlite_median_ms": 2846.46, "sqlite_fastest_ms": 2837.61, "sqlite_indexed_median_ms": 7.62, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-6-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-6-linux-aarch64.jsonl new file mode 100644 index 0000000..2410d9a --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-after-6-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.41, "pure_fastest_ms": 5.23, "sqlite_median_ms": 45.15, "sqlite_fastest_ms": 44.9, "sqlite_indexed_median_ms": 14.06, "sqlite_indexed_fastest_ms": 14.02} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.79, "sqlite_median_ms": 6.03, "sqlite_fastest_ms": 5.88, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.49, "pure_fastest_ms": 0.42, "sqlite_median_ms": 1.53, "sqlite_fastest_ms": 1.48, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.89, "pure_fastest_ms": 6.71, "sqlite_median_ms": 2853.6, "sqlite_fastest_ms": 2838.7, "sqlite_indexed_median_ms": 7.67, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-1-linux-aarch64.jsonl new file mode 100644 index 0000000..2e6a9f4 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-1-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.22, "pure_fastest_ms": 5.12, "sqlite_median_ms": 45.5, "sqlite_fastest_ms": 45.39, "sqlite_indexed_median_ms": 14.12, "sqlite_indexed_fastest_ms": 14.07} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.8, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.9, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.5, "sqlite_indexed_fastest_ms": 1.49} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.68, "pure_fastest_ms": 6.64, "sqlite_median_ms": 2834.76, "sqlite_fastest_ms": 2831.3, "sqlite_indexed_median_ms": 7.56, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-2-linux-aarch64.jsonl new file mode 100644 index 0000000..5c222f0 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-2-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.17, "pure_fastest_ms": 5.1, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.15, "sqlite_indexed_median_ms": 14.17, "sqlite_indexed_fastest_ms": 14.13} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.8, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.86, "sqlite_fastest_ms": 5.85, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.65, "pure_fastest_ms": 6.6, "sqlite_median_ms": 2833.45, "sqlite_fastest_ms": 2828.57, "sqlite_indexed_median_ms": 7.55, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-3-linux-aarch64.jsonl new file mode 100644 index 0000000..a7d8c4d --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-3-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.2, "pure_fastest_ms": 5.11, "sqlite_median_ms": 45.38, "sqlite_fastest_ms": 45.07, "sqlite_indexed_median_ms": 14.09, "sqlite_indexed_fastest_ms": 14.07} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.8, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.89, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.62, "pure_fastest_ms": 6.57, "sqlite_median_ms": 2830.53, "sqlite_fastest_ms": 2824.34, "sqlite_indexed_median_ms": 7.55, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-4-linux-aarch64.jsonl new file mode 100644 index 0000000..2b41778 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-4-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 6.26, "pure_fastest_ms": 6.2, "sqlite_median_ms": 47.65, "sqlite_fastest_ms": 46.83, "sqlite_indexed_median_ms": 14.45, "sqlite_indexed_fastest_ms": 14.36} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 1.47, "pure_fastest_ms": 1.1, "sqlite_median_ms": 6.28, "sqlite_fastest_ms": 6.11, "sqlite_indexed_median_ms": 0.18, "sqlite_indexed_fastest_ms": 0.17} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.49, "pure_fastest_ms": 0.45, "sqlite_median_ms": 1.71, "sqlite_fastest_ms": 1.57, "sqlite_indexed_median_ms": 1.9, "sqlite_indexed_fastest_ms": 1.81} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.88, "pure_fastest_ms": 6.79, "sqlite_median_ms": 3004.17, "sqlite_fastest_ms": 2904.76, "sqlite_indexed_median_ms": 8.28, "sqlite_indexed_fastest_ms": 8.23} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-5-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-5-linux-aarch64.jsonl new file mode 100644 index 0000000..50f44a4 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-5-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.16, "pure_fastest_ms": 5.09, "sqlite_median_ms": 44.93, "sqlite_fastest_ms": 44.85, "sqlite_indexed_median_ms": 14.16, "sqlite_indexed_fastest_ms": 14.11} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.81, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.95, "sqlite_fastest_ms": 5.88, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.41, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.7, "pure_fastest_ms": 6.65, "sqlite_median_ms": 2844.18, "sqlite_fastest_ms": 2837.81, "sqlite_indexed_median_ms": 7.67, "sqlite_indexed_fastest_ms": 7.54} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-6-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-6-linux-aarch64.jsonl new file mode 100644 index 0000000..75c3a81 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-queries-before-6-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.19, "pure_fastest_ms": 5.11, "sqlite_median_ms": 44.94, "sqlite_fastest_ms": 44.81, "sqlite_indexed_median_ms": 14.15, "sqlite_indexed_fastest_ms": 14.1} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.85, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.93, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.65, "pure_fastest_ms": 6.55, "sqlite_median_ms": 2840.06, "sqlite_fastest_ms": 2837.01, "sqlite_indexed_median_ms": 7.58, "sqlite_indexed_fastest_ms": 7.54} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-1-linux-aarch64.jsonl new file mode 100644 index 0000000..8a99f0e --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-1-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.72, "sqlite_load_s": 1.55, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45754, "new_orders_per_minute": 1223943, "undone_new_orders": 3934, "errors": 0, "new_order": {"done": 411938, "failed": 0, "p50_us": 1408, "p99_us": 2816}, "payment": {"done": 393383, "failed": 0, "p50_us": 1408, "p99_us": 2816}, "order_status": {"done": 36713, "failed": 0, "p50_us": 240, "p99_us": 1024}, "delivery": {"done": 36661, "failed": 0, "p50_us": 1408, "p99_us": 2816}, "stock_level": {"done": 36436, "failed": 0, "p50_us": 272, "p99_us": 1088}, "server_threads": "3", "cpu_us_per_transaction": 41.8, "core_shares": {"pure-owner": 0.91, "pure-checkpoint": 0.01}, "resident_mib": 476.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 476.0, "pure_state_mib": 242.6, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27401, "burst_events": 838133, "checkpoints": 41}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-2-linux-aarch64.jsonl new file mode 100644 index 0000000..261d8c4 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-2-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45762, "new_orders_per_minute": 1224115, "undone_new_orders": 3937, "errors": 0, "new_order": {"done": 411978, "failed": 0, "p50_us": 1408, "p99_us": 2816}, "payment": {"done": 393418, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "order_status": {"done": 36696, "failed": 0, "p50_us": 248, "p99_us": 1024}, "delivery": {"done": 36652, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "stock_level": {"done": 36497, "failed": 0, "p50_us": 272, "p99_us": 1088}, "server_threads": "3", "cpu_us_per_transaction": 42.0, "core_shares": {"pure-owner": 0.91, "pure-checkpoint": 0.01}, "resident_mib": 476.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 476.0, "pure_state_mib": 242.6, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27592, "burst_events": 838197, "checkpoints": 41}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-3-linux-aarch64.jsonl new file mode 100644 index 0000000..8946abe --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-3-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44905, "new_orders_per_minute": 1201258, "undone_new_orders": 3859, "errors": 0, "new_order": {"done": 404279, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "payment": {"done": 386044, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "order_status": {"done": 36011, "failed": 0, "p50_us": 248, "p99_us": 1152}, "delivery": {"done": 35965, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "stock_level": {"done": 35808, "failed": 0, "p50_us": 272, "p99_us": 1216}, "server_threads": "3", "cpu_us_per_transaction": 42.5, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 468.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 468.8, "pure_state_mib": 238.5, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27026, "burst_events": 822515, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-4-linux-aarch64.jsonl new file mode 100644 index 0000000..e44f2cc --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-4-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45181, "new_orders_per_minute": 1208471, "undone_new_orders": 3887, "errors": 0, "new_order": {"done": 406711, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "payment": {"done": 388437, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "order_status": {"done": 36244, "failed": 0, "p50_us": 248, "p99_us": 1024}, "delivery": {"done": 36218, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "stock_level": {"done": 36015, "failed": 0, "p50_us": 272, "p99_us": 1088}, "server_threads": "3", "cpu_us_per_transaction": 42.4, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 470.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 470.8, "pure_state_mib": 239.8, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27060, "burst_events": 827562, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-5-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-5-linux-aarch64.jsonl new file mode 100644 index 0000000..01964c8 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-5-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.58, "pure_load_s": 0.77, "sqlite_load_s": 1.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 40751, "new_orders_per_minute": 1090358, "undone_new_orders": 3493, "errors": 0, "new_order": {"done": 366947, "failed": 0, "p50_us": 1472, "p99_us": 4608}, "payment": {"done": 350223, "failed": 0, "p50_us": 1472, "p99_us": 4608}, "order_status": {"done": 32741, "failed": 0, "p50_us": 256, "p99_us": 1920}, "delivery": {"done": 32658, "failed": 0, "p50_us": 1472, "p99_us": 4608}, "stock_level": {"done": 32453, "failed": 0, "p50_us": 288, "p99_us": 2048}, "server_threads": "3", "cpu_us_per_transaction": 44.1, "core_shares": {"pure-owner": 0.85, "pure-checkpoint": 0.01}, "resident_mib": 431.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 431.7, "pure_state_mib": 218.6, "pure_store_mib": 222.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 25236, "burst_events": 746420, "checkpoints": 37}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-6-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-6-linux-aarch64.jsonl new file mode 100644 index 0000000..9b784ff --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-after-6-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.72, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 37280, "new_orders_per_minute": 996753, "undone_new_orders": 3200, "errors": 0, "new_order": {"done": 335464, "failed": 0, "p50_us": 1536, "p99_us": 5376}, "payment": {"done": 320661, "failed": 0, "p50_us": 1472, "p99_us": 5376}, "order_status": {"done": 29935, "failed": 0, "p50_us": 288, "p99_us": 2304}, "delivery": {"done": 29887, "failed": 0, "p50_us": 1536, "p99_us": 5376}, "stock_level": {"done": 29674, "failed": 0, "p50_us": 320, "p99_us": 2688}, "server_threads": "3", "cpu_us_per_transaction": 45.3, "core_shares": {"pure-owner": 0.81, "pure-checkpoint": 0.01}, "resident_mib": 399.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 399.4, "pure_state_mib": 201.7, "pure_store_mib": 206.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 23113, "burst_events": 682894, "checkpoints": 32}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-1-linux-aarch64.jsonl new file mode 100644 index 0000000..66efea0 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-1-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.62, "sqlite_page_size": 4096, "pure_resident_mib": 38.9, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 46682, "new_orders_per_minute": 1248535, "undone_new_orders": 4015, "errors": 0, "new_order": {"done": 420195, "failed": 0, "p50_us": 1408, "p99_us": 2560}, "payment": {"done": 401410, "failed": 0, "p50_us": 1408, "p99_us": 2560}, "order_status": {"done": 37473, "failed": 0, "p50_us": 240, "p99_us": 928}, "delivery": {"done": 37376, "failed": 0, "p50_us": 1408, "p99_us": 2560}, "stock_level": {"done": 37182, "failed": 0, "p50_us": 272, "p99_us": 992}, "server_threads": "3", "cpu_us_per_transaction": 41.0, "core_shares": {"pure-owner": 0.92, "pure-checkpoint": 0.01}, "resident_mib": 485.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 485.8, "pure_state_mib": 247.0, "pure_store_mib": 254.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27834, "burst_events": 855040, "checkpoints": 42}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-2-linux-aarch64.jsonl new file mode 100644 index 0000000..0a7f987 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-2-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.55, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45195, "new_orders_per_minute": 1208889, "undone_new_orders": 3885, "errors": 0, "new_order": {"done": 406848, "failed": 0, "p50_us": 1408, "p99_us": 3200}, "payment": {"done": 388558, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "order_status": {"done": 36249, "failed": 0, "p50_us": 248, "p99_us": 1216}, "delivery": {"done": 36204, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "stock_level": {"done": 36040, "failed": 0, "p50_us": 272, "p99_us": 1344}, "server_threads": "3", "cpu_us_per_transaction": 42.3, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 471.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 471.5, "pure_state_mib": 239.9, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27445, "burst_events": 827807, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-3-linux-aarch64.jsonl new file mode 100644 index 0000000..4885303 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-3-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.59, "pure_load_s": 0.72, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.9, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44967, "new_orders_per_minute": 1202893, "undone_new_orders": 3864, "errors": 0, "new_order": {"done": 404831, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "payment": {"done": 386565, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "order_status": {"done": 36064, "failed": 0, "p50_us": 248, "p99_us": 1152}, "delivery": {"done": 36014, "failed": 0, "p50_us": 1408, "p99_us": 3072}, "stock_level": {"done": 35871, "failed": 0, "p50_us": 272, "p99_us": 1152}, "server_threads": "3", "cpu_us_per_transaction": 42.5, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 469.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 469.6, "pure_state_mib": 238.8, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26924, "burst_events": 823631, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-4-linux-aarch64.jsonl new file mode 100644 index 0000000..fb20f20 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-4-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44086, "new_orders_per_minute": 1179655, "undone_new_orders": 3780, "errors": 0, "new_order": {"done": 397002, "failed": 0, "p50_us": 1472, "p99_us": 3456}, "payment": {"done": 378941, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "order_status": {"done": 35345, "failed": 0, "p50_us": 248, "p99_us": 1280}, "delivery": {"done": 35291, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "stock_level": {"done": 35157, "failed": 0, "p50_us": 272, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 42.7, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 461.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 461.9, "pure_state_mib": 234.6, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26903, "burst_events": 807539, "checkpoints": 39}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-5-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-5-linux-aarch64.jsonl new file mode 100644 index 0000000..8c7db06 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-5-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.84, "sqlite_load_s": 1.61, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 42992, "new_orders_per_minute": 1150334, "undone_new_orders": 3662, "errors": 0, "new_order": {"done": 387110, "failed": 0, "p50_us": 1472, "p99_us": 4096}, "payment": {"done": 369529, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "order_status": {"done": 34513, "failed": 0, "p50_us": 256, "p99_us": 1728}, "delivery": {"done": 34438, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "stock_level": {"done": 34249, "failed": 0, "p50_us": 288, "p99_us": 1984}, "server_threads": "3", "cpu_us_per_transaction": 42.9, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 451.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 451.8, "pure_state_mib": 229.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26701, "burst_events": 787500, "checkpoints": 38}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-6-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-6-linux-aarch64.jsonl new file mode 100644 index 0000000..e1336d1 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-before-6-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.9, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43066, "new_orders_per_minute": 1152262, "undone_new_orders": 3678, "errors": 0, "new_order": {"done": 387767, "failed": 0, "p50_us": 1472, "p99_us": 4352}, "payment": {"done": 370185, "failed": 0, "p50_us": 1408, "p99_us": 4352}, "order_status": {"done": 34552, "failed": 0, "p50_us": 256, "p99_us": 1536}, "delivery": {"done": 34502, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "stock_level": {"done": 34322, "failed": 0, "p50_us": 288, "p99_us": 1664}, "server_threads": "3", "cpu_us_per_transaction": 43.0, "core_shares": {"pure-owner": 0.87, "pure-checkpoint": 0.01}, "resident_mib": 452.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 452.8, "pure_state_mib": 229.7, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26438, "burst_events": 788846, "checkpoints": 38}} diff --git a/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-by-commit-linux-aarch64.txt b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-by-commit-linux-aarch64.txt new file mode 100644 index 0000000..47bc69c --- /dev/null +++ b/research/experiments/026-apps-on-one-host/2026-10-01-tpcc-by-commit-linux-aarch64.txt @@ -0,0 +1,12 @@ +1 0b5fa1d 44097 42.0 0.88 1.19 +1 cac499d 46273 41.4 0.91 1.77 +1 38fde9d 45395 41.7 0.89 2.22 +1 d8fcd53 46009 41.6 0.9 2.06 +1 d95740e 46774 41.2 0.92 2.02 +1 41502b9 45546 41.6 0.9 2.03 +2 41502b9 45328 41.9 0.9 2.06 +2 d95740e 46385 41.3 0.91 1.94 +2 d8fcd53 45520 41.7 0.9 1.88 +2 38fde9d 45666 41.6 0.9 2.05 +2 cac499d 46716 41.3 0.91 1.92 +2 0b5fa1d 46413 41.5 0.9 1.93 diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-counts-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-counts-linux-aarch64.jsonl new file mode 100644 index 0000000..f7bf178 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-counts-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"serve": "pure-serve-before", "per_branch": {"instructions": 27109423, "cycles": 12757041}, "in_credit": {"instructions": 3499810, "cycles": 2146697}, "large": {"instructions": 1438407, "cycles": 850712}, "ranks": {"instructions": 24227804, "cycles": 15945967}, "none": {"instructions": 606073, "cycles": 194426}, "field": {"instructions": 8694610, "cycles": 3145065}, "found": {"instructions": 15638649, "cycles": 13033209}} +{"serve": "pure-serve-after", "per_branch": {"instructions": 26996283, "cycles": 13168408}, "in_credit": {"instructions": 3477936, "cycles": 1655777}, "large": {"instructions": 1459696, "cycles": 651809}, "ranks": {"instructions": 24206932, "cycles": 14923305}, "none": {"instructions": 606880, "cycles": 187469}, "field": {"instructions": 8957359, "cycles": 3247129}, "found": {"instructions": 15861958, "cycles": 12598700}} +{"serve": "pure-serve-before", "per_branch": {"instructions": 27095339, "cycles": 14076035}, "in_credit": {"instructions": 3496516, "cycles": 2165470}, "large": {"instructions": 1438463, "cycles": 743626}, "ranks": {"instructions": 24218824, "cycles": 15054854}, "none": {"instructions": 606073, "cycles": 189148}, "field": {"instructions": 8694610, "cycles": 3118100}, "found": {"instructions": 15639737, "cycles": 12589382}} +{"serve": "pure-serve-after", "per_branch": {"instructions": 27007923, "cycles": 12183472}, "in_credit": {"instructions": 3480622, "cycles": 1618130}, "large": {"instructions": 1459624, "cycles": 664277}, "ranks": {"instructions": 24213384, "cycles": 14884807}, "none": {"instructions": 606880, "cycles": 191854}, "field": {"instructions": 8957359, "cycles": 3276233}, "found": {"instructions": 15861974, "cycles": 14008038}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-1-linux-aarch64.jsonl new file mode 100644 index 0000000..1a805d7 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-1-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.2, "pure_fastest_ms": 5.14, "sqlite_median_ms": 45.15, "sqlite_fastest_ms": 45.07, "sqlite_indexed_median_ms": 14.13, "sqlite_indexed_fastest_ms": 14.09} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.84, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.87, "sqlite_fastest_ms": 5.85, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.65, "pure_fastest_ms": 6.58, "sqlite_median_ms": 2831.82, "sqlite_fastest_ms": 2829.74, "sqlite_indexed_median_ms": 7.56, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-2-linux-aarch64.jsonl new file mode 100644 index 0000000..cfd7cc0 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-2-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.29, "pure_fastest_ms": 5.22, "sqlite_median_ms": 45.0, "sqlite_fastest_ms": 44.91, "sqlite_indexed_median_ms": 13.98, "sqlite_indexed_fastest_ms": 13.97} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.48, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.48} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.73, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2842.66, "sqlite_fastest_ms": 2830.25, "sqlite_indexed_median_ms": 7.62, "sqlite_indexed_fastest_ms": 7.53} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-3-linux-aarch64.jsonl new file mode 100644 index 0000000..de1abb1 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-3-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.26, "pure_fastest_ms": 5.2, "sqlite_median_ms": 45.06, "sqlite_fastest_ms": 44.85, "sqlite_indexed_median_ms": 14.16, "sqlite_indexed_fastest_ms": 14.07} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.87, "pure_fastest_ms": 0.81, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.63, "sqlite_indexed_fastest_ms": 1.6} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.73, "pure_fastest_ms": 6.62, "sqlite_median_ms": 2836.71, "sqlite_fastest_ms": 2832.09, "sqlite_indexed_median_ms": 7.83, "sqlite_indexed_fastest_ms": 7.75} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-4-linux-aarch64.jsonl new file mode 100644 index 0000000..040db79 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-after-4-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.37, "pure_fastest_ms": 5.24, "sqlite_median_ms": 45.35, "sqlite_fastest_ms": 45.24, "sqlite_indexed_median_ms": 14.1, "sqlite_indexed_fastest_ms": 14.07} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.89, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 7.69, "pure_fastest_ms": 6.95, "sqlite_median_ms": 2837.18, "sqlite_fastest_ms": 2833.15, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-1-linux-aarch64.jsonl new file mode 100644 index 0000000..8056b77 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-1-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.14, "pure_fastest_ms": 5.04, "sqlite_median_ms": 45.25, "sqlite_fastest_ms": 45.12, "sqlite_indexed_median_ms": 14.11, "sqlite_indexed_fastest_ms": 14.07} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.79, "pure_fastest_ms": 0.76, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.64, "pure_fastest_ms": 6.53, "sqlite_median_ms": 2832.44, "sqlite_fastest_ms": 2830.87, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.49} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-2-linux-aarch64.jsonl new file mode 100644 index 0000000..684f23f --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-2-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.12, "pure_fastest_ms": 5.08, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.21, "sqlite_indexed_median_ms": 14.08, "sqlite_indexed_fastest_ms": 14.05} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.8, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.86, "sqlite_fastest_ms": 5.85, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.46} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.62, "pure_fastest_ms": 6.57, "sqlite_median_ms": 2831.21, "sqlite_fastest_ms": 2828.9, "sqlite_indexed_median_ms": 7.59, "sqlite_indexed_fastest_ms": 7.53} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-3-linux-aarch64.jsonl new file mode 100644 index 0000000..d9a4f14 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-3-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.01, "pure_fastest_ms": 4.91, "sqlite_median_ms": 45.4, "sqlite_fastest_ms": 45.19, "sqlite_indexed_median_ms": 14.18, "sqlite_indexed_fastest_ms": 14.1} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.81, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.65, "pure_fastest_ms": 6.6, "sqlite_median_ms": 2834.53, "sqlite_fastest_ms": 2828.33, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.53} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-4-linux-aarch64.jsonl new file mode 100644 index 0000000..9d8a715 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-queries-before-4-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.1, "pure_fastest_ms": 5.04, "sqlite_median_ms": 45.36, "sqlite_fastest_ms": 45.19, "sqlite_indexed_median_ms": 14.14, "sqlite_indexed_fastest_ms": 14.07} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.87, "pure_fastest_ms": 0.8, "sqlite_median_ms": 5.97, "sqlite_fastest_ms": 5.91, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.64, "pure_fastest_ms": 6.56, "sqlite_median_ms": 2840.1, "sqlite_fastest_ms": 2835.52, "sqlite_indexed_median_ms": 7.6, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-1-linux-aarch64.jsonl new file mode 100644 index 0000000..b86020a --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-1-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.54, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45418, "new_orders_per_minute": 1214970, "undone_new_orders": 3903, "errors": 0, "new_order": {"done": 408893, "failed": 0, "p50_us": 1408, "p99_us": 2816}, "payment": {"done": 390468, "failed": 0, "p50_us": 1408, "p99_us": 2816}, "order_status": {"done": 36403, "failed": 0, "p50_us": 248, "p99_us": 1088}, "delivery": {"done": 36383, "failed": 0, "p50_us": 1408, "p99_us": 2816}, "stock_level": {"done": 36206, "failed": 0, "p50_us": 272, "p99_us": 1152}, "server_threads": "3", "cpu_us_per_transaction": 42.5, "core_shares": {"pure-owner": 0.92, "pure-checkpoint": 0.01}, "resident_mib": 473.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 473.0, "pure_state_mib": 241.0, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27563, "burst_events": 831923, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-2-linux-aarch64.jsonl new file mode 100644 index 0000000..afd2e64 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-2-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 39.0, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44696, "new_orders_per_minute": 1195823, "undone_new_orders": 3839, "errors": 0, "new_order": {"done": 402447, "failed": 0, "p50_us": 1472, "p99_us": 3328}, "payment": {"done": 384199, "failed": 0, "p50_us": 1408, "p99_us": 3328}, "order_status": {"done": 35824, "failed": 0, "p50_us": 248, "p99_us": 1152}, "delivery": {"done": 35800, "failed": 0, "p50_us": 1408, "p99_us": 3328}, "stock_level": {"done": 35643, "failed": 0, "p50_us": 272, "p99_us": 1152}, "server_threads": "3", "cpu_us_per_transaction": 42.6, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 467.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 467.7, "pure_state_mib": 237.5, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26689, "burst_events": 818687, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-3-linux-aarch64.jsonl new file mode 100644 index 0000000..70753d1 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-3-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44008, "new_orders_per_minute": 1177625, "undone_new_orders": 3772, "errors": 0, "new_order": {"done": 396314, "failed": 0, "p50_us": 1472, "p99_us": 3456}, "payment": {"done": 378248, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "order_status": {"done": 35282, "failed": 0, "p50_us": 248, "p99_us": 1280}, "delivery": {"done": 35232, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "stock_level": {"done": 35084, "failed": 0, "p50_us": 272, "p99_us": 1280}, "server_threads": "3", "cpu_us_per_transaction": 42.9, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 461.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 461.0, "pure_state_mib": 234.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26570, "burst_events": 806106, "checkpoints": 39}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-4-linux-aarch64.jsonl new file mode 100644 index 0000000..ad39c5f --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-after-4-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.72, "sqlite_load_s": 1.55, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44435, "new_orders_per_minute": 1188830, "undone_new_orders": 3810, "errors": 0, "new_order": {"done": 400088, "failed": 0, "p50_us": 1472, "p99_us": 3456}, "payment": {"done": 382016, "failed": 0, "p50_us": 1408, "p99_us": 3328}, "order_status": {"done": 35618, "failed": 0, "p50_us": 248, "p99_us": 1216}, "delivery": {"done": 35570, "failed": 0, "p50_us": 1408, "p99_us": 3328}, "stock_level": {"done": 35406, "failed": 0, "p50_us": 272, "p99_us": 1280}, "server_threads": "3", "cpu_us_per_transaction": 42.3, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 464.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 464.5, "pure_state_mib": 236.3, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26850, "burst_events": 813948, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-1-linux-aarch64.jsonl new file mode 100644 index 0000000..d55c812 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-1-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.73, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 46010, "new_orders_per_minute": 1230854, "undone_new_orders": 3952, "errors": 0, "new_order": {"done": 414237, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "payment": {"done": 395530, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "order_status": {"done": 36927, "failed": 0, "p50_us": 240, "p99_us": 960}, "delivery": {"done": 36850, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "stock_level": {"done": 36663, "failed": 0, "p50_us": 272, "p99_us": 1024}, "server_threads": "3", "cpu_us_per_transaction": 41.7, "core_shares": {"pure-owner": 0.91, "pure-checkpoint": 0.01}, "resident_mib": 478.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 478.5, "pure_state_mib": 243.8, "pure_store_mib": 254.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27357, "burst_events": 842750, "checkpoints": 41}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-2-linux-aarch64.jsonl new file mode 100644 index 0000000..913f138 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-2-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.9, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43437, "new_orders_per_minute": 1162146, "undone_new_orders": 3712, "errors": 0, "new_order": {"done": 391094, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 373444, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 34810, "failed": 0, "p50_us": 256, "p99_us": 1600}, "delivery": {"done": 34796, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34602, "failed": 0, "p50_us": 288, "p99_us": 1728}, "server_threads": "3", "cpu_us_per_transaction": 43.5, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 456.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 456.2, "pure_state_mib": 231.5, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27180, "burst_events": 795704, "checkpoints": 39}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-3-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-3-linux-aarch64.jsonl new file mode 100644 index 0000000..8f7e189 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-3-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.71, "sqlite_load_s": 1.67, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43382, "new_orders_per_minute": 1160820, "undone_new_orders": 3704, "errors": 0, "new_order": {"done": 390644, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "payment": {"done": 372875, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "order_status": {"done": 34808, "failed": 0, "p50_us": 256, "p99_us": 1536}, "delivery": {"done": 34745, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "stock_level": {"done": 34574, "failed": 0, "p50_us": 272, "p99_us": 1856}, "server_threads": "3", "cpu_us_per_transaction": 42.6, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 454.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 454.7, "pure_state_mib": 231.2, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26395, "burst_events": 794640, "checkpoints": 38}} diff --git a/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-4-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-4-linux-aarch64.jsonl new file mode 100644 index 0000000..a155378 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/41502b9/2026-10-01-tpcc-before-4-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.71, "sqlite_load_s": 1.55, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44310, "new_orders_per_minute": 1185677, "undone_new_orders": 3802, "errors": 0, "new_order": {"done": 399031, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "payment": {"done": 380835, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 35528, "failed": 0, "p50_us": 256, "p99_us": 1280}, "delivery": {"done": 35481, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 35336, "failed": 0, "p50_us": 288, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 42.7, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 463.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 463.8, "pure_state_mib": 235.7, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27382, "burst_events": 811631, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-after-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-after-1-linux-aarch64.jsonl new file mode 100644 index 0000000..093ecc5 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-after-1-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.27, "pure_fastest_ms": 5.19, "sqlite_median_ms": 44.92, "sqlite_fastest_ms": 44.75, "sqlite_indexed_median_ms": 14.22, "sqlite_indexed_fastest_ms": 14.18} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.82, "pure_fastest_ms": 0.8, "sqlite_median_ms": 5.89, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.57, "sqlite_indexed_fastest_ms": 1.53} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.68, "pure_fastest_ms": 6.62, "sqlite_median_ms": 2840.32, "sqlite_fastest_ms": 2836.13, "sqlite_indexed_median_ms": 7.81, "sqlite_indexed_fastest_ms": 7.79} diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-after-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-after-2-linux-aarch64.jsonl new file mode 100644 index 0000000..332318b --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-after-2-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.26, "pure_fastest_ms": 5.15, "sqlite_median_ms": 46.22, "sqlite_fastest_ms": 46.11, "sqlite_indexed_median_ms": 14.66, "sqlite_indexed_fastest_ms": 14.6} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.82, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.9, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.41, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.48, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.48} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.7, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2848.3, "sqlite_fastest_ms": 2846.82, "sqlite_indexed_median_ms": 7.59, "sqlite_indexed_fastest_ms": 7.55} diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-before-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-before-1-linux-aarch64.jsonl new file mode 100644 index 0000000..9dce2a3 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-before-1-linux-aarch64.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.15, "pure_fastest_ms": 5.1, "sqlite_median_ms": 45.32, "sqlite_fastest_ms": 45.18, "sqlite_indexed_median_ms": 14.08, "sqlite_indexed_fastest_ms": 14.07} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.81, "pure_fastest_ms": 0.76, "sqlite_median_ms": 5.87, "sqlite_fastest_ms": 5.85, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.37, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.64, "pure_fastest_ms": 6.56, "sqlite_median_ms": 2833.28, "sqlite_fastest_ms": 2826.65, "sqlite_indexed_median_ms": 7.51, "sqlite_indexed_fastest_ms": 7.48} diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-before-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-before-2-linux-aarch64.jsonl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-queries-before-2-linux-aarch64.jsonl diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-after-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-after-1-linux-aarch64.jsonl new file mode 100644 index 0000000..6e4f1bc --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-after-1-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.74, "sqlite_load_s": 1.54, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 41435, "new_orders_per_minute": 1108733, "undone_new_orders": 3539, "errors": 0, "new_order": {"done": 373117, "failed": 0, "p50_us": 1472, "p99_us": 4352}, "payment": {"done": 356100, "failed": 0, "p50_us": 1472, "p99_us": 4352}, "order_status": {"done": 33305, "failed": 0, "p50_us": 256, "p99_us": 1792}, "delivery": {"done": 33190, "failed": 0, "p50_us": 1472, "p99_us": 4352}, "stock_level": {"done": 32997, "failed": 0, "p50_us": 288, "p99_us": 2048}, "server_threads": "3", "cpu_us_per_transaction": 44.0, "core_shares": {"pure-owner": 0.86, "pure-checkpoint": 0.01}, "resident_mib": 437.1, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 437.1, "pure_state_mib": 221.9, "pure_store_mib": 230.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 25362, "burst_events": 758954, "checkpoints": 37}} diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-after-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-after-2-linux-aarch64.jsonl new file mode 100644 index 0000000..ef16f60 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-after-2-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.74, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 39.0, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43693, "new_orders_per_minute": 1169120, "undone_new_orders": 3733, "errors": 0, "new_order": {"done": 393443, "failed": 0, "p50_us": 1472, "p99_us": 3456}, "payment": {"done": 375506, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "order_status": {"done": 35046, "failed": 0, "p50_us": 256, "p99_us": 1408}, "delivery": {"done": 35007, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "stock_level": {"done": 34856, "failed": 0, "p50_us": 272, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 42.8, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 458.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 458.9, "pure_state_mib": 232.7, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26513, "burst_events": 800308, "checkpoints": 39}} diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-before-1-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-before-1-linux-aarch64.jsonl new file mode 100644 index 0000000..e572929 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-before-1-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45926, "new_orders_per_minute": 1228702, "undone_new_orders": 3946, "errors": 0, "new_order": {"done": 413531, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "payment": {"done": 394794, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "order_status": {"done": 36841, "failed": 0, "p50_us": 248, "p99_us": 992}, "delivery": {"done": 36797, "failed": 0, "p50_us": 1408, "p99_us": 2688}, "stock_level": {"done": 36601, "failed": 0, "p50_us": 272, "p99_us": 1024}, "server_threads": "3", "cpu_us_per_transaction": 42.3, "core_shares": {"pure-owner": 0.91, "pure-checkpoint": 0.01}, "resident_mib": 477.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 477.9, "pure_state_mib": 243.5, "pure_store_mib": 254.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27570, "burst_events": 841261, "checkpoints": 41}} diff --git a/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-before-2-linux-aarch64.jsonl b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-before-2-linux-aarch64.jsonl new file mode 100644 index 0000000..1dde7ae --- /dev/null +++ b/research/experiments/026-apps-on-one-host/interrupted/2026-10-01-tpcc-before-2-linux-aarch64.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.71, "sqlite_load_s": 1.54, "sqlite_page_size": 4096, "pure_resident_mib": 38.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45614, "new_orders_per_minute": 1220241, "undone_new_orders": 3920, "errors": 0, "new_order": {"done": 410667, "failed": 0, "p50_us": 1408, "p99_us": 2944}, "payment": {"done": 392131, "failed": 0, "p50_us": 1408, "p99_us": 2944}, "order_status": {"done": 36576, "failed": 0, "p50_us": 248, "p99_us": 1088}, "delivery": {"done": 36545, "failed": 0, "p50_us": 1408, "p99_us": 2944}, "stock_level": {"done": 36364, "failed": 0, "p50_us": 272, "p99_us": 1152}, "server_threads": "3", "cpu_us_per_transaction": 42.0, "core_shares": {"pure-owner": 0.91, "pure-checkpoint": 0.01}, "resident_mib": 474.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 474.5, "pure_state_mib": 241.9, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27453, "burst_events": 835507, "checkpoints": 40}} diff --git a/research/experiments/026-apps-on-one-host/isolation.py b/research/experiments/026-apps-on-one-host/isolation.py new file mode 100644 index 0000000..9ef7ad4 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/isolation.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +"""Two apps, A and B (benchmarks/http/scores.aup, the scoreboard), as two +pure-serve processes or as one host of two apps (docs/design/017), in RAM +(/dev/shm), on cores 0-2; the load (benchmarks/http/load) on core 3. The +two ways have four threads for the apps: two processes of one connection +thread and an owner each, or one host of two connection threads and two +workers. A third, host1, is a host of one connection thread and two +workers (three threads). + +Each round, both ways in turns (the order flipped every other round): + alone: B's writes, one connection, nothing else; + flood: A's writes from 64 connections, and B's from one, at once; + both: A's and B's writes from 32 connections each. +Prints a JSON line per run: B's p50 and p99, each app's writes a second. + +isolation.py SERVE ROUNDS [SECONDS] +""" +import json +import select +import shutil +import subprocess +import sys +import tempfile +import time +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[2] +LOAD = ROOT / 'benchmarks' / 'http' / 'load' +AUP = ROOT.parent / 'aup' / 'build' / 'aup' + + +def started(args): + process = subprocess.Popen(['taskset', '-c', '0-2', *map(str, args), '--port', '0'], stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + ready, _, _ = select.select([process.stdout], [], [], 10) + assert ready, process.stderr.read() + return process, json.loads(process.stdout.readline()) + + +def stopped(process): + process.terminate() + _, error = process.communicate(timeout=60) + assert process.returncode == 0, error[-500:] + + +def load(port, connections, seconds, prefix): + return subprocess.Popen(['taskset', '-c', '3', str(LOAD), str(port), str(connections), str(seconds), 'score', + str(connections), 'keep-alive', '16', prefix], stdout=subprocess.PIPE, text=True) + + +def result(process): + out, _ = process.communicate() + return json.loads(out) + + +def servers(way, work, serve, module): + """Where A and B are: ([processes], {app: (port, prefix)}).""" + if way == 'processes': + a, info_a = started([serve, '--module', module, '--store', work / 'a', '--threads', 1]) + b, info_b = started([serve, '--module', module, '--store', work / 'b', '--threads', 1]) + return [a, b], {'A': (info_a['port'], ''), 'B': (info_b['port'], '')} + (work / 'apps.conf').write_text(f'a {module} {work / "a"}\nb {module} {work / "b"}\n') + host, info = started([serve, '--apps', work / 'apps.conf', '--threads', 1 if way == 'host1' else 2, '--workers', 2]) + return [host], {'A': (info['port'], '/a'), 'B': (info['port'], '/b')} + + +def run(way, kind, seconds, serve, module, round_): + work = Path(tempfile.mkdtemp(prefix='pure-apps-', dir='/dev/shm')) + try: + processes, where = servers(way, work, serve, module) + try: + if kind == 'alone': + b = result(load(where['B'][0], 1, seconds, where['B'][1])) + a = None + elif kind == 'flood': + flood = load(where['A'][0], 64, seconds + 2, where['A'][1]) + time.sleep(1) + b = result(load(where['B'][0], 1, seconds, where['B'][1])) + a = result(flood) + else: + both_a = load(where['A'][0], 32, seconds, where['A'][1]) + both_b = load(where['B'][0], 32, seconds, where['B'][1]) + a, b = result(both_a), result(both_b) + finally: + for process in processes: + stopped(process) + finally: + shutil.rmtree(work) + row = {'round': round_, 'way': way, 'kind': kind, 'b_p50_us': b['p50_us'], 'b_p99_us': b['p99_us'], + 'b_per_second': b['requests_per_second'], 'b_5xx': b['5xx']} + if a: + row.update({'a_per_second': a['requests_per_second'], 'a_p99_us': a['p99_us'], 'a_5xx': a['5xx']}) + return row + + +def main(): + serve, rounds = Path(sys.argv[1]).resolve(), int(sys.argv[2]) + seconds = float(sys.argv[3]) if len(sys.argv) > 3 else 15 + work = Path(tempfile.mkdtemp(prefix='pure-apps-module-')) + try: + module = work / 'scores.pmod' + subprocess.run([str(AUP), 'build', str(ROOT / 'benchmarks' / 'http' / 'scores.aup'), '-o', str(module)], check=True) + for round_ in range(1, rounds + 1): + ways = ['processes', 'host', 'host1'] if round_ % 2 else ['host1', 'host', 'processes'] + for kind in ('alone', 'flood', 'both'): + for way in ways: + print(json.dumps(run(way, kind, seconds, serve, module, round_)), flush=True) + finally: + shutil.rmtree(work) + + +if __name__ == '__main__': + main() diff --git a/research/experiments/026-apps-on-one-host/memory.py b/research/experiments/026-apps-on-one-host/memory.py new file mode 100644 index 0000000..05c93c5 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/memory.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +"""What an app costs a host (docs/design/017): pure-serve with N apps of the +scoreboard (benchmarks/http/scores.aup), each written once and read once +(its store opened, its snapshot published, a reader of it used), in RAM; +then the host's own memory (smaps_rollup's Private_Dirty, RSS, PSS) and +threads. Beside it, one pure-serve of one app (--module) the same way: the +process an app costs when each app is a process. + +memory.py SERVE [N ...] +""" +import http.client +import json +import select +import shutil +import subprocess +import sys +import tempfile +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[2] +AUP = ROOT.parent / 'aup' / 'build' / 'aup' + + +def used(pid): + fields = {} + for line in Path(f'/proc/{pid}/smaps_rollup').read_text().splitlines()[1:]: + name, value = line.split(':') + fields[name] = int(value.split()[0]) + threads = int(Path(f'/proc/{pid}/status').read_text().split('Threads:')[1].split()[0]) + return {'private_dirty_kib': fields['Private_Dirty'], 'rss_kib': fields['Rss'], 'pss_kib': fields['Pss'], + 'threads': threads} + + +def touched(port, prefixes): + connection = http.client.HTTPConnection('127.0.0.1', port, timeout=30) + for prefix in prefixes: + for method, path, body in (('POST', f'{prefix}/inputs/score?points=1', b'k'), ('GET', f'{prefix}/views/total', None)): + connection.request(method, path, body, {'Content-Length': str(len(body))} if body else {}) + answer = connection.getresponse() + answer.read() + assert answer.status == 200, (path, answer.status) + connection.close() + + +def measured(args, prefixes): + process = subprocess.Popen([*map(str, args), '--port', '0'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + select.select([process.stdout], [], [], 30) + info = json.loads(process.stdout.readline()) + touched(info['port'], prefixes) + result = used(process.pid) + process.terminate() + process.communicate(timeout=60) + return result + + +def main(): + serve = Path(sys.argv[1]).resolve() + counts = [int(n) for n in sys.argv[2:]] or [1, 10, 100] + work = Path(tempfile.mkdtemp(prefix='pure-apps-memory-', dir='/dev/shm')) + try: + module = work / 'scores.pmod' + subprocess.run([str(AUP), 'build', str(ROOT / 'benchmarks' / 'http' / 'scores.aup'), '-o', str(module)], check=True) + one = measured([serve, '--module', module, '--store', work / 'one', '--threads', 1], ['']) + print(json.dumps({'way': 'process', 'apps': 1, **one}), flush=True) + for n in counts: + manifest = work / f'apps-{n}.conf' + manifest.write_text(''.join(f'app{i} {module} {work / f"store-{n}-{i}"}\n' for i in range(n))) + host = measured([serve, '--apps', manifest, '--threads', 1, '--workers', 2], [f'/app{i}' for i in range(n)]) + print(json.dumps({'way': 'host', 'apps': n, **host}), flush=True) + finally: + shutil.rmtree(work) + + +if __name__ == '__main__': + main() diff --git a/research/experiments/026-apps-on-one-host/runs.sh b/research/experiments/026-apps-on-one-host/runs.sh new file mode 100755 index 0000000..f2ddf19 --- /dev/null +++ b/research/experiments/026-apps-on-one-host/runs.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# The runs of docs/design/017's first stage, from the repository's root, in +# steps (each fits a session's background limit), the binaries kept in +# $WORK (default /tmp/pure-026) between them: +# runs.sh build pure-serve before 017 (0b5fa1d, in a scratch worktree) and after +# runs.sh memory what an app costs a host (memory.py) +# runs.sh isolation two apps as two processes or one host (isolation.py, five rounds of 15 s) +# runs.sh pairs A B a host of one app before and after, rounds A to B in turns as 025 ran them: +# TPC-C in RAM (W=1, 64 terminals) and the bank's queries +# runs.sh counts the bank queries' instructions before and after (025's count.py) +# Each timed step waits until the Pi has been quiet (the last minute's load below 1.5). +set -e +out=research/experiments/026-apps-on-one-host +work=${WORK:-/tmp/pure-026} +quiet() { until awk '{ exit !($1 < 1.5) }' /proc/loadavg; do sleep 10; done; } +case $1 in +build) + mkdir -p $work + git worktree add -q --detach $work/tree 0b5fa1d + make -C $work/tree -s build/pure-serve + cp $work/tree/build/pure-serve $work/pure-serve-before + git worktree remove --force $work/tree + make -s build/pure-serve + cp build/pure-serve $work/pure-serve-after + (cd benchmarks/http && cc -O2 -std=c17 -o load load.c) ;; +memory) + quiet + python3 $out/memory.py $work/pure-serve-after 1 10 100 > $out/2026-10-01-memory-linux-aarch64.jsonl ;; +isolation) + quiet + echo "isolation $(uptime)" >> $out/2026-10-01-load.txt + python3 $out/isolation.py $work/pure-serve-after 5 15 > $out/2026-10-01-isolation-linux-aarch64.jsonl ;; +pairs) + for round in $(seq $2 $3); do + first=before second=after + if [ $((round % 2)) = 0 ]; then first=after second=before; fi + for version in $first $second; do + quiet + echo "$round $version $(uptime)" >> $out/2026-10-01-load.txt + python3 benchmarks/tpcc/run.py --serve $work/pure-serve-$version --warehouses 1 --check 0 --terminals 64 \ + --sqlite-threads '' --sqlite-group '' --seconds 20 > $out/2026-10-01-tpcc-$version-$round-linux-aarch64.jsonl + python3 benchmarks/bank/queries.py --serve $work/pure-serve-$version \ + > $out/2026-10-01-queries-$version-$round-linux-aarch64.jsonl + done + done ;; +counts) + python3 research/experiments/025-i64-cost/count.py $work/pure-serve-before $work/pure-serve-after \ + $work/pure-serve-before $work/pure-serve-after > $out/2026-10-01-counts-linux-aarch64.jsonl ;; +*) + echo "runs.sh build|memory|isolation|pairs FIRST LAST|counts" >&2 + exit 2 ;; +esac |
