diff options
20 files changed, 547 insertions, 2 deletions
diff --git a/docs/research/106-tpcc-conditions-first.md b/docs/research/106-tpcc-conditions-first.md index a0eae9d..919bcb4 100644 --- a/docs/research/106-tpcc-conditions-first.md +++ b/docs/research/106-tpcc-conditions-first.md @@ -2,8 +2,8 @@ 2026-09-30. [외부 리뷰 004](../outside-feedback/feedback-004.md)의 넷째 권고에서 시작한다. [092](092-tpcc.md)의 비교는 창고 하나(W=1)였고, SQLite는 트랜잭션마다 커밋했다. 리뷰는 SD 카드에서의 약 90배가 대부분 그룹 커밋과 로그 쓰기 구조에서 -온다고 읽었다. 그래서 SQLite도 묶어 커밋하게 하고, 창고를 넷으로 늘려 다시 잰다. 아래는 측정 행렬을 돌리기 전에 정했다 -(하니스를 확인하려고 5초짜리 시험을 몇 번 돌린 뒤다). +온다고 읽었다. 그래서 SQLite도 묶어 커밋하게 하고, 창고를 넷으로 늘려 다시 잰다. 아래 착수 기준은 조율과 측정 행렬을 +돌리기 전에 정해 커밋했다(`7f71c85`, 하니스를 확인하려고 5초짜리 시험을 몇 번 돌린 뒤다). 결과를 본 뒤에 고치지 않았다. 착수 기준: @@ -26,6 +26,26 @@ `mmap_size` 1 GiB, 연결마다 캐시 64 MiB, `temp_store=MEMORY`(SAVEPOINT의 하위 저널을 메모리에)를 견준다. SD 카드에서는 페이지 크기 4,096 B와 1,024 B를 견준다. 묶어 커밋하는 실행의 처리량이 높은 쪽을 쓴다. +## 쉬운 말로 + +- **SD 카드에서의 차이는 90배에서 4–11배로 줄었지만, 2배를 훨씬 넘게 남았다.** + - 092의 SQLite는 기본 설정으로 트랜잭션마다 커밋했다. 이번에는 SQLite도 Pure처럼 기다리는 거래를 묶어 한 번에 커밋하고, + 카드에 맞게 조율했다(페이지 1 KiB, 체크포인트는 WAL 40 MB마다). SQLite가 스스로 10배 넘게 빨라졌다. + - 그래도 Pure가 같은 터미널 수에서 4.2–10.8배다(W=1 64터미널: 4,980건 대 739건). + - 남은 차이는 거래당 장치에 쓰는 바이트에서 온다. SQLite는 행 하나를 바꿔도 그 행이 든 페이지를 통째로 쓴다(거래당 7.6–15 + KB). Pure는 바뀐 필드와 더한 행만 기록한다(0.7–1.3 KB). 8–18배다. +- **RAM에서는 Pure가 3.2–3.5배다.** 조율한 SQLite의 최고(10,357건)에 대해 Pure는 36,567건(W=1)이다. RAM에서는 아낄 동기화가 + 없어서, 묶어 커밋해도 SQLite가 빨라지지 않는다. Pure는 HTTP와 JSON까지 하면서도 거래당 CPU가 SQLite의 절반이다. +- **창고가 넷이어도 맞았다.** 같은 거래 2만 건 뒤 세 쪽(Pure, SQLite, 묶어 커밋하는 SQLite)의 모든 표가 같았다. 원격 재고와 + 원격 결제가 들어간다. 모든 실행 뒤 일관성 조건이 성립했고, 실패한 거래는 없었다. +- **RAM에서 Pure의 한계는 소유자 스레드 하나다.** W=4에서 터미널을 16에서 64로 늘려도 처리량이 늘지 않았고, 소유자가 코어의 + 94%를 썼다. 서버의 세 코어 가운데 1.74개만 썼다. 소유자의 바쁜 시간 가운데 약 3분의 1은 스냅숏이 공유한 노드를 복사하고 + 놓는 데 간다. SD 카드에서는 소유자가 코어의 7–15%만 쓴다(카드가 한계다). +- **메모리는 기준 안이다.** Pure는 모든 상태를 메모리에 든다. 상주가 상태 바이트의 1.6–2.2배였다(기준 2.5배). 같은 실행에서 + SQLite는 최고 상주가 190 MiB 아래였고, 데이터는 파일(최대 124 MiB)에 있다. 메모리를 더 쓰는 것이 Pure의 값이다. +- 아직 모르는 것: 레코드를 기록하는 다른 저장소(RocksDB 같은 LSM)와는 견주지 않았다. SD 카드에서의 이점은 레코드 로그가 + 페이지 WAL보다 적게 쓰는 데서 오므로, 그런 저장소와의 차이는 더 작을 것이다. + ## 방법 [`benchmarks/tpcc/run.py`](../../benchmarks/tpcc/run.py)와 [`sqlite-tpcc.c`](../../benchmarks/tpcc/sqlite-tpcc.c)에 SQLite의 @@ -42,3 +62,156 @@ - **행렬.** RAM(`/dev/shm`)과 SD 카드(ext4), 각각 W=1과 W=4. Pure 16·64터미널, SQLite 1·4스레드, 묶어 커밋하는 SQLite 16·64터미널. RAM은 20초, SD 카드는 30초씩이다. SD 카드는 상태에 따라 흔들리므로 세 번 돌려 범위를 적는다. - 서버와 SQLite는 코어 0–2, Pure의 부하 생성기(HTTP/1.1, JSON)는 코어 3이다. SQLite는 프로세스 안에서 돈다. +- 실행마다 앞에서 `sync`로 쌓인 쓰기를 비운다(적재와 복사가 남긴 것이 먼저 도는 쪽의 몫이 되지 않게). Pure는 제 실행이 + 끝나면 멈춘다. 그 체크포인트가 SQLite의 실행 동안 장치를 쓰지 않게 하려는 것이다. +- 같은 거래 2만 건의 확인은 W마다 RAM에서 한 번 했다. 장치와 상관없는 확인이고, SD 카드에서 한 터미널로 거래마다 동기화하며 + 돌리면 SQLite 쪽만 몇 분이 걸린다. SD 카드의 실행도 끝날 때마다 clause 3.3.2를 확인했다. + +## SQLite 설정 고르기 + +W=1에서 SQLite만 돌렸다([원시 결과](../../research/experiments/022-tpcc-grouped/), `tune-`로 시작하는 파일). + +**RAM, 20초, 초당 거래.** + +| SQLite | 1스레드 | 4스레드 | 묶음 16 | 묶음 64 | +|---|---:|---:|---:|---:| +| 기본값 | 9,390 | 9,083 | 7,872 | 8,555 | +| mmap 1 GiB, 캐시 64 MiB, `temp_store=MEMORY` | 9,886 | 9,470 | 9,680 | 10,230 | +| 여기에 체크포인트를 WAL 40 MB마다 | 10,361 | 10,272 | 9,890 | 10,211 | + +기본값의 묶음은 데이터베이스가 RAM에 있는데도 거래당 7.6 KB(16터미널)와 1.9 KB(64터미널)를 장치에 썼다. SAVEPOINT의 +하위 저널이 64 KiB를 넘으면 임시 파일로 넘치는데, 그 파일이 SD 카드의 `/var/tmp`에 생긴다. `temp_store=MEMORY`가 이것을 +막는다. + +**SD 카드, 30초, 초당 거래(거래당 장치에 쓴 바이트).** + +| SQLite | 1스레드 | 묶음 16 | 묶음 64 | +|---|---:|---:|---:| +| 페이지 4,096 B | 72 (60.7 KB) | 162 (41.8 KB) | 139 (29.3 KB) | +| 페이지 1,024 B | 132 (31.9 KB) | 203 (22.5 KB) | 263 (17.9 KB) | +| 1,024 B, 체크포인트를 WAL 40 MB마다 | 87 (40.9 KB) | 694 (10.7 KB) | 594 (7.7 KB) | + +- 기준대로 SD 카드에서는 페이지를 1,024 B로 한다. SQLite는 행 하나를 바꿔도 그 행이 든 페이지를 통째로 WAL에 쓰므로, + 페이지가 작을수록 덜 쓴다. +- **체크포인트 간격은 기준에 없던 조율이다.** SQLite에 유리한 쪽이라 더했다. 기본값은 1,000페이지마다다. 1 KiB 페이지라면 + WAL 1 MB마다 체크포인트가 데이터베이스 파일의 페이지를 되쓴다. 40 MB마다로 늘리면 한 페이지를 여러 번 바꿔도 한 번만 + 되쓴다. 묶음 16의 처리량이 3.4배가 됐다. RAM에서도 1스레드의 New-Order p99가 1.2 ms에서 0.2 ms가 됐다(체크포인트가 그 + 꼬리였다). 그래서 두 장치 모두 이 간격을 쓴다([`run.py`](../../benchmarks/tpcc/run.py)의 `tuned`). +- 1스레드는 이 간격에서 오히려 느려졌다(132 → 87건). 원인은 재지 않았다. WAL이 자라는 동안에는 커밋마다 파일 크기까지 + 동기화해야 하는데(ext4 저널), 그 몫일 수 있다. 묶음은 그 비용을 거래들이 나눠 진다. 판정은 묶음으로 한다. + +## 결과 + +원시 결과는 [022-tpcc-grouped](../../research/experiments/022-tpcc-grouped/)에 있다. 명령은 그 안의 `runs.sh`이고, 아래 표는 +`tables.py`가 만든다. + +**정합성.** W=1과 W=4 모두, 같은 거래 2만 건 뒤 Pure와 SQLite, SQLite와 묶어 커밋하는 SQLite의 아홉 표가 행마다 같았다 +(되돌린 New-Order도 W=1 90건, W=4 93건으로 같다). 실패한 거래는 없었다. 조율까지 시간 잰 실행 70번 모두, 끝난 뒤 clause +3.3.2.1–4가 성립했고 실패한 거래가 없었다. + +**RAM(tmpfs), 20초.** 칸마다 W=1 / W=4다. + +| | 초당 거래 | New-Order p99 (ms) | 거래당 CPU (µs) | 소유자의 코어 몫 | +|---|---:|---:|---:|---:| +| Pure, 16터미널 | 35,672 / 32,765 | 1.1 / 1.0 | 45.6 / 48.1 | 0.83 / 0.86 | +| Pure, 64터미널 | 36,567 / 32,255 | 4.4 / 3.6 | 48.9 / 53.9 | 0.90 / 0.94 | +| SQLite, 1스레드 | 10,357 / 10,272 | 0.2 / 0.2 | 96.5 / 97.1 | | +| SQLite, 4스레드 | 10,219 / 9,780 | 0.3 / 0.3 | 98.4 / 103.9 | | +| SQLite 묶음, 16터미널 | 9,843 / 8,828 | 4.4 / 8.2 | 134.0 / 147.2 | | +| SQLite 묶음, 64터미널 | 10,271 / 8,876 | 12.3 / 17.4 | 131.2 / 147.3 | | + +- Pure는 조율한 SQLite의 최고보다 3.5배(W=1), 3.2배(W=4)다. 같은 터미널 수의 묶음 SQLite보다는 3.6–3.7배이고, New-Order + p99는 2.8–8.2배 짧다. +- 거래당 CPU는 Pure가 45.6–53.9 µs(서버 프로세스 전체, HTTP와 JSON 포함), SQLite가 96.5–147.3 µs(프로세스 안, HTTP 없음)다. +- RAM에서는 묶어 커밋해도 SQLite가 빨라지지 않는다. 동기화가 거의 공짜라 아낄 것이 없고, 작성자에게 넘기고 SAVEPOINT를 두는 + 값(거래당 35–43 µs)만 든다. +- W=4에서 Pure는 W=1보다 8–12%, 묶음 SQLite는 10–14% 느리다. + +**SD 카드(ext4), 30초, 세 판의 중앙값(범위).** SQLite의 페이지는 1 KiB다. + +| | 초당 거래, W=1 | 초당 거래, W=4 | New-Order p99 (ms) | 거래당 장치 바이트 | +|---|---:|---:|---:|---:| +| Pure, 16터미널 | 2,138 (2,136–2,672) | 2,247 (1,893–2,314) | 59 / 59 | 1,324 / 1,245 | +| Pure, 64터미널 | 4,980 (4,864–6,083) | 4,590 (4,324–5,540) | 78 / 94 | 680 / 682 | +| SQLite, 1스레드 | 110 (96–124) | 84 (80–89) | 86 / 115 | 38,982 / 40,111 | +| SQLite, 4스레드 | 267 (152–293) | 161 (159–222) | 78 / 90 | 18,110 / 25,886 | +| SQLite 묶음, 16터미널 | 505 (485–520) | 335 (333–546) | 475 / 590 | 10,871 / 15,001 | +| SQLite 묶음, 64터미널 | 739 (578–853) | 426 (302–612) | 1,245 / 1,770 | 7,647 / 12,067 | + +(p99와 바이트는 W=1 / W=4다.) + +- 같은 터미널 수에서 Pure는 묶음 SQLite의 4.2배(W=1, 16터미널), 6.7배(W=1, 64), 6.7배(W=4, 16), 10.8배(W=4, 64)다. + New-Order p99는 8–19배 짧다. +- **거래당 장치에 쓴 바이트가 차이를 설명한다.** 묶음 SQLite는 7.6–15.0 KB, Pure는 0.68–1.32 KB를 썼다(8–18배). + - SQLite의 WAL은 바뀐 행이 든 페이지를 통째로 쓰고, 체크포인트가 그 페이지를 데이터베이스 파일에 한 번 더 쓴다. + - 창고가 넷이면 거래들이 더 흩어진 페이지를 건드린다. 한 커밋 안에서 겹치는 페이지가 줄어, SQLite는 거래당 W=1의 + 1.4–1.6배를 쓴다. + - Pure는 바뀐 필드(수 하나에 약 7 B)와 더한 행(주문 줄 약 24 B)을 기록하므로 W와 거의 상관없다. +- 장치가 받은 양으로 보면, 묶음 SQLite(64터미널)는 초당 5.1–5.7 MB를 썼다. 이 카드의 지속 쓰기(초당 3–8 MB, + [092](092-tpcc.md)) 안쪽이라, 바이트가 한계로 보인다. Pure는 초당 3.1–3.4 MB를 쓰면서 거래는 6.7–10.8배를 넣었다. +- Pure의 SD 처리량은 W=4가 W=1의 105%(16터미널), 92%(64터미널)다. 체크포인트는 W=1에서 두 실행을 합쳐 8–12번, W=4에서 + 3–5번 돌았다. 목록이 크면 그 이미지를 다시 쓰는 기준도 크다. + +**메모리.** Pure는 모든 상태를 메모리에 든다. 같은 행을 적재한 직후, Pure의 상주는 38 MiB(W=1)와 104 MiB(W=4)이고 SQLite의 +파일은 13.8 MiB와 52.8 MiB다. SQLite는 필요한 페이지만 읽어 든다. + +| | Pure 상주 | 상태 바이트 | 배수 | Pure 저장소 | SQLite 최고 상주 | SQLite 파일(직접 / 묶음) | +|---|---:|---:|---:|---:|---:|---:| +| RAM, W=1 | 835 MiB | 375 MiB | 2.23 | 434 MiB | 41–124 MiB | 84 / 82 MiB | +| RAM, W=4 | 846 MiB | 402 MiB | 2.10 | 411 MiB | 60–188 MiB | 124 / 118 MiB | +| SD, W=1 | 150–179 MiB | 73–85 MiB | 2.06–2.09 | 70–87 MiB | 17–89 MiB | 15–16 / 19–21 MiB | +| SD, W=4 | 209–239 MiB | 130–142 MiB | 1.61–1.68 | 104–128 MiB | 23–136 MiB | 54–55 / 56–58 MiB | + +Pure의 값은 Pure의 실행이 모두 끝난 뒤다. 상태는 거의 모두 실행이 더한 주문 줄이다(RAM W=1에서 144만 건의 거래로 22 MiB에서 +375 MiB). SQLite의 최고 상주는 실행마다의 범위다(SD는 세 판의 중앙값). + +**소유자가 하는 일(RAM, W=1, 64터미널).** Pure만 90초 돌리며 gdb로 소유자 스레드의 스택을 80번 떴다 +([`owner-samples.py`](../../research/experiments/022-tpcc-grouped/owner-samples.py)). 붙을 때마다 프로세스가 멈추므로 그동안의 +처리량은 33,376건이었다. 표본마다 스택에 든 함수로 나눴다. + +| 소유자가 하던 일 | 표본 | +|---|---:| +| 항목 찾기(목록의 B+트리를 내려간다, `pure_list_seek`) | 24 (30%) | +| 요청 기다리기 | 19 (24%) | +| 스냅숏이 공유한 노드를 고치기 전에 복사하기(`own`, `new_node`, `retire`) | 15 (19%) | +| 스냅숏 게시와 놓은 노드 해제(`publish`) | 5 (6%) | +| 해석기(`run`, `dispatch`) | 5 (6%) | +| 항목 바꾸기, 항목 읽기, 답 넘기기 | 각 3 (4%) | +| 저장(`pure_app_save`)과 그 밖 | 3 (4%) | + +- 바쁜 시간(표본 61개)의 39%가 찾기, 33%가 스냅숏에 딸린 복사와 해제다. 저장은 1%다. +- pure-serve는 저장마다 스냅숏을 게시한다. 읽기가 방금 답한 쓰기를 보게 하려는 것이다. 게시한 뒤 처음 고치는 노드는 그 + 스냅숏과 공유되어 있어 복사한다. RAM에서는 저장이 초당 약 1,000번이라, 무작위로 흩어진 항목(재고, 고객)을 고칠 때마다 + 거의 매번 그 잎을 복사한다. + +## 판정 + +1. **SD 카드에서의 주장: 2배 넘게 남았다.** 같은 터미널 수에서 4.2–10.8배다. 기준대로 차이가 어디서 오는지 적었다. 거래당 + 장치에 쓴 바이트가 8–18배 다르다. + - 092의 90배 가운데, 묶어 커밋하기와 조율이 SQLite를 10–15배 빠르게 했다(50건에서 505–739건). 남은 4–11배가 레코드를 + 기록하는 로그의 몫이다. + - Pure는 묶어 커밋하는 구조를 앱 코드 없이 준다. SQLite에서는 작성자 스레드와 SAVEPOINT를 손으로 짰다. + - README와 CHECKPOINT의 SD 비교를 이 비교로 바꿨다. 90배는 기본 설정으로 거래마다 커밋하는 SQLite에 대한 값이었다. +2. **소유자 하나: 병목이다.** W=4 RAM, 64터미널에서 소유자가 코어의 0.94를 썼고, 처리량은 16터미널보다 1.6% 적었다. 서버는 + 코어 셋 가운데 1.74개만 썼다. 기준대로 키로 나눈 소유자를 다음 설계로 올린다. [084](084-parallel-syncs.md)는 "앱의 적용이 + CPU 하나를 넘을 때 소유자를 나누되 동기화는 장치마다 한 줄로 모은다"고 했다. TPC-C는 RAM에서 그 조건에 닿았다. + - 설계는 표본이 보인 것과 함께 본다. 소유자 시간의 3분의 1이 스냅숏 때문에 드는 복사와 해제다. 이것을 줄이면 키로 나눌 수 + 없는 앱(한 키에 모이는 상태)까지 모두 빨라진다. + - 나누기는 창고를 넘는 거래를 두 소유자가 함께 해야 하는 문제를 새로 만든다. New-Order의 약 10%가 다른 창고의 재고를 + 쓰고, Payment의 15%가 다른 창고의 고객에게 간다. + - SD 카드에서는 소유자가 코어의 7–15%만 쓴다. 이 장치에서 쓰기를 늘리는 길은 여전히 거래당 바이트와 동기화다(084 그대로). +3. **체크포인트: 다음 일이 아니다.** SD 카드에서 W=4가 W=1의 92–105%다(기준은 절반 아래). +4. **메모리: 기준 안이다.** Pure의 상주가 상태 바이트의 1.61–2.23배다(기준 2.5배). + +## 한계와 다음 + +- W=4까지다. RAM에서 저장소와 데이터베이스까지 메모리에 들어야 해서다. SD 카드의 실행은 30초다. W=4에서 Pure의 체크포인트는 + 두 실행을 합쳐 3–5번이라, 더 긴 실행에서 체크포인트가 어떻게 겹치는지는 재지 않았다. +- SQLite는 프로세스 안에서 돌고 HTTP도 JSON도 없다. Pure의 수에는 그것이 들어 있다. CPU 비교는 SQLite에 유리하다. +- 규격의 생각 시간, 창고당 터미널 10개, 텍스트 필드는 없다(092와 같다). 공식 tpmC가 아니다. +- 1스레드 SQLite가 큰 WAL에서 느려진 까닭은 재지 않았다. +- 소유자 표본은 80개다. 한 칸이 ±5%포인트쯤 흔들린다. gdb가 붙을 때마다 프로세스가 멈춘다. +- 레코드를 기록하는 저장소(LSM 같은)와는 견주지 않았다. + +다음은 **소유자의 시간**이다. 설계 노트에서 두 길을 함께 다룬다. 스냅숏이 공유한 잎을 고칠 때 덜 복사하는 길(모든 앱에 +듣는다)과, 키로 나눈 소유자가 한 저장소의 그룹 커밋을 함께 쓰는 길(코어를 더 쓴다)이다. 덜 복사하는 쪽을 먼저 잰다. diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-owner-run-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-owner-run-linux-aarch64.jsonl new file mode 100644 index 0000000..68897c0 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-owner-run-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.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 33376, "new_orders_per_minute": 891806, "undone_new_orders": 13427, "errors": 0, "new_order": {"done": 1351136, "failed": 0, "p50_us": 1792, "p99_us": 5376}, "payment": {"done": 1292445, "failed": 0, "p50_us": 1792, "p99_us": 5376}, "order_status": {"done": 119936, "failed": 0, "p50_us": 288, "p99_us": 2688}, "delivery": {"done": 119938, "failed": 0, "p50_us": 1792, "p99_us": 5376}, "stock_level": {"done": 120359, "failed": 0, "p50_us": 320, "p99_us": 3072}, "server_threads": "3", "cpu_us_per_transaction": 51.3, "core_shares": {"pure-owner": 0.85, "pure-checkpoint": 0.02}, "resident_mib": 1625.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 1658.0, "pure_state_mib": 744.8, "pure_store_mib": 788.5, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 92178, "burst_events": 2750176, "checkpoints": 141}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-owner-stacks-linux-aarch64.txt b/research/experiments/022-tpcc-grouped/2026-09-30-owner-stacks-linux-aarch64.txt new file mode 100644 index 0000000..eefecda --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-owner-stacks-linux-aarch64.txt @@ -0,0 +1,80 @@ +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +upper < pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < malloc < new_node < own < descend < pure_list_set < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? +descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +child_at < descend < prepare < pure_list_insert < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +decode_cell < decode_item < pure_list_read < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +upper < pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < ?? < free < pure_retired_free < pure_snapshot_release < pure_snapshot_release < publish < after_save < save_burst < save_burst < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < hand_back < execute < execute < run_owner < ?? < ?? +run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_app_save < save_burst < save_burst < execute < execute < run_owner < ?? < ?? +lower < pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +cell_at < cell_at < pure_list_get < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < realloc < retire < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +decode_item < pure_list_read < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +child < leaf_of < pure_list_get < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < hand_back < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < free < pure_retired_free < pure_snapshot_release < pure_snapshot_release < publish < after_save < save_burst < save_burst < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < malloc < new_node < own < descend < prepare < pure_list_insert < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +lower < pure_list_seek < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +?? < pthread_mutex_lock < run_owner < ?? < ?? +decode_item < pure_list_read < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < malloc < new_node < own < descend < pure_list_set < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < ?? < free < pure_retired_free < pure_snapshot_release < pure_snapshot_release < publish < after_save < save_burst < save_burst < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? +pure_retired_pass < pure_save_snapshot < pure_app_snapshot < publish < after_save < save_burst < save_burst < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +child_at < descend < prepare < pure_list_insert < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < free < pure_retired_free < pure_snapshot_release < pure_snapshot_release < publish < after_save < save_burst < save_burst < execute < execute < run_owner < ?? < ?? +?? < ?? < malloc < new_node < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? +lower < pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < malloc < new_node < prepare < pure_list_insert < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +upper < pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < malloc < new_node < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +new_node < prepare < pure_list_insert < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < malloc < new_node < own < descend < prepare < pure_list_insert < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +sum < sum < sum_path < sum_path < place < pure_list_insert < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < malloc < new_node < prepare < pure_list_insert < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < hand_back < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +upper < pure_list_seek < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? +pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_timedwait < run_owner < ?? < ?? +upper < pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +fstatat64 < refresh < pure_store_pin < execute < execute < run_owner < ?? < ?? +?? < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +child < sum_path < sum_path < place < pure_list_insert < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +pure_list_seek < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +child_at < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +malloc < new_node < own < descend < pure_list_set < run < run < dispatch < message < pure_app_message_fields < apply_input < apply_effect < execute < execute < run_owner < ?? < ?? +?? < ?? < ?? < pthread_cond_wait < run_owner < ?? < ?? diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-ram-w1-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-ram-w1-linux-aarch64.jsonl new file mode 100644 index 0000000..32fcc21 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-ram-w1-linux-aarch64.jsonl @@ -0,0 +1,9 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.73, "sqlite_load_s": 1.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "same transactions", "transactions": 20000, "pure": {"new_order": 9036, "payment": 8518, "order_status": 811, "delivery": 796, "stock_level": 839}, "sqlite": {"new_order": 9036, "payment": 8518, "order_status": 811, "delivery": 796, "stock_level": 839}, "undone_new_orders": [90, 90], "failed": [0, 0], "differing": {}, "grouped_sqlite_differing": {}, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 16, "transactions_per_second": 35672, "new_orders_per_minute": 954531, "undone_new_orders": 3263, "errors": 0, "new_order": {"done": 321442, "failed": 0, "p50_us": 464, "p99_us": 1088}, "payment": {"done": 306457, "failed": 0, "p50_us": 432, "p99_us": 1024}, "order_status": {"done": 28612, "failed": 0, "p50_us": 96, "p99_us": 496}, "delivery": {"done": 28480, "failed": 0, "p50_us": 432, "p99_us": 992}, "stock_level": {"done": 28445, "failed": 0, "p50_us": 152, "p99_us": 512}, "server_threads": "3", "cpu_us_per_transaction": 45.6, "core_shares": {"pure-owner": 0.83, "pure-checkpoint": 0.02}, "resident_mib": 439.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 36567, "new_orders_per_minute": 977959, "undone_new_orders": 3138, "errors": 0, "new_order": {"done": 329127, "failed": 0, "p50_us": 1728, "p99_us": 4352}, "payment": {"done": 314476, "failed": 0, "p50_us": 1728, "p99_us": 4352}, "order_status": {"done": 29356, "failed": 0, "p50_us": 256, "p99_us": 2176}, "delivery": {"done": 29316, "failed": 0, "p50_us": 1728, "p99_us": 4352}, "stock_level": {"done": 29068, "failed": 0, "p50_us": 304, "p99_us": 2176}, "server_threads": "3", "cpu_us_per_transaction": 48.9, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 835.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 1, "transactions_per_second": 10357, "batches": 0, "batched": 0, "new_orders_per_minute": 277623, "undone_new_orders": 984, "new_order": {"done": 93553, "failed": 0, "p50_us": 144, "p99_us": 248}, "payment": {"done": 88827, "failed": 0, "p50_us": 24, "p99_us": 42}, "order_status": {"done": 8229, "failed": 0, "p50_us": 16, "p99_us": 29}, "delivery": {"done": 8365, "failed": 0, "p50_us": 56, "p99_us": 384}, "stock_level": {"done": 8232, "failed": 0, "p50_us": 256, "p99_us": 368}, "cpu_seconds": 19.988, "peak_resident_kib": 101504, "written_bytes": 0, "cpu_us_per_transaction": 96.5, "peak_resident_mib": 99.1, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 4, "transactions_per_second": 10219, "batches": 0, "batched": 0, "new_orders_per_minute": 273662, "undone_new_orders": 982, "new_order": {"done": 92610, "failed": 0, "p50_us": 152, "p99_us": 256}, "payment": {"done": 88112, "failed": 0, "p50_us": 24, "p99_us": 44}, "order_status": {"done": 8202, "failed": 0, "p50_us": 19, "p99_us": 36}, "delivery": {"done": 8253, "failed": 0, "p50_us": 56, "p99_us": 120}, "stock_level": {"done": 8111, "failed": 0, "p50_us": 256, "p99_us": 512}, "cpu_seconds": 20.198, "peak_resident_kib": 41600, "written_bytes": 0, "cpu_us_per_transaction": 98.4, "peak_resident_mib": 40.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 16, "transactions_per_second": 9843, "batches": 15592, "batched": 181250, "new_orders_per_minute": 263618, "undone_new_orders": 887, "new_order": {"done": 88807, "failed": 0, "p50_us": 1600, "p99_us": 4352}, "payment": {"done": 84493, "failed": 0, "p50_us": 1472, "p99_us": 4096}, "order_status": {"done": 7944, "failed": 0, "p50_us": 128, "p99_us": 864}, "delivery": {"done": 7950, "failed": 0, "p50_us": 1536, "p99_us": 4096}, "stock_level": {"done": 7776, "failed": 0, "p50_us": 704, "p99_us": 1792}, "cpu_seconds": 26.387, "peak_resident_kib": 78832, "written_bytes": 0, "cpu_us_per_transaction": 134.0, "peak_resident_mib": 77.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 64, "transactions_per_second": 10271, "batches": 3786, "batched": 189637, "new_orders_per_minute": 274098, "undone_new_orders": 889, "new_order": {"done": 92597, "failed": 0, "p50_us": 5888, "p99_us": 12288}, "payment": {"done": 88763, "failed": 0, "p50_us": 5632, "p99_us": 12288}, "order_status": {"done": 8349, "failed": 0, "p50_us": 232, "p99_us": 1600}, "delivery": {"done": 8277, "failed": 0, "p50_us": 5632, "p99_us": 12288}, "stock_level": {"done": 8195, "failed": 0, "p50_us": 1088, "p99_us": 3328}, "cpu_seconds": 27.052, "peak_resident_kib": 127264, "written_bytes": 0, "cpu_us_per_transaction": 131.2, "peak_resident_mib": 124.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 835.0, "pure_state_mib": 374.8, "pure_store_mib": 434.4, "sqlite_files_mib": 84.0, "grouped_sqlite_files_mib": 82.2, "pure_counts": {"bursts": 121457, "burst_events": 1341257, "checkpoints": 71}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-ram-w4-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-ram-w4-linux-aarch64.jsonl new file mode 100644 index 0000000..2168ba5 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-ram-w4-linux-aarch64.jsonl @@ -0,0 +1,9 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 4, "rows": 1975536, "generate_s": 2.01, "pure_load_s": 2.62, "sqlite_load_s": 6.01, "sqlite_page_size": 4096, "pure_resident_mib": 104.1, "sqlite_file_mib": 52.8} +{"step": "same transactions", "transactions": 20000, "pure": {"new_order": 8875, "payment": 8786, "order_status": 777, "delivery": 777, "stock_level": 785}, "sqlite": {"new_order": 8875, "payment": 8786, "order_status": 777, "delivery": 777, "stock_level": 785}, "undone_new_orders": [93, 93], "failed": [0, 0], "differing": {}, "grouped_sqlite_differing": {}, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 16, "transactions_per_second": 32765, "new_orders_per_minute": 875580, "undone_new_orders": 2931, "errors": 0, "new_order": {"done": 294794, "failed": 0, "p50_us": 512, "p99_us": 992}, "payment": {"done": 281257, "failed": 0, "p50_us": 480, "p99_us": 928}, "order_status": {"done": 26602, "failed": 0, "p50_us": 84, "p99_us": 480}, "delivery": {"done": 26342, "failed": 0, "p50_us": 496, "p99_us": 928}, "stock_level": {"done": 26305, "failed": 0, "p50_us": 152, "p99_us": 512}, "server_threads": "3", "cpu_us_per_transaction": 48.1, "core_shares": {"pure-owner": 0.86, "pure-checkpoint": 0.01}, "resident_mib": 489.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 64, "transactions_per_second": 32255, "new_orders_per_minute": 861888, "undone_new_orders": 2861, "errors": 0, "new_order": {"done": 290157, "failed": 0, "p50_us": 2048, "p99_us": 3584}, "payment": {"done": 277741, "failed": 0, "p50_us": 2048, "p99_us": 3584}, "order_status": {"done": 25824, "failed": 0, "p50_us": 256, "p99_us": 1280}, "delivery": {"done": 25767, "failed": 0, "p50_us": 2048, "p99_us": 3584}, "stock_level": {"done": 25609, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 53.9, "core_shares": {"pure-owner": 0.94, "pure-checkpoint": 0.01}, "resident_mib": 846.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 4, "terminals": 1, "transactions_per_second": 10272, "batches": 0, "batched": 0, "new_orders_per_minute": 274858, "undone_new_orders": 955, "new_order": {"done": 92607, "failed": 0, "p50_us": 144, "p99_us": 240}, "payment": {"done": 88252, "failed": 0, "p50_us": 25, "p99_us": 40}, "order_status": {"done": 8196, "failed": 0, "p50_us": 16, "p99_us": 27}, "delivery": {"done": 8200, "failed": 0, "p50_us": 56, "p99_us": 416}, "stock_level": {"done": 8258, "failed": 0, "p50_us": 256, "p99_us": 368}, "cpu_seconds": 19.953, "peak_resident_kib": 118560, "written_bytes": 0, "cpu_us_per_transaction": 97.1, "peak_resident_mib": 115.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 4, "terminals": 4, "transactions_per_second": 9780, "batches": 0, "batched": 0, "new_orders_per_minute": 261003, "undone_new_orders": 824, "new_order": {"done": 88102, "failed": 0, "p50_us": 152, "p99_us": 288}, "payment": {"done": 84541, "failed": 0, "p50_us": 25, "p99_us": 52}, "order_status": {"done": 7899, "failed": 0, "p50_us": 19, "p99_us": 38}, "delivery": {"done": 7831, "failed": 0, "p50_us": 58, "p99_us": 128}, "stock_level": {"done": 7844, "failed": 0, "p50_us": 272, "p99_us": 608}, "cpu_seconds": 20.395, "peak_resident_kib": 61888, "written_bytes": 0, "cpu_us_per_transaction": 103.9, "peak_resident_mib": 60.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 4, "terminals": 16, "transactions_per_second": 8828, "batches": 13992, "batched": 162505, "new_orders_per_minute": 236816, "undone_new_orders": 807, "new_order": {"done": 79796, "failed": 0, "p50_us": 1728, "p99_us": 8192}, "payment": {"done": 75485, "failed": 0, "p50_us": 1600, "p99_us": 7936}, "order_status": {"done": 7088, "failed": 0, "p50_us": 136, "p99_us": 928}, "delivery": {"done": 7224, "failed": 0, "p50_us": 1664, "p99_us": 8192}, "stock_level": {"done": 7088, "failed": 0, "p50_us": 736, "p99_us": 1984}, "cpu_seconds": 26.015, "peak_resident_kib": 116656, "written_bytes": 0, "cpu_us_per_transaction": 147.2, "peak_resident_mib": 113.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 4, "terminals": 64, "transactions_per_second": 8876, "batches": 3230, "batched": 164115, "new_orders_per_minute": 238430, "undone_new_orders": 773, "new_order": {"done": 80502, "failed": 0, "p50_us": 6656, "p99_us": 17408}, "payment": {"done": 76519, "failed": 0, "p50_us": 6400, "p99_us": 17408}, "order_status": {"done": 6990, "failed": 0, "p50_us": 248, "p99_us": 1920}, "delivery": {"done": 7094, "failed": 0, "p50_us": 6400, "p99_us": 17408}, "stock_level": {"done": 6986, "failed": 0, "p50_us": 1152, "p99_us": 3584}, "cpu_seconds": 26.239, "peak_resident_kib": 192816, "written_bytes": 0, "cpu_us_per_transaction": 147.3, "peak_resident_mib": 188.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 846.4, "pure_state_mib": 402.1, "pure_store_mib": 410.7, "sqlite_files_mib": 123.7, "grouped_sqlite_files_mib": 117.9, "pure_counts": {"bursts": 111218, "burst_events": 1208752, "checkpoints": 28}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-1-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-1-linux-aarch64.jsonl new file mode 100644 index 0000000..6882fc1 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-1-linux-aarch64.jsonl @@ -0,0 +1,8 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 1.34, "sqlite_load_s": 1.72, "sqlite_page_size": 1024, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 16, "transactions_per_second": 2672, "new_orders_per_minute": 71361, "undone_new_orders": 368, "errors": 0, "new_order": {"done": 36109, "failed": 0, "p50_us": 4864, "p99_us": 36864}, "payment": {"done": 34444, "failed": 0, "p50_us": 4864, "p99_us": 38912}, "order_status": {"done": 3282, "failed": 0, "p50_us": 128, "p99_us": 448}, "delivery": {"done": 3283, "failed": 0, "p50_us": 4864, "p99_us": 36864}, "stock_level": {"done": 3190, "failed": 0, "p50_us": 192, "p99_us": 512}, "server_threads": "3", "cpu_us_per_transaction": 58.5, "core_shares": {"pure-owner": 0.09, "pure-checkpoint": 0.0}, "resident_mib": 79.3, "written_bytes_per_transaction": 1303.4, "device_bytes_per_transaction": 1298.1, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 6083, "new_orders_per_minute": 162380, "undone_new_orders": 789, "errors": 0, "new_order": {"done": 81987, "failed": 0, "p50_us": 7680, "p99_us": 73728}, "payment": {"done": 78571, "failed": 0, "p50_us": 7680, "p99_us": 73728}, "order_status": {"done": 7386, "failed": 0, "p50_us": 336, "p99_us": 928}, "delivery": {"done": 7322, "failed": 0, "p50_us": 7680, "p99_us": 73728}, "stock_level": {"done": 7251, "failed": 0, "p50_us": 400, "p99_us": 1024}, "server_threads": "3", "cpu_us_per_transaction": 51.1, "core_shares": {"pure-owner": 0.16, "pure-checkpoint": 0.0}, "resident_mib": 178.7, "written_bytes_per_transaction": 667.4, "device_bytes_per_transaction": 682.8, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 1, "transactions_per_second": 110, "batches": 0, "batched": 0, "new_orders_per_minute": 3014, "undone_new_orders": 7, "new_order": {"done": 1514, "failed": 0, "p50_us": 6144, "p99_us": 69632}, "payment": {"done": 1379, "failed": 0, "p50_us": 4352, "p99_us": 73728}, "order_status": {"done": 119, "failed": 0, "p50_us": 40, "p99_us": 104}, "delivery": {"done": 151, "failed": 0, "p50_us": 4352, "p99_us": 57344}, "stock_level": {"done": 136, "failed": 0, "p50_us": 496, "p99_us": 672}, "cpu_seconds": 0.724, "peak_resident_kib": 17168, "written_bytes": 88211456, "cpu_us_per_transaction": 219.5, "peak_resident_mib": 16.8, "written_bytes_per_transaction": 26738.8, "device_bytes_per_transaction": 38881.6, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 4, "transactions_per_second": 267, "batches": 0, "batched": 0, "new_orders_per_minute": 7041, "undone_new_orders": 48, "new_order": {"done": 3579, "failed": 0, "p50_us": 1792, "p99_us": 77824}, "payment": {"done": 3505, "failed": 0, "p50_us": 1216, "p99_us": 26624}, "order_status": {"done": 313, "failed": 0, "p50_us": 32, "p99_us": 68}, "delivery": {"done": 325, "failed": 0, "p50_us": 1344, "p99_us": 55296}, "stock_level": {"done": 307, "failed": 0, "p50_us": 416, "p99_us": 736}, "cpu_seconds": 1.293, "peak_resident_kib": 24096, "written_bytes": 231292928, "cpu_us_per_transaction": 161.0, "peak_resident_mib": 23.5, "written_bytes_per_transaction": 28807.2, "device_bytes_per_transaction": 18109.8, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 16, "transactions_per_second": 505, "batches": 1159, "batched": 13931, "new_orders_per_minute": 13534, "undone_new_orders": 63, "new_order": {"done": 6834, "failed": 0, "p50_us": 9216, "p99_us": 475136}, "payment": {"done": 6471, "failed": 0, "p50_us": 8704, "p99_us": 425984}, "order_status": {"done": 608, "failed": 0, "p50_us": 136, "p99_us": 960}, "delivery": {"done": 626, "failed": 0, "p50_us": 8704, "p99_us": 425984}, "stock_level": {"done": 610, "failed": 0, "p50_us": 768, "p99_us": 1856}, "cpu_seconds": 2.369, "peak_resident_kib": 45968, "written_bytes": 173047808, "cpu_us_per_transaction": 156.4, "peak_resident_mib": 44.9, "written_bytes_per_transaction": 11423.1, "device_bytes_per_transaction": 10877.7, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 64, "transactions_per_second": 739, "batches": 421, "batched": 21294, "new_orders_per_minute": 19581, "undone_new_orders": 92, "new_order": {"done": 10346, "failed": 0, "p50_us": 19456, "p99_us": 1245184}, "payment": {"done": 10010, "failed": 0, "p50_us": 18432, "p99_us": 1179648}, "order_status": {"done": 963, "failed": 0, "p50_us": 224, "p99_us": 2048}, "delivery": {"done": 938, "failed": 0, "p50_us": 19456, "p99_us": 1179648}, "stock_level": {"done": 961, "failed": 0, "p50_us": 1024, "p99_us": 3840}, "cpu_seconds": 3.434, "peak_resident_kib": 90976, "written_bytes": 184401920, "cpu_us_per_transaction": 147.9, "peak_resident_mib": 88.8, "written_bytes_per_transaction": 7942.2, "device_bytes_per_transaction": 7647.2, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 178.7, "pure_state_mib": 85.4, "pure_store_mib": 86.7, "sqlite_files_mib": 15.7, "grouped_sqlite_files_mib": 20.2, "pure_counts": {"bursts": 7882, "burst_events": 240657, "checkpoints": 12}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-2-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-2-linux-aarch64.jsonl new file mode 100644 index 0000000..00479ae --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-2-linux-aarch64.jsonl @@ -0,0 +1,8 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 4.8, "sqlite_load_s": 1.76, "sqlite_page_size": 1024, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 16, "transactions_per_second": 2136, "new_orders_per_minute": 57148, "undone_new_orders": 275, "errors": 0, "new_order": {"done": 28855, "failed": 0, "p50_us": 5376, "p99_us": 59392}, "payment": {"done": 27433, "failed": 0, "p50_us": 5120, "p99_us": 59392}, "order_status": {"done": 2608, "failed": 0, "p50_us": 124, "p99_us": 400}, "delivery": {"done": 2641, "failed": 0, "p50_us": 5376, "p99_us": 61440}, "stock_level": {"done": 2544, "failed": 0, "p50_us": 176, "p99_us": 480}, "server_threads": "3", "cpu_us_per_transaction": 58.5, "core_shares": {"pure-owner": 0.07, "pure-checkpoint": 0.0}, "resident_mib": 74.8, "written_bytes_per_transaction": 1317.2, "device_bytes_per_transaction": 1324.3, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 4980, "new_orders_per_minute": 132962, "undone_new_orders": 660, "errors": 0, "new_order": {"done": 67234, "failed": 0, "p50_us": 8192, "p99_us": 110592}, "payment": {"done": 64321, "failed": 0, "p50_us": 8192, "p99_us": 102400}, "order_status": {"done": 6100, "failed": 0, "p50_us": 384, "p99_us": 928}, "delivery": {"done": 5996, "failed": 0, "p50_us": 8192, "p99_us": 110592}, "stock_level": {"done": 5954, "failed": 0, "p50_us": 416, "p99_us": 992}, "server_threads": "3", "cpu_us_per_transaction": 54.7, "core_shares": {"pure-owner": 0.14, "pure-checkpoint": 0.0}, "resident_mib": 152.1, "written_bytes_per_transaction": 628.8, "device_bytes_per_transaction": 650.5, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 1, "transactions_per_second": 124, "batches": 0, "batched": 0, "new_orders_per_minute": 3361, "undone_new_orders": 10, "new_order": {"done": 1691, "failed": 0, "p50_us": 5376, "p99_us": 86016}, "payment": {"done": 1569, "failed": 0, "p50_us": 4352, "p99_us": 57344}, "order_status": {"done": 131, "failed": 0, "p50_us": 40, "p99_us": 96}, "delivery": {"done": 169, "failed": 0, "p50_us": 4608, "p99_us": 57344}, "stock_level": {"done": 150, "failed": 0, "p50_us": 432, "p99_us": 672}, "cpu_seconds": 0.787, "peak_resident_kib": 18176, "written_bytes": 103907328, "cpu_us_per_transaction": 212.1, "peak_resident_mib": 17.8, "written_bytes_per_transaction": 28007.4, "device_bytes_per_transaction": 39382.3, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 4, "transactions_per_second": 293, "batches": 0, "batched": 0, "new_orders_per_minute": 7845, "undone_new_orders": 37, "new_order": {"done": 3980, "failed": 0, "p50_us": 1792, "p99_us": 73728}, "payment": {"done": 3776, "failed": 0, "p50_us": 1216, "p99_us": 24576}, "order_status": {"done": 353, "failed": 0, "p50_us": 31, "p99_us": 72}, "delivery": {"done": 361, "failed": 0, "p50_us": 1344, "p99_us": 55296}, "stock_level": {"done": 355, "failed": 0, "p50_us": 384, "p99_us": 704}, "cpu_seconds": 1.371, "peak_resident_kib": 20336, "written_bytes": 246743040, "cpu_us_per_transaction": 155.4, "peak_resident_mib": 19.9, "written_bytes_per_transaction": 27959.6, "device_bytes_per_transaction": 16439.2, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 16, "transactions_per_second": 485, "batches": 1094, "batched": 13397, "new_orders_per_minute": 13014, "undone_new_orders": 62, "new_order": {"done": 6572, "failed": 0, "p50_us": 9728, "p99_us": 491520}, "payment": {"done": 6217, "failed": 0, "p50_us": 9216, "p99_us": 458752}, "order_status": {"done": 589, "failed": 0, "p50_us": 136, "p99_us": 992}, "delivery": {"done": 608, "failed": 0, "p50_us": 8704, "p99_us": 458752}, "stock_level": {"done": 577, "failed": 0, "p50_us": 736, "p99_us": 1792}, "cpu_seconds": 2.189, "peak_resident_kib": 41536, "written_bytes": 165167104, "cpu_us_per_transaction": 150.3, "peak_resident_mib": 40.6, "written_bytes_per_transaction": 11341.6, "device_bytes_per_transaction": 10802.7, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 64, "transactions_per_second": 853, "batches": 467, "batched": 23885, "new_orders_per_minute": 22699, "undone_new_orders": 105, "new_order": {"done": 11647, "failed": 0, "p50_us": 34816, "p99_us": 1245184}, "payment": {"done": 11199, "failed": 0, "p50_us": 27648, "p99_us": 1179648}, "order_status": {"done": 1083, "failed": 0, "p50_us": 208, "p99_us": 2048}, "delivery": {"done": 1039, "failed": 0, "p50_us": 22528, "p99_us": 1114112}, "stock_level": {"done": 1066, "failed": 0, "p50_us": 1024, "p99_us": 3712}, "cpu_seconds": 3.705, "peak_resident_kib": 91552, "written_bytes": 204521472, "cpu_us_per_transaction": 142.3, "peak_resident_mib": 89.4, "written_bytes_per_transaction": 7855.9, "device_bytes_per_transaction": 7522.4, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 152.1, "pure_state_mib": 73.7, "pure_store_mib": 69.9, "sqlite_files_mib": 15.9, "grouped_sqlite_files_mib": 20.5, "pure_counts": {"bursts": 6298, "burst_events": 195640, "checkpoints": 8}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-3-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-3-linux-aarch64.jsonl new file mode 100644 index 0000000..d452cc1 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w1-3-linux-aarch64.jsonl @@ -0,0 +1,8 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 1.22, "sqlite_load_s": 1.75, "sqlite_page_size": 1024, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 16, "transactions_per_second": 2138, "new_orders_per_minute": 57206, "undone_new_orders": 274, "errors": 0, "new_order": {"done": 28882, "failed": 0, "p50_us": 5376, "p99_us": 59392}, "payment": {"done": 27466, "failed": 0, "p50_us": 5120, "p99_us": 59392}, "order_status": {"done": 2617, "failed": 0, "p50_us": 124, "p99_us": 416}, "delivery": {"done": 2644, "failed": 0, "p50_us": 5120, "p99_us": 61440}, "stock_level": {"done": 2551, "failed": 0, "p50_us": 192, "p99_us": 512}, "server_threads": "3", "cpu_us_per_transaction": 61.6, "core_shares": {"pure-owner": 0.07, "pure-checkpoint": 0.0}, "resident_mib": 74.8, "written_bytes_per_transaction": 1321.0, "device_bytes_per_transaction": 1328.6, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 4864, "new_orders_per_minute": 130098, "undone_new_orders": 641, "errors": 0, "new_order": {"done": 65699, "failed": 0, "p50_us": 8704, "p99_us": 77824}, "payment": {"done": 62652, "failed": 0, "p50_us": 8704, "p99_us": 77824}, "order_status": {"done": 5933, "failed": 0, "p50_us": 400, "p99_us": 960}, "delivery": {"done": 5825, "failed": 0, "p50_us": 8704, "p99_us": 73728}, "stock_level": {"done": 5817, "failed": 0, "p50_us": 448, "p99_us": 1024}, "server_threads": "3", "cpu_us_per_transaction": 56.4, "core_shares": {"pure-owner": 0.14, "pure-checkpoint": 0.0}, "resident_mib": 150.1, "written_bytes_per_transaction": 715.6, "device_bytes_per_transaction": 680.0, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 1, "transactions_per_second": 96, "batches": 0, "batched": 0, "new_orders_per_minute": 2652, "undone_new_orders": 7, "new_order": {"done": 1333, "failed": 0, "p50_us": 6144, "p99_us": 94208}, "payment": {"done": 1197, "failed": 0, "p50_us": 4352, "p99_us": 65536}, "order_status": {"done": 106, "failed": 0, "p50_us": 40, "p99_us": 68}, "delivery": {"done": 129, "failed": 0, "p50_us": 4352, "p99_us": 65536}, "stock_level": {"done": 118, "failed": 0, "p50_us": 416, "p99_us": 640}, "cpu_seconds": 0.585, "peak_resident_kib": 17072, "written_bytes": 77168640, "cpu_us_per_transaction": 202.9, "peak_resident_mib": 16.7, "written_bytes_per_transaction": 26766.8, "device_bytes_per_transaction": 38982.3, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 4, "transactions_per_second": 152, "batches": 0, "batched": 0, "new_orders_per_minute": 4090, "undone_new_orders": 24, "new_order": {"done": 2130, "failed": 0, "p50_us": 2048, "p99_us": 114688}, "payment": {"done": 2016, "failed": 0, "p50_us": 1536, "p99_us": 57344}, "order_status": {"done": 187, "failed": 0, "p50_us": 38, "p99_us": 116}, "delivery": {"done": 174, "failed": 0, "p50_us": 1664, "p99_us": 57344}, "stock_level": {"done": 180, "failed": 0, "p50_us": 464, "p99_us": 832}, "cpu_seconds": 0.952, "peak_resident_kib": 20400, "written_bytes": 138657792, "cpu_us_per_transaction": 203.1, "peak_resident_mib": 19.9, "written_bytes_per_transaction": 29583.5, "device_bytes_per_transaction": 22672.6, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 16, "transactions_per_second": 520, "batches": 1169, "batched": 14436, "new_orders_per_minute": 13929, "undone_new_orders": 63, "new_order": {"done": 7067, "failed": 0, "p50_us": 8704, "p99_us": 442368}, "payment": {"done": 6720, "failed": 0, "p50_us": 8192, "p99_us": 393216}, "order_status": {"done": 626, "failed": 0, "p50_us": 136, "p99_us": 960}, "delivery": {"done": 649, "failed": 0, "p50_us": 8192, "p99_us": 409600}, "stock_level": {"done": 634, "failed": 0, "p50_us": 704, "p99_us": 1728}, "cpu_seconds": 2.299, "peak_resident_kib": 46496, "written_bytes": 177504256, "cpu_us_per_transaction": 146.5, "peak_resident_mib": 45.4, "written_bytes_per_transaction": 11308.9, "device_bytes_per_transaction": 10871.0, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 64, "transactions_per_second": 578, "batches": 319, "batched": 16048, "new_orders_per_minute": 15356, "undone_new_orders": 67, "new_order": {"done": 7821, "failed": 0, "p50_us": 19456, "p99_us": 2097152}, "payment": {"done": 7505, "failed": 0, "p50_us": 19456, "p99_us": 2097152}, "order_status": {"done": 715, "failed": 0, "p50_us": 232, "p99_us": 2304}, "delivery": {"done": 722, "failed": 0, "p50_us": 20480, "p99_us": 2097152}, "stock_level": {"done": 743, "failed": 0, "p50_us": 1024, "p99_us": 4864}, "cpu_seconds": 2.521, "peak_resident_kib": 90144, "written_bytes": 138952704, "cpu_us_per_transaction": 144.0, "peak_resident_mib": 88.0, "written_bytes_per_transaction": 7937.4, "device_bytes_per_transaction": 7961.8, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 150.1, "pure_state_mib": 72.8, "pure_store_mib": 69.9, "sqlite_files_mib": 15.1, "grouped_sqlite_files_mib": 19.3, "pure_counts": {"bursts": 6998, "burst_events": 192336, "checkpoints": 8}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-1-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-1-linux-aarch64.jsonl new file mode 100644 index 0000000..33f39fd --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-1-linux-aarch64.jsonl @@ -0,0 +1,8 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 4, "rows": 1975536, "generate_s": 2.0, "pure_load_s": 12.83, "sqlite_load_s": 6.72, "sqlite_page_size": 1024, "pure_resident_mib": 104.1, "sqlite_file_mib": 52.9} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 16, "transactions_per_second": 2247, "new_orders_per_minute": 60581, "undone_new_orders": 298, "errors": 0, "new_order": {"done": 30592, "failed": 0, "p50_us": 5120, "p99_us": 59392}, "payment": {"done": 28635, "failed": 0, "p50_us": 4864, "p99_us": 59392}, "order_status": {"done": 2715, "failed": 0, "p50_us": 112, "p99_us": 336}, "delivery": {"done": 2757, "failed": 0, "p50_us": 5120, "p99_us": 61440}, "stock_level": {"done": 2733, "failed": 0, "p50_us": 168, "p99_us": 400}, "server_threads": "3", "cpu_us_per_transaction": 60.4, "core_shares": {"pure-owner": 0.08}, "resident_mib": 139.9, "written_bytes_per_transaction": 1212.9, "device_bytes_per_transaction": 1225.6, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 64, "transactions_per_second": 4590, "new_orders_per_minute": 123340, "undone_new_orders": 583, "errors": 0, "new_order": {"done": 62254, "failed": 0, "p50_us": 8192, "p99_us": 94208}, "payment": {"done": 59057, "failed": 0, "p50_us": 8192, "p99_us": 94208}, "order_status": {"done": 5455, "failed": 0, "p50_us": 336, "p99_us": 896}, "delivery": {"done": 5543, "failed": 0, "p50_us": 8192, "p99_us": 98304}, "stock_level": {"done": 5397, "failed": 0, "p50_us": 400, "p99_us": 1024}, "server_threads": "3", "cpu_us_per_transaction": 57.3, "core_shares": {"pure-owner": 0.15, "pure-checkpoint": 0.0}, "resident_mib": 217.0, "written_bytes_per_transaction": 649.5, "device_bytes_per_transaction": 680.7, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 1, "transactions_per_second": 80, "batches": 0, "batched": 0, "new_orders_per_minute": 2113, "undone_new_orders": 9, "new_order": {"done": 1066, "failed": 0, "p50_us": 6912, "p99_us": 131072}, "payment": {"done": 1031, "failed": 0, "p50_us": 5120, "p99_us": 86016}, "order_status": {"done": 97, "failed": 0, "p50_us": 38, "p99_us": 76}, "delivery": {"done": 105, "failed": 0, "p50_us": 4608, "p99_us": 86016}, "stock_level": {"done": 100, "failed": 0, "p50_us": 464, "p99_us": 704}, "cpu_seconds": 0.547, "peak_resident_kib": 23424, "written_bytes": 63537152, "cpu_us_per_transaction": 228.0, "peak_resident_mib": 22.9, "written_bytes_per_transaction": 26484.8, "device_bytes_per_transaction": 44584.8, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 4, "transactions_per_second": 159, "batches": 0, "batched": 0, "new_orders_per_minute": 4274, "undone_new_orders": 22, "new_order": {"done": 2165, "failed": 0, "p50_us": 2048, "p99_us": 90112}, "payment": {"done": 2081, "failed": 0, "p50_us": 1536, "p99_us": 81920}, "order_status": {"done": 190, "failed": 0, "p50_us": 34, "p99_us": 112}, "delivery": {"done": 171, "failed": 0, "p50_us": 1664, "p99_us": 110592}, "stock_level": {"done": 177, "failed": 0, "p50_us": 496, "p99_us": 1344}, "cpu_seconds": 1.003, "peak_resident_kib": 29456, "written_bytes": 146243584, "cpu_us_per_transaction": 209.7, "peak_resident_mib": 28.8, "written_bytes_per_transaction": 30569.3, "device_bytes_per_transaction": 26358.6, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 16, "transactions_per_second": 333, "batches": 757, "batched": 9142, "new_orders_per_minute": 9067, "undone_new_orders": 54, "new_order": {"done": 4590, "failed": 0, "p50_us": 10240, "p99_us": 589824}, "payment": {"done": 4167, "failed": 0, "p50_us": 9728, "p99_us": 524288}, "order_status": {"done": 407, "failed": 0, "p50_us": 144, "p99_us": 992}, "delivery": {"done": 385, "failed": 0, "p50_us": 9728, "p99_us": 524288}, "stock_level": {"done": 443, "failed": 0, "p50_us": 768, "p99_us": 1920}, "cpu_seconds": 1.743, "peak_resident_kib": 74848, "written_bytes": 162906112, "cpu_us_per_transaction": 174.4, "peak_resident_mib": 73.1, "written_bytes_per_transaction": 16303.7, "device_bytes_per_transaction": 15001.3, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 64, "transactions_per_second": 612, "batches": 355, "batched": 18113, "new_orders_per_minute": 16469, "undone_new_orders": 76, "new_order": {"done": 8872, "failed": 0, "p50_us": 24576, "p99_us": 1769472}, "payment": {"done": 8434, "failed": 0, "p50_us": 23552, "p99_us": 1769472}, "order_status": {"done": 734, "failed": 0, "p50_us": 232, "p99_us": 2176}, "delivery": {"done": 807, "failed": 0, "p50_us": 23552, "p99_us": 1769472}, "stock_level": {"done": 762, "failed": 0, "p50_us": 1088, "p99_us": 5120}, "cpu_seconds": 3.196, "peak_resident_kib": 141968, "written_bytes": 251035648, "cpu_us_per_transaction": 163.0, "peak_resident_mib": 138.6, "written_bytes_per_transaction": 12802.1, "device_bytes_per_transaction": 11785.6, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 217.0, "pure_state_mib": 134.4, "pure_store_mib": 112.4, "sqlite_files_mib": 54.1, "grouped_sqlite_files_mib": 58.1, "pure_counts": {"bursts": 6213, "burst_events": 188103, "checkpoints": 4}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-2-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-2-linux-aarch64.jsonl new file mode 100644 index 0000000..4a33fd4 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-2-linux-aarch64.jsonl @@ -0,0 +1,8 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 4, "rows": 1975536, "generate_s": 2.01, "pure_load_s": 7.85, "sqlite_load_s": 6.48, "sqlite_page_size": 1024, "pure_resident_mib": 104.1, "sqlite_file_mib": 52.9} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 16, "transactions_per_second": 1893, "new_orders_per_minute": 51120, "undone_new_orders": 244, "errors": 0, "new_order": {"done": 25817, "failed": 0, "p50_us": 5376, "p99_us": 59392}, "payment": {"done": 24091, "failed": 0, "p50_us": 5120, "p99_us": 57344}, "order_status": {"done": 2252, "failed": 0, "p50_us": 112, "p99_us": 352}, "delivery": {"done": 2327, "failed": 0, "p50_us": 5120, "p99_us": 49152}, "stock_level": {"done": 2322, "failed": 0, "p50_us": 184, "p99_us": 416}, "server_threads": "3", "cpu_us_per_transaction": 64.4, "core_shares": {"pure-owner": 0.07}, "resident_mib": 134.2, "written_bytes_per_transaction": 1216.5, "device_bytes_per_transaction": 1245.1, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 64, "transactions_per_second": 4324, "new_orders_per_minute": 116334, "undone_new_orders": 544, "errors": 0, "new_order": {"done": 58715, "failed": 0, "p50_us": 8704, "p99_us": 102400}, "payment": {"done": 55623, "failed": 0, "p50_us": 8704, "p99_us": 94208}, "order_status": {"done": 5123, "failed": 0, "p50_us": 352, "p99_us": 896}, "delivery": {"done": 5225, "failed": 0, "p50_us": 8704, "p99_us": 94208}, "stock_level": {"done": 5053, "failed": 0, "p50_us": 416, "p99_us": 992}, "server_threads": "3", "cpu_us_per_transaction": 58.6, "core_shares": {"pure-owner": 0.14, "pure-checkpoint": 0.0}, "resident_mib": 209.4, "written_bytes_per_transaction": 661.7, "device_bytes_per_transaction": 681.8, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 1, "transactions_per_second": 89, "batches": 0, "batched": 0, "new_orders_per_minute": 2337, "undone_new_orders": 10, "new_order": {"done": 1179, "failed": 0, "p50_us": 6912, "p99_us": 114688}, "payment": {"done": 1153, "failed": 0, "p50_us": 5888, "p99_us": 81920}, "order_status": {"done": 110, "failed": 0, "p50_us": 36, "p99_us": 68}, "delivery": {"done": 114, "failed": 0, "p50_us": 6144, "p99_us": 36864}, "stock_level": {"done": 113, "failed": 0, "p50_us": 448, "p99_us": 864}, "cpu_seconds": 0.601, "peak_resident_kib": 24448, "written_bytes": 70483968, "cpu_us_per_transaction": 225.2, "peak_resident_mib": 23.9, "written_bytes_per_transaction": 26408.4, "device_bytes_per_transaction": 40111.3, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 4, "transactions_per_second": 222, "batches": 0, "batched": 0, "new_orders_per_minute": 5896, "undone_new_orders": 25, "new_order": {"done": 2982, "failed": 0, "p50_us": 1920, "p99_us": 81920}, "payment": {"done": 2929, "failed": 0, "p50_us": 1344, "p99_us": 57344}, "order_status": {"done": 266, "failed": 0, "p50_us": 34, "p99_us": 80}, "delivery": {"done": 265, "failed": 0, "p50_us": 1600, "p99_us": 53248}, "stock_level": {"done": 245, "failed": 0, "p50_us": 496, "p99_us": 960}, "cpu_seconds": 1.292, "peak_resident_kib": 28336, "written_bytes": 211664896, "cpu_us_per_transaction": 193.2, "peak_resident_mib": 27.7, "written_bytes_per_transaction": 31653.2, "device_bytes_per_transaction": 22032.2, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 16, "transactions_per_second": 546, "batches": 1313, "batched": 15759, "new_orders_per_minute": 14787, "undone_new_orders": 84, "new_order": {"done": 7823, "failed": 0, "p50_us": 9728, "p99_us": 507904}, "payment": {"done": 7233, "failed": 0, "p50_us": 9216, "p99_us": 442368}, "order_status": {"done": 672, "failed": 0, "p50_us": 144, "p99_us": 1472}, "delivery": {"done": 703, "failed": 0, "p50_us": 9216, "p99_us": 393216}, "stock_level": {"done": 725, "failed": 0, "p50_us": 832, "p99_us": 2304}, "cpu_seconds": 3.1, "peak_resident_kib": 78592, "written_bytes": 262307840, "cpu_us_per_transaction": 180.7, "peak_resident_mib": 76.8, "written_bytes_per_transaction": 15289.6, "device_bytes_per_transaction": 13845.1, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 64, "transactions_per_second": 426, "batches": 234, "batched": 11844, "new_orders_per_minute": 11421, "undone_new_orders": 53, "new_order": {"done": 5775, "failed": 0, "p50_us": 26624, "p99_us": 2097152}, "payment": {"done": 5545, "failed": 0, "p50_us": 26624, "p99_us": 2097152}, "order_status": {"done": 479, "failed": 0, "p50_us": 256, "p99_us": 2048}, "delivery": {"done": 524, "failed": 0, "p50_us": 26624, "p99_us": 2097152}, "stock_level": {"done": 469, "failed": 0, "p50_us": 1088, "p99_us": 3840}, "cpu_seconds": 2.071, "peak_resident_kib": 139152, "written_bytes": 170655744, "cpu_us_per_transaction": 161.9, "peak_resident_mib": 135.9, "written_bytes_per_transaction": 13340.8, "device_bytes_per_transaction": 12500.6, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 209.4, "pure_state_mib": 129.9, "pure_store_mib": 104.4, "sqlite_files_mib": 54.6, "grouped_sqlite_files_mib": 58.2, "pure_counts": {"bursts": 5513, "burst_events": 171157, "checkpoints": 3}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-3-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-3-linux-aarch64.jsonl new file mode 100644 index 0000000..e8d328e --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-sd-w4-3-linux-aarch64.jsonl @@ -0,0 +1,8 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 4, "rows": 1975536, "generate_s": 2.4, "pure_load_s": 5.14, "sqlite_load_s": 6.63, "sqlite_page_size": 1024, "pure_resident_mib": 104.1, "sqlite_file_mib": 52.9} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 16, "transactions_per_second": 2314, "new_orders_per_minute": 62410, "undone_new_orders": 305, "errors": 0, "new_order": {"done": 31519, "failed": 0, "p50_us": 5376, "p99_us": 59392}, "payment": {"done": 29491, "failed": 0, "p50_us": 5120, "p99_us": 59392}, "order_status": {"done": 2792, "failed": 0, "p50_us": 120, "p99_us": 544}, "delivery": {"done": 2832, "failed": 0, "p50_us": 5120, "p99_us": 55296}, "stock_level": {"done": 2806, "failed": 0, "p50_us": 184, "p99_us": 704}, "server_threads": "3", "cpu_us_per_transaction": 63.8, "core_shares": {"pure-owner": 0.09}, "resident_mib": 140.9, "written_bytes_per_transaction": 1261.6, "device_bytes_per_transaction": 1248.0, "consistency_failures": []} +{"step": "run", "system": "pure", "warehouses": 4, "terminals": 64, "transactions_per_second": 5540, "new_orders_per_minute": 148812, "undone_new_orders": 721, "errors": 0, "new_order": {"done": 75134, "failed": 0, "p50_us": 8192, "p99_us": 73728}, "payment": {"done": 71335, "failed": 0, "p50_us": 8192, "p99_us": 73728}, "order_status": {"done": 6544, "failed": 0, "p50_us": 320, "p99_us": 992}, "delivery": {"done": 6679, "failed": 0, "p50_us": 8192, "p99_us": 77824}, "stock_level": {"done": 6514, "failed": 0, "p50_us": 400, "p99_us": 1024}, "server_threads": "3", "cpu_us_per_transaction": 56.6, "core_shares": {"pure-owner": 0.17, "pure-checkpoint": 0.0}, "resident_mib": 238.7, "written_bytes_per_transaction": 684.9, "device_bytes_per_transaction": 720.6, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 1, "transactions_per_second": 84, "batches": 0, "batched": 0, "new_orders_per_minute": 2209, "undone_new_orders": 10, "new_order": {"done": 1117, "failed": 0, "p50_us": 6656, "p99_us": 94208}, "payment": {"done": 1091, "failed": 0, "p50_us": 4864, "p99_us": 69632}, "order_status": {"done": 104, "failed": 0, "p50_us": 40, "p99_us": 88}, "delivery": {"done": 108, "failed": 0, "p50_us": 5888, "p99_us": 94208}, "stock_level": {"done": 106, "failed": 0, "p50_us": 512, "p99_us": 1664}, "cpu_seconds": 0.634, "peak_resident_kib": 23296, "written_bytes": 66748416, "cpu_us_per_transaction": 251.0, "peak_resident_mib": 22.8, "written_bytes_per_transaction": 26424.6, "device_bytes_per_transaction": 39508.7, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 4, "transactions_per_second": 161, "batches": 0, "batched": 0, "new_orders_per_minute": 4287, "undone_new_orders": 20, "new_order": {"done": 2185, "failed": 0, "p50_us": 2304, "p99_us": 102400}, "payment": {"done": 2143, "failed": 0, "p50_us": 1600, "p99_us": 61440}, "order_status": {"done": 195, "failed": 0, "p50_us": 34, "p99_us": 120}, "delivery": {"done": 182, "failed": 0, "p50_us": 1856, "p99_us": 90112}, "stock_level": {"done": 181, "failed": 0, "p50_us": 480, "p99_us": 1344}, "cpu_seconds": 1.013, "peak_resident_kib": 29456, "written_bytes": 163610624, "cpu_us_per_transaction": 207.3, "peak_resident_mib": 28.8, "written_bytes_per_transaction": 33485.6, "device_bytes_per_transaction": 25886.3, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 16, "transactions_per_second": 335, "batches": 758, "batched": 9214, "new_orders_per_minute": 9108, "undone_new_orders": 55, "new_order": {"done": 4617, "failed": 0, "p50_us": 11776, "p99_us": 655360}, "payment": {"done": 4206, "failed": 0, "p50_us": 10752, "p99_us": 589824}, "order_status": {"done": 408, "failed": 0, "p50_us": 152, "p99_us": 1216}, "delivery": {"done": 391, "failed": 0, "p50_us": 11264, "p99_us": 589824}, "stock_level": {"done": 445, "failed": 0, "p50_us": 832, "p99_us": 1984}, "cpu_seconds": 1.869, "peak_resident_kib": 74848, "written_bytes": 163545088, "cpu_us_per_transaction": 185.7, "peak_resident_mib": 73.1, "written_bytes_per_transaction": 16245.7, "device_bytes_per_transaction": 15129.6, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 4, "terminals": 64, "transactions_per_second": 302, "batches": 173, "batched": 8704, "new_orders_per_minute": 8096, "undone_new_orders": 44, "new_order": {"done": 4232, "failed": 0, "p50_us": 30720, "p99_us": 1769472}, "payment": {"done": 4086, "failed": 0, "p50_us": 28672, "p99_us": 1769472}, "order_status": {"done": 342, "failed": 0, "p50_us": 232, "p99_us": 2432}, "delivery": {"done": 386, "failed": 0, "p50_us": 27648, "p99_us": 1769472}, "stock_level": {"done": 341, "failed": 0, "p50_us": 1088, "p99_us": 3712}, "cpu_seconds": 1.583, "peak_resident_kib": 137888, "written_bytes": 120307712, "cpu_us_per_transaction": 168.6, "peak_resident_mib": 134.7, "written_bytes_per_transaction": 12816.4, "device_bytes_per_transaction": 12067.2, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 238.7, "pure_state_mib": 141.7, "pure_store_mib": 127.7, "sqlite_files_mib": 54.2, "grouped_sqlite_files_mib": 56.3, "pure_counts": {"bursts": 7069, "burst_events": 216109, "checkpoints": 5}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-checkpoint10000-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-checkpoint10000-linux-aarch64.jsonl new file mode 100644 index 0000000..0ef2e93 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-checkpoint10000-linux-aarch64.jsonl @@ -0,0 +1,6 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.55, "pure_load_s": 0.72, "sqlite_load_s": 1.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 1, "transactions_per_second": 10361, "batches": 0, "batched": 0, "new_orders_per_minute": 277720, "undone_new_orders": 985, "new_order": {"done": 93601, "failed": 0, "p50_us": 144, "p99_us": 240}, "payment": {"done": 88864, "failed": 0, "p50_us": 24, "p99_us": 42}, "order_status": {"done": 8232, "failed": 0, "p50_us": 16, "p99_us": 29}, "delivery": {"done": 8375, "failed": 0, "p50_us": 54, "p99_us": 352}, "stock_level": {"done": 8238, "failed": 0, "p50_us": 256, "p99_us": 384}, "cpu_seconds": 19.969, "peak_resident_kib": 99536, "written_bytes": 0, "cpu_us_per_transaction": 96.3, "peak_resident_mib": 97.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 4, "transactions_per_second": 10272, "batches": 0, "batched": 0, "new_orders_per_minute": 274956, "undone_new_orders": 956, "new_order": {"done": 92992, "failed": 0, "p50_us": 152, "p99_us": 256}, "payment": {"done": 88632, "failed": 0, "p50_us": 24, "p99_us": 46}, "order_status": {"done": 8258, "failed": 0, "p50_us": 19, "p99_us": 36}, "delivery": {"done": 8312, "failed": 0, "p50_us": 58, "p99_us": 120}, "stock_level": {"done": 8101, "failed": 0, "p50_us": 256, "p99_us": 512}, "cpu_seconds": 20.252, "peak_resident_kib": 47584, "written_bytes": 0, "cpu_us_per_transaction": 98.2, "peak_resident_mib": 46.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 16, "transactions_per_second": 9890, "batches": 15719, "batched": 182112, "new_orders_per_minute": 264838, "undone_new_orders": 892, "new_order": {"done": 89225, "failed": 0, "p50_us": 1600, "p99_us": 4096}, "payment": {"done": 84912, "failed": 0, "p50_us": 1472, "p99_us": 4096}, "order_status": {"done": 7985, "failed": 0, "p50_us": 128, "p99_us": 832}, "delivery": {"done": 7975, "failed": 0, "p50_us": 1536, "p99_us": 4096}, "stock_level": {"done": 7814, "failed": 0, "p50_us": 736, "p99_us": 1856}, "cpu_seconds": 26.449, "peak_resident_kib": 78160, "written_bytes": 0, "cpu_us_per_transaction": 133.6, "peak_resident_mib": 76.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=10000;", "warehouses": 1, "terminals": 64, "transactions_per_second": 10211, "batches": 3729, "batched": 188334, "new_orders_per_minute": 272489, "undone_new_orders": 882, "new_order": {"done": 91962, "failed": 0, "p50_us": 5888, "p99_us": 12800}, "payment": {"done": 88143, "failed": 0, "p50_us": 5632, "p99_us": 12800}, "order_status": {"done": 8302, "failed": 0, "p50_us": 232, "p99_us": 1600}, "delivery": {"done": 8229, "failed": 0, "p50_us": 5888, "p99_us": 12800}, "stock_level": {"done": 8140, "failed": 0, "p50_us": 1152, "p99_us": 3840}, "cpu_seconds": 27.095, "peak_resident_kib": 132976, "written_bytes": 0, "cpu_us_per_transaction": 132.3, "peak_resident_mib": 129.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 38.1, "pure_state_mib": 22.3, "pure_store_mib": 16.3, "sqlite_files_mib": 81.6, "grouped_sqlite_files_mib": 79.6, "pure_counts": {"bursts": 23, "burst_events": 23, "checkpoints": 0}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-defaults-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-defaults-linux-aarch64.jsonl new file mode 100644 index 0000000..a6b3dce --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-defaults-linux-aarch64.jsonl @@ -0,0 +1,6 @@ +{"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.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "", "warehouses": 1, "terminals": 1, "transactions_per_second": 9390, "batches": 0, "batched": 0, "new_orders_per_minute": 251592, "undone_new_orders": 884, "new_order": {"done": 84757, "failed": 0, "p50_us": 152, "p99_us": 1152}, "payment": {"done": 80506, "failed": 0, "p50_us": 25, "p99_us": 56}, "order_status": {"done": 7493, "failed": 0, "p50_us": 18, "p99_us": 34}, "delivery": {"done": 7579, "failed": 0, "p50_us": 60, "p99_us": 124}, "stock_level": {"done": 7495, "failed": 0, "p50_us": 288, "p99_us": 432}, "cpu_seconds": 19.974, "peak_resident_kib": 4192, "written_bytes": 0, "cpu_us_per_transaction": 106.3, "peak_resident_mib": 4.1, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "", "warehouses": 1, "terminals": 4, "transactions_per_second": 9083, "batches": 0, "batched": 0, "new_orders_per_minute": 243389, "undone_new_orders": 867, "new_order": {"done": 82061, "failed": 0, "p50_us": 160, "p99_us": 1216}, "payment": {"done": 78018, "failed": 0, "p50_us": 25, "p99_us": 136}, "order_status": {"done": 7272, "failed": 0, "p50_us": 19, "p99_us": 42}, "delivery": {"done": 7330, "failed": 0, "p50_us": 62, "p99_us": 400}, "stock_level": {"done": 7126, "failed": 0, "p50_us": 288, "p99_us": 640}, "cpu_seconds": 20.467, "peak_resident_kib": 7328, "written_bytes": 0, "cpu_us_per_transaction": 112.6, "peak_resident_mib": 7.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "", "warehouses": 1, "terminals": 16, "transactions_per_second": 7872, "batches": 12440, "batched": 145000, "new_orders_per_minute": 210743, "undone_new_orders": 713, "new_order": {"done": 71012, "failed": 0, "p50_us": 1984, "p99_us": 4608}, "payment": {"done": 67658, "failed": 0, "p50_us": 1792, "p99_us": 4608}, "order_status": {"done": 6359, "failed": 0, "p50_us": 92, "p99_us": 832}, "delivery": {"done": 6330, "failed": 0, "p50_us": 1856, "p99_us": 4608}, "stock_level": {"done": 6204, "failed": 0, "p50_us": 672, "p99_us": 1728}, "cpu_seconds": 24.599, "peak_resident_kib": 17056, "written_bytes": 1193492480, "cpu_us_per_transaction": 156.1, "peak_resident_mib": 16.7, "written_bytes_per_transaction": 7574.7, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "", "warehouses": 1, "terminals": 64, "transactions_per_second": 8555, "batches": 3087, "batched": 157781, "new_orders_per_minute": 228539, "undone_new_orders": 757, "new_order": {"done": 77144, "failed": 0, "p50_us": 6912, "p99_us": 14848}, "payment": {"done": 73743, "failed": 0, "p50_us": 6912, "p99_us": 14848}, "order_status": {"done": 6967, "failed": 0, "p50_us": 144, "p99_us": 1728}, "delivery": {"done": 6894, "failed": 0, "p50_us": 6912, "p99_us": 14848}, "stock_level": {"done": 6816, "failed": 0, "p50_us": 1088, "p99_us": 3840}, "cpu_seconds": 25.452, "peak_resident_kib": 49632, "written_bytes": 332038144, "cpu_us_per_transaction": 148.4, "peak_resident_mib": 48.5, "written_bytes_per_transaction": 1935.4, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 38.1, "pure_state_mib": 22.3, "pure_store_mib": 16.3, "sqlite_files_mib": 74.3, "grouped_sqlite_files_mib": 66.9, "pure_counts": {"bursts": 23, "burst_events": 23, "checkpoints": 0}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-tuned-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-tuned-linux-aarch64.jsonl new file mode 100644 index 0000000..8ab04e7 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-tune-ram-tuned-linux-aarch64.jsonl @@ -0,0 +1,6 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.72, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 1, "transactions_per_second": 9886, "batches": 0, "batched": 0, "new_orders_per_minute": 264943, "undone_new_orders": 929, "new_order": {"done": 89271, "failed": 0, "p50_us": 144, "p99_us": 1152}, "payment": {"done": 84801, "failed": 0, "p50_us": 23, "p99_us": 44}, "order_status": {"done": 7865, "failed": 0, "p50_us": 16, "p99_us": 26}, "delivery": {"done": 7986, "failed": 0, "p50_us": 54, "p99_us": 368}, "stock_level": {"done": 7864, "failed": 0, "p50_us": 272, "p99_us": 368}, "cpu_seconds": 19.988, "peak_resident_kib": 96208, "written_bytes": 0, "cpu_us_per_transaction": 101.1, "peak_resident_mib": 94.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 4, "transactions_per_second": 9470, "batches": 0, "batched": 0, "new_orders_per_minute": 253726, "undone_new_orders": 903, "new_order": {"done": 85757, "failed": 0, "p50_us": 152, "p99_us": 1216}, "payment": {"done": 81562, "failed": 0, "p50_us": 24, "p99_us": 72}, "order_status": {"done": 7574, "failed": 0, "p50_us": 19, "p99_us": 40}, "delivery": {"done": 7606, "failed": 0, "p50_us": 60, "p99_us": 208}, "stock_level": {"done": 7530, "failed": 0, "p50_us": 272, "p99_us": 480}, "cpu_seconds": 20.462, "peak_resident_kib": 44912, "written_bytes": 0, "cpu_us_per_transaction": 107.7, "peak_resident_mib": 43.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 16, "transactions_per_second": 9680, "batches": 15653, "batched": 178250, "new_orders_per_minute": 259351, "undone_new_orders": 879, "new_order": {"done": 87378, "failed": 0, "p50_us": 1600, "p99_us": 4096}, "payment": {"done": 83064, "failed": 0, "p50_us": 1472, "p99_us": 3968}, "order_status": {"done": 7804, "failed": 0, "p50_us": 120, "p99_us": 768}, "delivery": {"done": 7808, "failed": 0, "p50_us": 1536, "p99_us": 3968}, "stock_level": {"done": 7647, "failed": 0, "p50_us": 608, "p99_us": 1792}, "cpu_seconds": 25.602, "peak_resident_kib": 83616, "written_bytes": 0, "cpu_us_per_transaction": 132.2, "peak_resident_mib": 81.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 64, "transactions_per_second": 10230, "batches": 3738, "batched": 188675, "new_orders_per_minute": 273034, "undone_new_orders": 884, "new_order": {"done": 92142, "failed": 0, "p50_us": 5888, "p99_us": 12288}, "payment": {"done": 88293, "failed": 0, "p50_us": 5888, "p99_us": 12288}, "order_status": {"done": 8311, "failed": 0, "p50_us": 224, "p99_us": 1856}, "delivery": {"done": 8240, "failed": 0, "p50_us": 5888, "p99_us": 12288}, "stock_level": {"done": 8160, "failed": 0, "p50_us": 896, "p99_us": 3328}, "cpu_seconds": 26.17, "peak_resident_kib": 161392, "written_bytes": 0, "cpu_us_per_transaction": 127.6, "peak_resident_mib": 157.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 38.1, "pure_state_mib": 22.3, "pure_store_mib": 16.3, "sqlite_files_mib": 77.3, "grouped_sqlite_files_mib": 78.1, "pure_counts": {"bursts": 23, "burst_events": 23, "checkpoints": 0}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page1024-checkpoint40000-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page1024-checkpoint40000-linux-aarch64.jsonl new file mode 100644 index 0000000..99b19bf --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page1024-checkpoint40000-linux-aarch64.jsonl @@ -0,0 +1,5 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 2.1, "sqlite_load_s": 1.75, "sqlite_page_size": 1024, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 1, "transactions_per_second": 87, "batches": 0, "batched": 0, "new_orders_per_minute": 2378, "undone_new_orders": 7, "new_order": {"done": 1284, "failed": 0, "p50_us": 6400, "p99_us": 98304}, "payment": {"done": 1164, "failed": 0, "p50_us": 4352, "p99_us": 65536}, "order_status": {"done": 101, "failed": 0, "p50_us": 38, "p99_us": 80}, "delivery": {"done": 126, "failed": 0, "p50_us": 4608, "p99_us": 59392}, "stock_level": {"done": 113, "failed": 0, "p50_us": 448, "p99_us": 640}, "cpu_seconds": 0.599, "peak_resident_kib": 17200, "written_bytes": 79314944, "cpu_us_per_transaction": 214.8, "peak_resident_mib": 16.8, "written_bytes_per_transaction": 28448.7, "device_bytes_per_transaction": 40851.3, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 16, "transactions_per_second": 694, "batches": 1592, "batched": 19413, "new_orders_per_minute": 18673, "undone_new_orders": 77, "new_order": {"done": 9553, "failed": 0, "p50_us": 8192, "p99_us": 458752}, "payment": {"done": 8996, "failed": 0, "p50_us": 7936, "p99_us": 393216}, "order_status": {"done": 845, "failed": 0, "p50_us": 136, "p99_us": 992}, "delivery": {"done": 864, "failed": 0, "p50_us": 8192, "p99_us": 360448}, "stock_level": {"done": 861, "failed": 0, "p50_us": 736, "p99_us": 1856}, "cpu_seconds": 3.216, "peak_resident_kib": 50400, "written_bytes": 239173632, "cpu_us_per_transaction": 152.3, "peak_resident_mib": 49.2, "written_bytes_per_transaction": 11325.0, "device_bytes_per_transaction": 10658.8, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA wal_autocheckpoint=40000;", "warehouses": 1, "terminals": 64, "transactions_per_second": 594, "batches": 353, "batched": 17943, "new_orders_per_minute": 15776, "undone_new_orders": 75, "new_order": {"done": 8738, "failed": 0, "p50_us": 40960, "p99_us": 1507328}, "payment": {"done": 8403, "failed": 0, "p50_us": 40960, "p99_us": 1507328}, "order_status": {"done": 798, "failed": 0, "p50_us": 232, "p99_us": 2816}, "delivery": {"done": 802, "failed": 0, "p50_us": 43008, "p99_us": 1507328}, "stock_level": {"done": 818, "failed": 0, "p50_us": 1088, "p99_us": 4608}, "cpu_seconds": 3.084, "peak_resident_kib": 90144, "written_bytes": 155779072, "cpu_us_per_transaction": 157.7, "peak_resident_mib": 88.0, "written_bytes_per_transaction": 7964.6, "device_bytes_per_transaction": 7658.8, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 38.1, "pure_state_mib": 22.3, "pure_store_mib": 16.3, "sqlite_files_mib": 14.3, "grouped_sqlite_files_mib": 20.6, "pure_counts": {"bursts": 23, "burst_events": 23, "checkpoints": 0}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page1024-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page1024-linux-aarch64.jsonl new file mode 100644 index 0000000..b333d41 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page1024-linux-aarch64.jsonl @@ -0,0 +1,5 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 3.39, "sqlite_load_s": 1.75, "sqlite_page_size": 1024, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 1, "transactions_per_second": 132, "batches": 0, "batched": 0, "new_orders_per_minute": 3581, "undone_new_orders": 13, "new_order": {"done": 1807, "failed": 0, "p50_us": 1856, "p99_us": 344064}, "payment": {"done": 1672, "failed": 0, "p50_us": 1216, "p99_us": 49152}, "order_status": {"done": 146, "failed": 0, "p50_us": 28, "p99_us": 64}, "delivery": {"done": 180, "failed": 0, "p50_us": 1280, "p99_us": 32768}, "stock_level": {"done": 161, "failed": 0, "p50_us": 320, "p99_us": 512}, "cpu_seconds": 0.72, "peak_resident_kib": 18320, "written_bytes": 238108672, "cpu_us_per_transaction": 181.5, "peak_resident_mib": 17.9, "written_bytes_per_transaction": 60037.5, "device_bytes_per_transaction": 31910.8, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 16, "transactions_per_second": 203, "batches": 460, "batched": 5615, "new_orders_per_minute": 5475, "undone_new_orders": 17, "new_order": {"done": 2761, "failed": 0, "p50_us": 10240, "p99_us": 557056}, "payment": {"done": 2623, "failed": 0, "p50_us": 8704, "p99_us": 557056}, "order_status": {"done": 251, "failed": 0, "p50_us": 128, "p99_us": 1088}, "delivery": {"done": 231, "failed": 0, "p50_us": 10240, "p99_us": 753664}, "stock_level": {"done": 248, "failed": 0, "p50_us": 608, "p99_us": 1792}, "cpu_seconds": 1.068, "peak_resident_kib": 46336, "written_bytes": 221954048, "cpu_us_per_transaction": 174.7, "peak_resident_mib": 45.2, "written_bytes_per_transaction": 36302.6, "device_bytes_per_transaction": 22472.4, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 64, "transactions_per_second": 263, "batches": 146, "batched": 7401, "new_orders_per_minute": 7054, "undone_new_orders": 32, "new_order": {"done": 3630, "failed": 0, "p50_us": 69632, "p99_us": 1703936}, "payment": {"done": 3457, "failed": 0, "p50_us": 69632, "p99_us": 1703936}, "order_status": {"done": 294, "failed": 0, "p50_us": 216, "p99_us": 3712}, "delivery": {"done": 314, "failed": 0, "p50_us": 73728, "p99_us": 1703936}, "stock_level": {"done": 343, "failed": 0, "p50_us": 800, "p99_us": 2688}, "cpu_seconds": 1.475, "peak_resident_kib": 117360, "written_bytes": 219840512, "cpu_us_per_transaction": 183.5, "peak_resident_mib": 114.6, "written_bytes_per_transaction": 27350.2, "device_bytes_per_transaction": 17944.8, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 38.1, "pure_state_mib": 22.3, "pure_store_mib": 16.3, "sqlite_files_mib": 14.5, "grouped_sqlite_files_mib": 16.2, "pure_counts": {"bursts": 23, "burst_events": 23, "checkpoints": 0}} diff --git a/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page4096-linux-aarch64.jsonl b/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page4096-linux-aarch64.jsonl new file mode 100644 index 0000000..84de24f --- /dev/null +++ b/research/experiments/022-tpcc-grouped/2026-09-30-tune-sd-page4096-linux-aarch64.jsonl @@ -0,0 +1,5 @@ +{"step": "load", "directory": "/home/eunhhu/tpcc-sd", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 3.36, "sqlite_load_s": 1.6, "sqlite_page_size": 4096, "pure_resident_mib": 38.1, "sqlite_file_mib": 13.8} +{"step": "run", "system": "sqlite 3.46.1", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 1, "transactions_per_second": 72, "batches": 0, "batched": 0, "new_orders_per_minute": 1986, "undone_new_orders": 7, "new_order": {"done": 1003, "failed": 0, "p50_us": 4608, "p99_us": 344064}, "payment": {"done": 904, "failed": 0, "p50_us": 1600, "p99_us": 110592}, "order_status": {"done": 77, "failed": 0, "p50_us": 31, "p99_us": 56}, "delivery": {"done": 103, "failed": 0, "p50_us": 1792, "p99_us": 65536}, "stock_level": {"done": 93, "failed": 0, "p50_us": 416, "p99_us": 544}, "cpu_seconds": 0.478, "peak_resident_kib": 16160, "written_bytes": 184336384, "cpu_us_per_transaction": 219.3, "peak_resident_mib": 15.8, "written_bytes_per_transaction": 84558.0, "device_bytes_per_transaction": 60696.0, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 16, "transactions_per_second": 162, "batches": 369, "batched": 4527, "new_orders_per_minute": 4397, "undone_new_orders": 16, "new_order": {"done": 2244, "failed": 0, "p50_us": 18432, "p99_us": 1572864}, "payment": {"done": 2090, "failed": 0, "p50_us": 16384, "p99_us": 1245184}, "order_status": {"done": 197, "failed": 0, "p50_us": 136, "p99_us": 960}, "delivery": {"done": 193, "failed": 0, "p50_us": 16384, "p99_us": 1179648}, "stock_level": {"done": 194, "failed": 0, "p50_us": 736, "p99_us": 1856}, "cpu_seconds": 0.976, "peak_resident_kib": 40816, "written_bytes": 256081920, "cpu_us_per_transaction": 198.5, "peak_resident_mib": 39.9, "written_bytes_per_transaction": 52070.3, "device_bytes_per_transaction": 41787.9, "consistency_failures": []} +{"step": "run", "system": "sqlite 3.46.1, grouped", "synchronous": "full", "pragmas": "PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;", "warehouses": 1, "terminals": 64, "transactions_per_second": 139, "batches": 78, "batched": 3915, "new_orders_per_minute": 3739, "undone_new_orders": 20, "new_order": {"done": 1918, "failed": 0, "p50_us": 86016, "p99_us": 3538944}, "payment": {"done": 1839, "failed": 0, "p50_us": 86016, "p99_us": 3538944}, "order_status": {"done": 143, "failed": 0, "p50_us": 176, "p99_us": 3200}, "delivery": {"done": 158, "failed": 0, "p50_us": 122880, "p99_us": 3538944}, "stock_level": {"done": 182, "failed": 0, "p50_us": 864, "p99_us": 4864}, "cpu_seconds": 0.815, "peak_resident_kib": 99872, "written_bytes": 149323776, "cpu_us_per_transaction": 192.2, "peak_resident_mib": 97.5, "written_bytes_per_transaction": 35217.9, "device_bytes_per_transaction": 29277.7, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 38.1, "pure_state_mib": 22.3, "pure_store_mib": 16.3, "sqlite_files_mib": 14.2, "grouped_sqlite_files_mib": 15.3, "pure_counts": {"bursts": 23, "burst_events": 23, "checkpoints": 0}} diff --git a/research/experiments/022-tpcc-grouped/owner-samples.py b/research/experiments/022-tpcc-grouped/owner-samples.py new file mode 100644 index 0000000..5415cf6 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/owner-samples.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +"""Where pure-serve's owner thread is: its stack sampled with gdb (a poor man's profiler; perf is not on this Pi). + + owner-samples.py SAMPLES OUT.txt + +Waits for a pure-serve with a pure-owner thread, then attaches gdb SAMPLES +times, a little apart, and keeps the owner's stack each time. Prints how +many samples had each serve.c phase on the stack, and the innermost frames. +""" +import collections +import re +import subprocess +import sys +import time +from pathlib import Path + +samples, out = int(sys.argv[1]), Path(sys.argv[2]) + + +def owner(): + for proc in Path('/proc').iterdir(): + if not proc.name.isdigit(): + continue + try: + if (proc / 'comm').read_text().strip() != 'pure-serve': + continue + for task in (proc / 'task').iterdir(): + if (task / 'comm').read_text().strip() == 'pure-owner': + return int(proc.name), int(task.name) + except OSError: + continue + return None + + +found = None +while not found: + found = owner() + time.sleep(0.2) +pid, tid = found +time.sleep(10) # past loading, into the run +stacks = [] +for _ in range(samples): + text = subprocess.run(['gdb', '-batch', '-nx', '-p', str(pid), '-ex', 'set pagination off', + '-ex', 'thread apply all bt 40'], capture_output=True, text=True).stdout + # The owner's section: from its "Thread ... (LWP tid)" header to the next thread's. + match = re.search(rf'Thread [^\n]*\(LWP {tid}\)[^\n]*\n(.*?)(?=\nThread |\Z)', text, re.S) + if match: + frames = re.findall(r'^#\d+\s+(?:0x[0-9a-f]+ in )?(\S+)', match.group(1), re.M) + stacks.append(frames) + time.sleep(0.3) +out.write_text('\n'.join(' < '.join(s) for s in stacks) + '\n') +phases = collections.Counter() +inner = collections.Counter() +for frames in stacks: + names = set(frames) + phase = ('waiting' if names & {'pthread_cond_wait', 'pthread_cond_timedwait', '__futex_abstimed_wait_common'} + and not names & {'execute'} else + 'publish' if 'publish' in names else + 'checkpoint_round' if 'checkpoint_round' in names else + 'feed_outlets' if 'feed_outlets' in names else + 'save' if 'save_burst' in names else + 'hand_back' if 'hand_back' in names else + 'apply' if 'apply_effect' in names else + 'other') + phases[phase] += 1 + inner[frames[0] if frames else '?'] += 1 +print(f'{len(stacks)} samples of the owner (pid {pid}, thread {tid})') +for phase, n in phases.most_common(): + print(f' {phase:<18} {n:>4} {n / max(len(stacks), 1):.0%}') +print('innermost frames:') +for name, n in inner.most_common(15): + print(f' {name:<40} {n:>4}') diff --git a/research/experiments/022-tpcc-grouped/runs.sh b/research/experiments/022-tpcc-grouped/runs.sh new file mode 100644 index 0000000..c441b36 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/runs.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# The runs of docs/research/106, as they were made, from the repository's root +# (the SD card's directory is any on ext4 there). Each result file records +# SQLite's pragmas and page size in its lines. +set -e +out=research/experiments/022-tpcc-grouped +sd=${SD:-$HOME/tpcc-sd} +run() { + name=$1 + shift + python3 benchmarks/tpcc/run.py "$@" > $out/2026-09-30-$name-linux-aarch64.jsonl +} +tuned='PRAGMA mmap_size=1073741824; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY;' + +# SQLite's settings, W=1, SQLite alone (harness of 3c04860). +run tune-ram-defaults --warehouses 1 --check 0 --terminals '' --sqlite-threads 1,4 --sqlite-group 16,64 \ + --seconds 20 --sqlite-pragmas '' +run tune-ram-tuned --warehouses 1 --check 0 --terminals '' --sqlite-threads 1,4 --sqlite-group 16,64 \ + --seconds 20 --sqlite-pragmas "$tuned" +run tune-sd-page4096 --directory $sd --warehouses 1 --check 0 --terminals '' --sqlite-threads 1 --sqlite-group 16,64 \ + --seconds 30 --sqlite-pragmas "$tuned" +run tune-sd-page1024 --directory $sd --warehouses 1 --check 0 --terminals '' --sqlite-threads 1 --sqlite-group 16,64 \ + --seconds 30 --sqlite-page-size 1024 --sqlite-pragmas "$tuned" +# Beyond the criteria, in SQLite's favour: a checkpoint each 40 MB of WAL. +run tune-sd-page1024-checkpoint40000 --directory $sd --warehouses 1 --check 0 --terminals '' --sqlite-threads 1 \ + --sqlite-group 16,64 --seconds 30 --sqlite-page-size 1024 --sqlite-pragmas "$tuned PRAGMA wal_autocheckpoint=40000;" +run tune-ram-checkpoint10000 --warehouses 1 --check 0 --terminals '' --sqlite-threads 1,4 --sqlite-group 16,64 \ + --seconds 20 --sqlite-pragmas "$tuned PRAGMA wal_autocheckpoint=10000;" + +# The matrix (harness of 20b313c, SQLite as its tuned() makes it): RAM, then +# the card in three rounds, W=1 and W=4 taking turns. +both='--terminals 16,64 --sqlite-threads 1,4 --sqlite-group 16,64' +run ram-w1 --warehouses 1 --check 20000 $both --seconds 20 +run ram-w4 --warehouses 4 --check 20000 $both --seconds 20 +for round in 1 2 3; do + for w in 1 4; do + run sd-w$w-$round --directory $sd --warehouses $w --check 0 $both --seconds 30 --sqlite-page-size 1024 + done +done + +# Where the owner thread is (RAM, W=1, 64 terminals): 80 samples of its stack +# with gdb while Pure alone runs for 90 seconds. +python3 $out/owner-samples.py 80 $out/2026-09-30-owner-stacks-linux-aarch64.txt & +run owner-run --warehouses 1 --check 0 --terminals 64 --sqlite-threads '' --sqlite-group '' --seconds 90 +wait diff --git a/research/experiments/022-tpcc-grouped/tables.py b/research/experiments/022-tpcc-grouped/tables.py new file mode 100644 index 0000000..2c018b0 --- /dev/null +++ b/research/experiments/022-tpcc-grouped/tables.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +"""docs/research/106's tables from the result files beside this one (the names given, as globs: ram-w1, sd-w4-*): +a row a system and terminal count; on the SD card the median of the rounds and their range.""" +import json +import statistics +import sys +from pathlib import Path + +OUT = Path(__file__).resolve().parent +KINDS = ('new_order', 'payment', 'order_status', 'delivery', 'stock_level') + + +def runs(name): + rows = {} + ends, checks = [], [] + for path in sorted(OUT.glob(f'2026-09-30-{name}-linux-aarch64.jsonl')): + for line in path.read_text().splitlines(): + r = json.loads(line) + if r['step'] == 'run': + system = 'Pure' if r['system'] == 'pure' else 'SQLite 묶음' if 'grouped' in r['system'] else 'SQLite' + rows.setdefault((system, r['terminals']), []).append(r) + elif r['step'] == 'end': + ends.append(r) + elif r['step'] == 'same transactions': + checks.append(r) + return rows, ends, checks + + +def middle(values, digits=0, spread=True): + values = [v for v in values if v is not None] + if not values: + return '-' + m = statistics.median(values) + text = f'{m:,.{digits}f}' + if spread and len(values) > 1: + text += f' ({min(values):,.{digits}f}–{max(values):,.{digits}f})' + return text + + +def table(name, device): + rows, ends, checks = runs(name) + order = [('Pure', 16), ('Pure', 64), ('SQLite', 1), ('SQLite', 4), ('SQLite 묶음', 16), ('SQLite 묶음', 64)] + print(f'### {name}') + for c in checks: + print(f"check: failed {c['failed']} differing {c['differing']} grouped {c['grouped_sqlite_differing']} " + f"consistency {c['consistency_failures']}") + print('| | 초당 거래 | New-Order p50 / p99 (ms) | 거래당 CPU (µs) | 소유자의 코어 몫 | 메모리 (MiB) | 거래당 장치 바이트 | 묶음 크기 |') + print('|---|---:|---:|---:|---:|---:|---:|---:|') + for key in order: + rs = rows.get(key, []) + if not rs: + continue + failures = sum(len(r['consistency_failures']) for r in rs) + sum(r[k]['failed'] for r in rs for k in KINDS) + tps = middle([r['transactions_per_second'] for r in rs]) + p50 = middle([r['new_order']['p50_us'] / 1000 for r in rs], 1, False) + p99 = middle([r['new_order']['p99_us'] / 1000 for r in rs], 1, False) + cpu = middle([r['cpu_us_per_transaction'] for r in rs], 1, False) + owner = middle([r.get('core_shares', {}).get('pure-owner') for r in rs], 2, False) + memory = middle([r.get('resident_mib', r.get('peak_resident_mib')) for r in rs], 0, False) + dev = middle([r['device_bytes_per_transaction'] for r in rs], 0, False) if device else '-' + batch = middle([r['batched'] / r['batches'] for r in rs if r.get('batches')], 1, False) + flag = '' if not failures else f' **{failures} failures**' + print(f'| {key[0]}, {key[1]}{"터미널" if key[0] != "SQLite" else "스레드"} | {tps} | {p50} / {p99} | {cpu} | ' + f'{owner} | {memory} | {dev} | {batch} |{flag}') + for e in ends: + print(f"end: pure {e['pure_resident_mib']} MiB resident, {e['pure_state_mib']} MiB states " + f"(x{e['pure_resident_mib'] / max(e['pure_state_mib'], 0.1):.2f}), store {e['pure_store_mib']} MiB, " + f"sqlite {e['sqlite_files_mib']} / {e['grouped_sqlite_files_mib']} MiB, {e['pure_counts']}") + print() + + +for name in sys.argv[1:] or ['ram-w1', 'ram-w4', 'sd-w1-*', 'sd-w4-*']: + table(name, name.startswith('sd')) |
