Files
turso/core
Pekka Enberg 2b168cf7b0 core/storage: Switch page cache queue to linked list
The page cache implementation uses a pre-allocated vector (`entries`)
with fixed capacity, along with a custom hash map and freelist. This
design requires expensive upfront allocation when creating a new
connection, which severely impacted performance in workloads that open
many short-lived connections (e.g., our concurrent write benchmarks that
create a new connection per transaction).

Therefore, replace the pre-allocated vector with an intrusive
doubly-linked list. This eliminates the page cache initialization
overhead from connection establishment, but also reduces memory usage to
entries that are actually used. Furthermore, the approach allows us to
grow the page cache with much less overhead.

The patch improves concurrent write throughput benchmark by 4x for
single-threaded performance.

Before:

```
$ write-throughput --threads 1 --batch-size 100 -i 1000 --mode concurrent
Running write throughput benchmark with 1 threads, 100 batch size, 1000 iterations, mode: Concurrent
Database created at: write_throughput_test.db
Thread 0: 100000 inserts in 3.82s (26173.63 inserts/sec)
```

After:

```
$ write-throughput --threads 1 --batch-size 100 -i 1000 --mode concurrent
Running write throughput benchmark with 1 threads, 100 batch size, 1000 iterations, mode: Concurrent
Database created at: write_throughput_test.db
Thread 0: 100000 inserts in 0.90s (110848.46 inserts/sec)
```
2025-10-01 14:41:35 +03:00
..
2025-09-23 14:22:02 -04:00
2025-09-24 18:06:55 -03:00
2025-06-30 10:01:03 +03:00
2025-09-30 22:43:58 +04:00
2025-08-15 17:08:53 -04:00
2025-01-28 14:55:38 -05:00
2025-09-30 11:35:06 +02:00
2025-09-17 11:57:23 +03:00
2025-01-28 14:55:38 -05:00
2025-09-30 14:52:59 +04:00
2025-09-19 16:48:12 +04:00
2025-06-23 19:52:13 +01:00
2025-09-22 16:37:31 +03:00
2025-06-30 09:54:13 +03:00
2025-09-23 14:22:02 -04:00