On Mon, Sep 14, 2026 at 2:08 PM Peter Geoghegan <[email protected]> wrote:
> The remaining problems all relate to prefetching itself,
> particularly issues with the read stream's heuristics that certain
> index scans run into. I have a WIP patch that fixes some of these
> problems by deduplicating nearby read stream block requests, but that
> isn't quite ready to post yet.

In case it helps when testing that patch, here is a small,
deterministic case of that kind, measured with v36 on a device with
added read latency. The data has the shape of Tomas's low "fuzz" data
sets [1]; what is new here is the latency and the counters of each
run.

Data: 8M rows, 163,266 heap pages. Two indexes over the same 400k
rows and the same heap range:

  t_id: on id, no jitter
  t_b:  on b = id plus a deterministic jitter of +/-50 rows

pg_stats reports correlation 1.0000 for both columns. The callback
skips a block only when it equals the previous one
(heapam_indexscan.c, v36-0006), so the block numbers each index hands
to the read stream, computed from the data, are:

  t_id: 8,164 distinct blocks, 8,164 block numbers
  t_b:  8,166 distinct blocks, 136,837 block numbers,
        127,380 of them not contiguous with the previous one

The 128,671 repeats match master's "shared hit=128671" for the same
scan.

Plain index scans with a cold cache, master 4545cee303c against the
same commit plus v36. The latency comes from dm-delay under ext4: an
8 kB O_DIRECT read takes 2.27 ms. Both scans read the same 9,262
blocks. Median of 5 runs, ms:

  io_method=worker, eic 16 (the defaults)
    t_id: master 653, v36 318
    t_b:  master 693, v36 804
  io_method=io_uring, eic 16
    t_id: master 647, v36 207
    t_b:  master 698, v36 681
  io_method=io_uring, eic 64
    t_id: master 656, v36 202
    t_b:  master 687, v36 730

So:

- With the default io_method=worker, v36 is slower than master on
  t_b: 1.16x here, and 1.24x in a separate run of 10 rounds (median
  715 vs 890 ms; v36 was slower in all 10 rounds).
- With io_uring the regression goes away, but so does the gain: t_b
  runs at master's speed, while t_id, which reads the same blocks,
  is 3.1x faster.

The worker result does not come from the size of the worker pool.
With io_min_workers = io_max_workers = 8 or 32, and with eic 64, v36
stays 1.11x to 1.16x slower than master on t_b.

What EXPLAIN (IO) reports for t_b with v36 (range over the runs):

  worker, eic 16:    I/O count 21,510-24,845, waits 486-544
  io_uring, eic 16:  I/O count 64,898-65,087, waits 400-422
  io_uring, eic 64:  I/O count 106,357-106,766, waits 416-472

For t_id it is always 514 I/Os of 15.88 blocks, with 8-11 waits
under io_uring and 120-173 under worker.

The device itself saw almost the same reads in every case: 690
requests of about 110 kB for master and for v36 with io_uring, and
777-812 slightly smaller ones for v36 with worker. So, as
Andres said [2], no second read is started for a block that is
already being read. The repeats cost time inside the stream, not on
the device.

My reading of read_stream.c, which I have not measured separately:
io_count goes up every time StartReadBuffers() returns need_wait, and
that also happens when the block's read is already in progress from
an earlier request of the same stream. Such a request takes one of
the max_ios slots ("in-progress=15.97" with eic 16, 63.8 with eic 64)
without starting a read, so few distinct reads are in flight. A
larger eic lets more repeats into the window, not more reads. If that
is right, it is the part that deduplicating nearby requests would
remove.

Other results, for completeness:

- On the local NVMe without added latency, t_b showed no clear time
  difference (the ranges overlap), which is why I added the delay.
- On an uncorrelated index (20k rows, 20,057 blocks), v36 was 2-3x
  faster than master on the local NVMe, and 7-8x faster with 1 or
  2 ms of latency (3.2-3.7 s against 23.4-24.7 s at 1 ms; 5.6 s
  against 43.6-45.4 s at 2 ms).

Not measured: real cloud storage (the delay device adds latency
only, in whole milliseconds, with no IOPS or throughput limit), and
jitter widths other than +/-50 rows.

Attached are the scripts (the builds, the data, the block sequence,
the delay device and the runs) and the raw output of every run. That
includes one set that is not valid, an IOPS cap that btrfs did not
enforce, which is marked as such.

[1] 
https://www.postgresql.org/message-id/[email protected]
[2] 
https://www.postgresql.org/message-id/tpzzzmjo22mon54wi3443rl55jvdk6jqckkxmr32vbtqv2xigk@vu3ykzppyjsc

--
Manu
Scripts used for the measurements in the reply (bash + psql, Linux).

Order: build.sh (two installs from one master commit), setup.sh (one data
directory, 8M rows), blockseq.sql (the block sequence each index hands to the
read stream), slowdisk.sh (a block device with a fixed per-read delay),
bench.sh (one run per build and scenario), bench_latency.sh and
bench_ioconf.sh (the loops over read delay and I/O settings).

Paths assume ~/pgpf; port 5690; sudo is needed only by slowdisk.sh.


======== build.sh ========

#!/bin/bash
# Build two PostgreSQL installs from the same master commit: without and
# with the v36 index prefetching series.  -O2, no assertions, so timings
# are comparable with the ones posted on the thread.
set -eu
BASE=${BASE:-4545cee303c}
SRC=$HOME/Proyectos/postgresql
W=$HOME/pgpf
build() {  # name worktree
  local name=$1 tree=$2
  cd $tree
  # --with-liburing was added after the first measurements (io_method=worker
  # results do not depend on it); it makes io_method=io_uring available
  ./configure --prefix=$W/i-$name --without-icu --with-liburing CFLAGS='-O2' > 
$W/configure-$name.log 2>&1
  # without --enable-depend a changed pg_config.h rebuilds nothing: start clean
  make -s clean > /dev/null 2>&1
  make -j"$(nproc)" -s > $W/make-$name.log 2>&1
  make -s install > $W/install-$name.log 2>&1
  make -C contrib/pg_prewarm -s install >> $W/install-$name.log 2>&1
  make -C contrib/pg_buffercache -s install >> $W/install-$name.log 2>&1
  echo "$name built: $($W/i-$name/bin/postgres --version)"
}
V36=${V36:-$(cd "$(dirname "$0")" && pwd)/v36}   # the ten v36-*.patch files 
from the thread
[ -d $W/src-base ] || git -C $SRC worktree add -q --detach $W/src-base $BASE
if [ ! -d $W/src-v36 ]; then
  git -C $SRC worktree add -q --detach $W/src-v36 $BASE
  git -C $W/src-v36 am -q $V36/*.patch
fi
build base $W/src-base
build v36 $W/src-v36
echo BUILD-DONE


======== setup.sh ========

#!/bin/bash
# One data directory for all three builds (same catversion): the data is
# identical and only the server binary changes between runs.
#
# t.a  is a permutation of id: index order unrelated to heap order.
# t.b  is id plus a deterministic jitter of +/-50 rows: nearly correlated,
#      so consecutive index entries keep returning to the same few heap
#      pages (A, B, A, B), which the callback's "same block twice in a row"
#      check does not collapse.
set -eu
W=$HOME/pgpf
PG=$W/i-base/bin
D=$W/data
PORT=5690
rm -rf $D
$PG/initdb -D $D -U postgres >/dev/null
cat >> $D/postgresql.conf <<EOF
port = $PORT
unix_socket_directories = '/tmp'
shared_buffers = 512MB
track_io_timing = on
max_parallel_workers_per_gather = 0
jit = off
autovacuum = off
EOF
$PG/pg_ctl -D $D -l $D/log -w start >/dev/null
$PG/psql -h /tmp -p $PORT -U postgres -XAq <<'SQL'
CREATE EXTENSION pg_prewarm;
CREATE TABLE t (id int, a int, b int, filler text);
INSERT INTO t
SELECT i,
       (i::bigint * 2654435761 % 8000000)::int,           -- permutation of 
0..N-1
       i + ((i::bigint * 7919) % 101)::int - 50,           -- +/-50 row jitter
       repeat('x', 120)
FROM generate_series(1, 8000000) i;
CREATE INDEX t_a ON t (a);
CREATE INDEX t_b ON t (b);
CREATE INDEX t_id ON t (id);                              -- same heap range, 
no jitter
VACUUM (FREEZE, ANALYZE) t;
SELECT 'heap pages ' || pg_relation_size('t') / 8192,
       'size ' || pg_size_pretty(pg_relation_size('t')),
       'corr a ' || round(correlation::numeric, 3)
  FROM pg_stats WHERE tablename = 't' AND attname = 'a';
SELECT 'corr b ' || round(correlation::numeric, 3) FROM pg_stats WHERE 
tablename = 't' AND attname = 'b';
SQL
$PG/pg_ctl -D $D -m fast -w stop >/dev/null
echo SETUP-DONE


======== blockseq.sql ========

-- The sequence of heap block numbers an index scan hands to the read stream,
-- computed from the data, for the two indexes over the same heap range.
-- nbtree returns equal keys in heap TID order, so (key, ctid) is index order.
-- "handed to the stream": the callback skips a block equal to the one just
-- before it, so only changes of block number count.
-- "breaks": a change to a block that is not the next one, i.e. where two
-- consecutive requests cannot be combined into one I/O.
WITH scan AS (
  SELECT 'id' AS idx, (ctid::text::point)[0]::bigint AS blk,
         row_number() OVER (ORDER BY id, ctid) AS n
    FROM t WHERE id BETWEEN 1000000 AND 1399999
  UNION ALL
  SELECT 'b', (ctid::text::point)[0]::bigint,
         row_number() OVER (ORDER BY b, ctid)
    FROM t WHERE b BETWEEN 1000000 AND 1399999
), seq AS (
  SELECT idx, blk, lag(blk) OVER (PARTITION BY idx ORDER BY n) AS prev FROM scan
)
SELECT idx,
       count(DISTINCT blk)                                          AS 
distinct_blocks,
       count(*) FILTER (WHERE prev IS NULL OR blk <> prev)          AS 
handed_to_stream,
       count(*) FILTER (WHERE blk <> prev AND blk <> prev + 1)      AS breaks
  FROM seq GROUP BY idx ORDER BY idx DESC;

SELECT attname, round(correlation::numeric, 4) AS correlation
  FROM pg_stats WHERE tablename = 't' AND attname IN ('id', 'a', 'b') ORDER BY 
attname;
SELECT pg_relation_size('t') / 8192 AS heap_pages;


======== slowdisk.sh ========

#!/bin/bash
# A block device with a fixed per-read latency, to stand in for a cloud
# volume (EBS gp3 reads take roughly 0.5-1 ms; a local NVMe ~0.05 ms).
#
#   file (nocow, so btrfs neither compresses nor caches it separately)
#     -> loop device with direct I/O (no second page cache below ext4)
#     -> dm-delay (every read delayed by READ_MS, writes not delayed)
#     -> ext4, mounted at $MNT
#
# dm-delay delays each bio by a timer, so concurrent reads overlap: this
# models latency, not a throughput cap, which is what prefetching hides.
# dm-delay only takes whole milliseconds.
#
# usage: slowdisk.sh up | down | setdelay <ms> | status
set -eu
W=$HOME/pgpf
IMG=$W/slowdisk.img
MNT=$W/slow
NAME=pgpf_slow
SIZE=6G

loopdev() { losetup -j "$IMG" -O NAME -n | head -1; }

table() {  # read_ms
  local dev sectors
  dev=$(loopdev)
  sectors=$(sudo blockdev --getsz "$dev")
  echo "0 $sectors delay $dev 0 $1 $dev 0 0"
}

case ${1:-status} in
  up)
    sudo modprobe dm-delay
    if [ ! -e "$IMG" ]; then
      touch "$IMG"; chattr +C "$IMG"      # must be set while the file is empty
      fallocate -l $SIZE "$IMG"
    fi
    [ -n "$(loopdev)" ] || sudo losetup --direct-io=on -f "$IMG"
    sudo dmsetup create $NAME --table "$(table 0)"
    sudo blkid /dev/mapper/$NAME >/dev/null || sudo mkfs.ext4 -q 
/dev/mapper/$NAME
    mkdir -p "$MNT"
    sudo mount -o noatime /dev/mapper/$NAME "$MNT"
    sudo chown "$(id -u):$(id -g)" "$MNT"
    ;;
  setdelay)
    # swap the table in place; the filesystem stays mounted
    sudo dmsetup suspend $NAME
    sudo dmsetup load $NAME --table "$(table "$2")"
    sudo dmsetup resume $NAME
    ;;
  down)
    mountpoint -q "$MNT" && sudo umount "$MNT"
    sudo dmsetup remove $NAME 2>/dev/null || true
    dev=$(loopdev); [ -z "$dev" ] || sudo losetup -d "$dev"
    ;;
  status)
    sudo dmsetup table $NAME 2>/dev/null || echo "no $NAME"
    losetup -j "$IMG" || true
    ;;
esac


======== bench.sh ========

#!/bin/bash
# Plain index scans with I/O, three builds from one master commit:
#   base      master (4545cee303c)
#   v36       master + v36 series (heap prefetching with READ_STREAM_DEFAULT)
#   v36full   v36 with that one call changed to READ_STREAM_FULL
#
# Method:
#   - one data directory, only the server binary changes
#   - build order rotated every round, so cache warm-up is not attributed
#     to any one build
#   - before every run: server stopped, every data file evicted from the
#     kernel page cache (posix_fadvise DONTNEED), server started inside a
#     memory cgroup so the table cannot live in the host page cache
#
# Scenarios:
#   cold_uncorr  t.a, index order unrelated to heap order, 20k rows
#   cold_near    t.b, nearly correlated (+/-50 row jitter), 400k rows
#   cold_corr    t.id, the same 400k rows and heap range, no jitter
#   warm25_uncorr  t.a after loading the index and 20% of the heap pages
#                  (8 of every 40 blocks) into shared_buffers, so hits and
#                  misses interleave along the scan
#
# Environment:
#   SCENARIOS, BUILDS  which to run
#   D                  data directory (default ~/pgpf/data)
#   PGOPTS             extra server options, e.g. "-c io_method=io_uring"
#   STATDEV            a /sys/block name: also report the read requests that
#                      reached that device during the query
#   IOPS, IODEV        cgroup read IOPS cap; NOT enforced on btrfs here
#
# usage: bench.sh [rounds] [MemoryMax]
set -u
R=${1:-3}
MEM=${2:-900M}
W=$HOME/pgpf
D=${D:-$W/data}   # D=$W/slow/data runs on the delayed device (slowdisk.sh)
PORT=5690
OUT=${OUT:-$(dirname "$0")/results.txt}

evict() {
  python3 - "$D/base" <<'PY'
import os, sys, pathlib
for f in pathlib.Path(sys.argv[1]).rglob("*"):
    if f.is_file():
        try:
            fd = os.open(f, os.O_RDONLY); os.fsync(fd)
            os.posix_fadvise(fd, 0, 0, os.POSIX_FADV_DONTNEED); os.close(fd)
        except OSError:
            pass
PY
}

run() {  # build scenario
  local b=$1 s=$2 PG=$W/i-$1/bin col lo hi opts
  $PG/pg_ctl -D $D -m fast -w stop >/dev/null 2>&1
  sleep 1; evict
  # IOPS=<n> caps read IOPS on the data device, like a provisioned cloud volume
  systemd-run --user --scope -q -p MemoryMax=$MEM -p MemoryHigh=$MEM 
--unit=pgpf-$$-$RANDOM \
    ${IOPS:+-p "IOReadIOPSMax=${IODEV:-/dev/nvme0n1} $IOPS"} \
    $PG/pg_ctl -D $D -l $D/log ${PGOPTS:+-o "$PGOPTS"} -w start >/dev/null 2>&1
  q() { $PG/psql -h /tmp -p $PORT -U postgres -XAtq -c "$1"; }
  case $s in
    cold_uncorr)   col=a; lo=1000000; hi=1019999 ;;
    cold_near)     col=b; lo=1000000; hi=1399999 ;;
    cold_corr)     col=id; lo=1000000; hi=1399999 ;;   # same heap region as 
cold_near, no jitter
    warm25_uncorr) col=a; lo=1000000; hi=1019999
                   q "SELECT pg_prewarm('t_a')" >/dev/null
                   q "SELECT sum(pg_prewarm('t', 'buffer', 'main', g, g + 7))
                        FROM generate_series(0, pg_relation_size('t') / 8192 - 
8, 40) g" >/dev/null ;;
  esac
  opts="ANALYZE, BUFFERS"; [ $b != base ] && opts="$opts, IO"
  # STATDEV=<name in /sys/block> adds what reached that device during the query:
  # read requests completed, requests merged by the block layer, kB per request
  local st0 st1 line
  [ -n "${STATDEV:-}" ] && st0=$(cat /sys/block/$STATDEV/stat)
  line=$($PG/psql -h /tmp -p $PORT -U postgres -XAtq <<SQL | awk -v b=$b -v 
s=$s '
      /Execution Time/ { sub(/.*Execution Time: /, ""); sub(/ ms/, ""); t = $0 }
      /Buffers: shared/ && !buf { buf = $0; sub(/^ *Buffers: /, "", buf) }
      /Prefetch:/ { pf = $0; sub(/^ */, "", pf) }
      /I\/O:/ { io = $0; sub(/^ */, "", io) }
      END { printf "%-14s %-8s %10s ms | %s | %s | %s", s, b, t, buf, pf, io }'
SET enable_seqscan = off; SET enable_bitmapscan = off; SET enable_indexonlyscan 
= off;
EXPLAIN ($opts) SELECT sum(length(filler)) FROM t WHERE $col BETWEEN $lo AND 
$hi;
SQL
)
  if [ -n "${STATDEV:-}" ]; then
    st1=$(cat /sys/block/$STATDEV/stat)
    line="$line | dev: $(echo $st0 $st1 | awk '{ r = $18 - $1; m = $19 - $2; kb 
= ($20 - $3) / 2
        printf "reads=%d merged=%d kB/read=%.1f", r, m, r ? kb / r : 0 }')"
  fi
  echo "$line"
}

SCENARIOS=${SCENARIOS:-"cold_uncorr cold_near warm25_uncorr"}
BUILDS=${BUILDS:-"base v36 v36full"}
: > $OUT
for s in $SCENARIOS; do
  for r in $(seq 1 $R); do
    set -- $BUILDS
    # rotate the build order by one position every round
    for _ in $(seq 2 $r); do set -- "${@:2}" "$1"; done
    for b in "$@"; do run $b $s | tee -a $OUT; done
  done
done
$W/i-base/bin/pg_ctl -D $D -m fast -w stop >/dev/null 2>&1
echo BENCH-DONE


======== bench_latency.sh ========

#!/bin/bash
# Run bench.sh on the delayed device (slowdisk.sh) at several per-read
# latencies. One results file per latency.
# usage: bench_latency.sh [rounds] ["ms list"]
set -eu
B=$(cd "$(dirname "$0")" && pwd)
R=${1:-3}
export D=$HOME/pgpf/slow/data
export SCENARIOS=${SCENARIOS:-"cold_uncorr cold_near cold_corr"}
export BUILDS=${BUILDS:-"base v36"}
for ms in ${2:-0 1 2}; do
  bash $B/slowdisk.sh setdelay $ms
  echo "== read delay ${ms} ms"
  OUT=$B/results_delay${ms}ms.txt bash $B/bench.sh $R
done
echo LATENCY-DONE


======== bench_ioconf.sh ========

#!/bin/bash
# Nearly correlated scan at 2 ms read latency, varying the settings that bound
# how many reads can be in flight: io_workers (io_method=worker) and
# effective_io_concurrency. One results file per setting.
# usage: bench_ioconf.sh [rounds]
set -eu
B=$(cd "$(dirname "$0")" && pwd)
R=${1:-5}
export D=$HOME/pgpf/slow/data
export STATDEV=$(basename "$(readlink -f /dev/mapper/pgpf_slow)")
export SCENARIOS=${SCENARIOS:-cold_near}
export BUILDS="base v36"
bash $B/slowdisk.sh setdelay 2
# PG19 sizes the I/O worker pool dynamically: io_min_workers (default 2) at
# start, one more every io_worker_launch_interval (100ms) up to io_max_workers 
(8)
CONFS=${CONFS:-"io_min_workers=2 io_max_workers=8 effective_io_concurrency=16
io_min_workers=8 io_max_workers=8 effective_io_concurrency=16
io_min_workers=32 io_max_workers=32 effective_io_concurrency=16
io_min_workers=32 io_max_workers=32 effective_io_concurrency=64"}
while IFS= read -r conf; do
  tag=$(echo "$conf" | sed -e 's/io_min_workers=\([0-9]*\) 
io_max_workers=\([0-9]*\)/w\1-\2/' \
                          -e 's/io_method=//' -e 's/ 
effective_io_concurrency=/_eic/')
  export PGOPTS=$(printf -- '-c %s ' $conf)
  echo "== $conf"
  OUT=$B/results_2ms_$tag.txt bash $B/bench.sh $R < /dev/null
done <<< "$CONFS"
echo IOCONF-DONE
Raw results: every run, as printed by bench.sh. Nothing was dropped.

Builds: master 4545cee303c ("base"), and the same commit with the v36 series
("v36"). "v36full" = v36 with the heap read stream opened with
READ_STREAM_FULL instead of READ_STREAM_DEFAULT (one line; measured only in
the first set). -O2, no assertions. The first four sets were run before the
builds were redone with --with-liburing; io_method=worker does not use it,
and the worker control in the last sets matches the earlier worker numbers.

Machine: AMD Ryzen AI 9 HX 370 (24 threads), 30 GB RAM, Linux 7.1.12,
Kingston SKC3000D NVMe. Data directory on btrfs with zstd compression for
the "local NVMe" sets; on ext4 over dm-delay over a loop device (direct I/O,
nocow backing file) for the "delay" sets. 8 kB O_DIRECT reads on that device
took 0.16 / 1.25 / 2.27 ms at a delay of 0 / 1 / 2 ms.

Table: 8M rows, 163,266 heap pages. pg_stats correlation: id 1.0000,
b 1.0000, a -0.0095. Each index is 21,937 pages.

Server: shared_buffers 512MB, track_io_timing on, jit off, autovacuum off,
max_parallel_workers_per_gather 0; defaults otherwise (io_method worker,
io_min_workers 2, io_max_workers 8, effective_io_concurrency 16) unless a
section says so. Server stopped, data files evicted from the page cache and
server started in a 900 MB memory cgroup before every run; build order
rotated each round.

Columns: scenario, build, execution time | EXPLAIN Buffers | EXPLAIN (IO)
Prefetch line | EXPLAIN (IO) I/O line | read requests that reached the
device during the query (only where "dev:" is shown; from /sys/block/dm-0/stat).

Scenarios: cold_uncorr = t.a BETWEEN 1000000 AND 1019999 (uncorrelated);
cold_near = t.b BETWEEN 1000000 AND 1399999 (+/-50 row jitter);
cold_corr = t.id BETWEEN 1000000 AND 1399999 (same rows' heap range, no
jitter); warm25_uncorr = cold_uncorr after pg_prewarm of the index and of 8
of every 40 heap blocks.

Block sequence for the 400k-row range (blockseq.sql):
  index  distinct blocks  handed to the stream  breaks in contiguity
  id     8,164            8,164                 0
  b      8,166            136,837               127,380


======== local NVMe, uncorrelated and nearly correlated, 3 builds ========
file: results.txt

cold_uncorr    base       1652.229 ms | shared read=20057 |  | 
cold_uncorr    v36         841.913 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=2575 size=1.00 in-progress=15.99
cold_uncorr    v36full     772.660 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=3031 size=1.00 in-progress=15.99
cold_uncorr    v36         757.465 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=2642 size=1.00 in-progress=15.99
cold_uncorr    v36full     809.596 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=3037 size=1.00 in-progress=15.99
cold_uncorr    base       1394.250 ms | shared read=20057 |  | 
cold_uncorr    v36full     707.809 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=2964 size=1.00 in-progress=15.99
cold_uncorr    base       1600.562 ms | shared read=20057 |  | 
cold_uncorr    v36         538.298 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=4346 size=1.00 in-progress=15.99
cold_near      base        287.991 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         326.905 ms | shared hit=128664 read=9262 | Prefetch: 
avg=207.18 max=271 capacity=272 | I/O: count=11858 waits=76 size=1.00 
in-progress=15.96
cold_near      v36full     256.034 ms | shared hit=128657 read=9262 | Prefetch: 
avg=165.87 max=271 capacity=272 | I/O: count=15289 waits=65 size=1.00 
in-progress=15.97
cold_near      v36         288.212 ms | shared hit=128663 read=9262 | Prefetch: 
avg=181.41 max=271 capacity=272 | I/O: count=13638 waits=53 size=1.00 
in-progress=15.98
cold_near      v36full     214.332 ms | shared hit=128671 read=9262 | Prefetch: 
avg=153.73 max=240 capacity=272 | I/O: count=14896 waits=26 size=1.00 
in-progress=15.96
cold_near      base        290.064 ms | shared hit=128671 read=9262 |  | 
cold_near      v36full     278.529 ms | shared hit=128666 read=9262 | Prefetch: 
avg=184.40 max=271 capacity=272 | I/O: count=12868 waits=45 size=1.00 
in-progress=15.95
cold_near      base        243.609 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         196.073 ms | shared hit=128668 read=9262 | Prefetch: 
avg=156.58 max=271 capacity=272 | I/O: count=14592 waits=33 size=1.00 
in-progress=15.97
warm25_uncorr  base       1457.063 ms | shared hit=4052 read=16005 |  | 
warm25_uncorr  v36         500.662 ms | shared hit=4052 read=16005 | Prefetch: 
avg=20.34 max=27 capacity=272 | I/O: count=15995 waits=2294 size=1.00 
in-progress=15.99
warm25_uncorr  v36full     670.477 ms | shared hit=4052 read=16005 | Prefetch: 
avg=20.34 max=27 capacity=272 | I/O: count=15995 waits=2222 size=1.00 
in-progress=15.99
warm25_uncorr  v36         703.510 ms | shared hit=4052 read=16005 | Prefetch: 
avg=20.33 max=27 capacity=272 | I/O: count=15995 waits=1884 size=1.00 
in-progress=15.99
warm25_uncorr  v36full     406.187 ms | shared hit=4052 read=16005 | Prefetch: 
avg=20.34 max=27 capacity=272 | I/O: count=15995 waits=2675 size=1.00 
in-progress=15.99
warm25_uncorr  base       1492.717 ms | shared hit=4052 read=16005 |  | 
warm25_uncorr  v36full     482.859 ms | shared hit=4052 read=16005 | Prefetch: 
avg=20.34 max=27 capacity=272 | I/O: count=15995 waits=1966 size=1.00 
in-progress=15.99
warm25_uncorr  base       1513.032 ms | shared hit=4052 read=16005 |  | 
warm25_uncorr  v36         500.280 ms | shared hit=4052 read=16005 | Prefetch: 
avg=20.34 max=27 capacity=272 | I/O: count=15995 waits=2280 size=1.00 
in-progress=15.99


======== local NVMe, correlated index ========
file: results_corr.txt

cold_corr      base        195.436 ms | shared read=9260 |  | 
cold_corr      v36         227.077 ms | shared read=9260 | Prefetch: avg=208.18 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=13.38
cold_corr      v36         230.955 ms | shared read=9260 | Prefetch: avg=155.80 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=10.13
cold_corr      base        189.830 ms | shared read=9260 |  | 
cold_corr      base        222.918 ms | shared read=9260 |  | 
cold_corr      v36         212.621 ms | shared read=9260 | Prefetch: avg=117.64 
max=128 capacity=272 | I/O: count=514 waits=7 size=15.88 in-progress=7.77
cold_corr      v36         149.056 ms | shared read=9260 | Prefetch: avg=202.57 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=13.04
cold_corr      base        179.225 ms | shared read=9260 |  | 
cold_near      base        275.315 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         234.802 ms | shared hit=128662 read=9262 | Prefetch: 
avg=171.57 max=271 capacity=272 | I/O: count=14082 waits=49 size=1.00 
in-progress=15.98
cold_near      v36         201.737 ms | shared hit=128670 read=9262 | Prefetch: 
avg=167.34 max=257 capacity=272 | I/O: count=13772 waits=29 size=1.00 
in-progress=15.98
cold_near      base        227.889 ms | shared hit=128671 read=9262 |  | 
cold_near      base        236.495 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         341.524 ms | shared hit=128653 read=9262 | Prefetch: 
avg=215.64 max=271 capacity=272 | I/O: count=11808 waits=89 size=1.00 
in-progress=15.97
cold_near      v36         316.128 ms | shared hit=128662 read=9262 | Prefetch: 
avg=210.53 max=271 capacity=272 | I/O: count=11376 waits=57 size=1.00 
in-progress=15.95
cold_near      base        243.181 ms | shared hit=128671 read=9262 |  | 


======== local NVMe, cgroup IOReadIOPSMax=3000 ========
file: results_iops3000.txt
NOT VALID: the cap was not enforced on this btrfs volume (20k random reads ran 
at ~11k IOPS). Kept only for completeness.

cold_corr      base        172.250 ms | shared read=9260 |  | 
cold_corr      v36         125.666 ms | shared read=9260 | Prefetch: avg=235.44 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=15.07
cold_corr      v36         189.824 ms | shared read=9260 | Prefetch: avg=219.84 
max=271 capacity=272 | I/O: count=514 waits=9 size=15.88 in-progress=13.86
cold_corr      base        223.343 ms | shared read=9260 |  | 
cold_corr      base        232.947 ms | shared read=9260 |  | 
cold_corr      v36         231.199 ms | shared read=9260 | Prefetch: avg=117.51 
max=128 capacity=272 | I/O: count=514 waits=7 size=15.88 in-progress=7.76
cold_corr      v36         158.269 ms | shared read=9260 | Prefetch: avg=227.44 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=14.58
cold_corr      base        304.670 ms | shared read=9260 |  | 
cold_near      base        287.228 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         317.635 ms | shared hit=128657 read=9262 | Prefetch: 
avg=215.91 max=271 capacity=272 | I/O: count=10927 waits=61 size=1.00 
in-progress=15.97
cold_near      v36         355.832 ms | shared hit=128657 read=9262 | Prefetch: 
avg=202.60 max=271 capacity=272 | I/O: count=12780 waits=86 size=1.00 
in-progress=15.96
cold_near      base        319.196 ms | shared hit=128671 read=9262 |  | 
cold_near      base        255.153 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         249.823 ms | shared hit=128659 read=9262 | Prefetch: 
avg=202.12 max=271 capacity=272 | I/O: count=12149 waits=83 size=1.00 
in-progress=15.96
cold_near      v36         387.327 ms | shared hit=128642 read=9262 | Prefetch: 
avg=203.17 max=271 capacity=272 | I/O: count=13222 waits=151 size=1.00 
in-progress=15.97
cold_near      base        209.653 ms | shared hit=128671 read=9262 |  | 


======== delay device, read delay 0 ms ========
file: results_delay0ms.txt

cold_uncorr    base       3805.275 ms | shared read=20057 |  | 
cold_uncorr    v36        1028.881 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=5824 size=1.00 in-progress=15.99
cold_uncorr    v36         899.596 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=7369 size=1.00 in-progress=15.99
cold_uncorr    base       3127.393 ms | shared read=20057 |  | 
cold_uncorr    base       3036.812 ms | shared read=20057 |  | 
cold_uncorr    v36         993.370 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=7364 size=1.00 in-progress=15.99
cold_near      base        291.340 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         251.756 ms | shared hit=128658 read=9262 | Prefetch: 
avg=126.84 max=223 capacity=272 | I/O: count=18240 waits=92 size=1.00 
in-progress=15.97
cold_near      v36         193.829 ms | shared hit=128657 read=9262 | Prefetch: 
avg=123.14 max=251 capacity=272 | I/O: count=19646 waits=105 size=1.00 
in-progress=15.98
cold_near      base        314.334 ms | shared hit=128671 read=9262 |  | 
cold_near      base        311.838 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         339.489 ms | shared hit=128647 read=9262 | Prefetch: 
avg=125.22 max=257 capacity=272 | I/O: count=18726 waits=127 size=1.00 
in-progress=15.96
cold_corr      base        707.670 ms | shared read=9260 |  | 
cold_corr      v36         163.749 ms | shared read=9260 | Prefetch: avg=255.23 
max=271 capacity=272 | I/O: count=514 waits=26 size=15.88 in-progress=15.42
cold_corr      v36         216.618 ms | shared read=9260 | Prefetch: avg=209.31 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=13.45
cold_corr      base        208.080 ms | shared read=9260 |  | 
cold_corr      base        284.302 ms | shared read=9260 |  | 
cold_corr      v36         187.470 ms | shared read=9260 | Prefetch: avg=255.92 
max=271 capacity=272 | I/O: count=514 waits=13 size=15.88 in-progress=15.47


======== delay device, read delay 1 ms ========
file: results_delay1ms.txt

cold_uncorr    base      24141.171 ms | shared read=20057 |  | 
cold_uncorr    v36        3182.943 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=5407 size=1.00 in-progress=15.99
cold_uncorr    v36        3712.458 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=5254 size=1.00 in-progress=15.99
cold_uncorr    base      23405.470 ms | shared read=20057 |  | 
cold_uncorr    base      24746.832 ms | shared read=20057 |  | 
cold_uncorr    v36        3278.661 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=5444 size=1.00 in-progress=15.99
cold_near      base        339.626 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         405.476 ms | shared hit=128615 read=9262 | Prefetch: 
avg=109.79 max=239 capacity=272 | I/O: count=21377 waits=311 size=1.00 
in-progress=15.96
cold_near      v36         367.895 ms | shared hit=128600 read=9262 | Prefetch: 
avg=106.19 max=253 capacity=272 | I/O: count=22246 waits=313 size=1.00 
in-progress=15.98
cold_near      base        346.190 ms | shared hit=128671 read=9262 |  | 
cold_near      base        432.407 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         470.594 ms | shared hit=128594 read=9262 | Prefetch: 
avg=107.58 max=271 capacity=272 | I/O: count=22990 waits=413 size=1.00 
in-progress=15.97
cold_corr      base        361.479 ms | shared read=9260 |  | 
cold_corr      v36         208.178 ms | shared read=9260 | Prefetch: avg=252.81 
max=271 capacity=272 | I/O: count=514 waits=33 size=15.88 in-progress=15.32
cold_corr      v36         229.028 ms | shared read=9260 | Prefetch: avg=254.71 
max=271 capacity=272 | I/O: count=514 waits=94 size=15.88 in-progress=15.40
cold_corr      base        424.259 ms | shared read=9260 |  | 
cold_corr      base        387.988 ms | shared read=9260 |  | 
cold_corr      v36         209.070 ms | shared read=9260 | Prefetch: avg=248.68 
max=271 capacity=272 | I/O: count=514 waits=63 size=15.88 in-progress=15.08


======== delay device, read delay 2 ms ========
file: results_delay2ms.txt

cold_uncorr    base      43637.677 ms | shared read=20057 |  | 
cold_uncorr    v36        5556.318 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=5566 size=1.00 in-progress=15.99
cold_uncorr    v36        5579.381 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=5483 size=1.00 in-progress=15.99
cold_uncorr    base      45416.578 ms | shared read=20057 |  | 
cold_uncorr    base      44532.883 ms | shared read=20057 |  | 
cold_uncorr    v36        5590.942 ms | shared read=20057 | Prefetch: avg=15.99 
max=16 capacity=272 | I/O: count=19997 waits=5528 size=1.00 in-progress=15.99
cold_near      base        771.451 ms | shared hit=128671 read=9262 |  | 
cold_near      v36         978.947 ms | shared hit=128560 read=9262 | Prefetch: 
avg=104.92 max=271 capacity=272 | I/O: count=23412 waits=534 size=1.00 
in-progress=15.98
cold_near      v36         899.546 ms | shared hit=128563 read=9262 | Prefetch: 
avg=103.43 max=271 capacity=272 | I/O: count=23438 waits=578 size=1.00 
in-progress=15.98
cold_near      base        735.301 ms | shared hit=128671 read=9262 |  | 
cold_near      base        634.483 ms | shared hit=128671 read=9262 |  | 
cold_near      v36        1039.431 ms | shared hit=128553 read=9262 | Prefetch: 
avg=97.32 max=271 capacity=272 | I/O: count=25488 waits=614 size=1.00 
in-progress=15.99
cold_corr      base        695.125 ms | shared read=9260 |  | 
cold_corr      v36         308.994 ms | shared read=9260 | Prefetch: avg=256.36 
max=271 capacity=272 | I/O: count=514 waits=115 size=15.88 in-progress=15.49
cold_corr      v36         314.678 ms | shared read=9260 | Prefetch: avg=254.43 
max=271 capacity=272 | I/O: count=514 waits=143 size=15.88 in-progress=15.39
cold_corr      base        734.187 ms | shared read=9260 |  | 
cold_corr      base        674.151 ms | shared read=9260 |  | 
cold_corr      v36         340.542 ms | shared read=9260 | Prefetch: avg=254.99 
max=271 capacity=272 | I/O: count=514 waits=119 size=15.88 in-progress=15.42


======== delay 2 ms, with device request counts ========
file: results_delay2ms_dev.txt

cold_near      base        788.897 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=697 merged=0 kB/read=109.2
cold_near      v36         811.223 ms | shared hit=128574 read=9262 | Prefetch: 
avg=98.97 max=271 capacity=272 | I/O: count=24048 waits=504 size=1.00 
in-progress=15.97 | dev: reads=787 merged=0 kB/read=96.5
cold_near      v36         732.594 ms | shared hit=128582 read=9262 | Prefetch: 
avg=98.77 max=271 capacity=272 | I/O: count=23552 waits=477 size=1.00 
in-progress=15.97 | dev: reads=756 merged=0 kB/read=100.6
cold_near      base        651.234 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=692 merged=0 kB/read=109.9
cold_near      base        839.158 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=692 merged=0 kB/read=109.9
cold_near      v36        1287.441 ms | shared hit=128553 read=9262 | Prefetch: 
avg=100.10 max=271 capacity=272 | I/O: count=24236 waits=541 size=1.00 
in-progress=15.97 | dev: reads=874 merged=0 kB/read=87.0
cold_corr      base        816.989 ms | shared read=9260 |  |  | dev: reads=695 
merged=0 kB/read=109.5
cold_corr      v36         324.828 ms | shared read=9260 | Prefetch: avg=256.17 
max=271 capacity=272 | I/O: count=514 waits=157 size=15.88 in-progress=15.47 | 
dev: reads=691 merged=0 kB/read=110.0
cold_corr      v36         339.526 ms | shared read=9260 | Prefetch: avg=255.74 
max=271 capacity=272 | I/O: count=514 waits=155 size=15.88 in-progress=15.46 | 
dev: reads=690 merged=0 kB/read=109.9
cold_corr      base        615.241 ms | shared read=9260 |  |  | dev: reads=692 
merged=0 kB/read=109.7
cold_corr      base        652.548 ms | shared read=9260 |  |  | dev: reads=692 
merged=0 kB/read=109.7
cold_corr      v36         327.421 ms | shared read=9260 | Prefetch: avg=255.68 
max=271 capacity=272 | I/O: count=514 waits=145 size=15.88 in-progress=15.46 | 
dev: reads=690 merged=0 kB/read=110.1


======== delay 2 ms, nearly correlated, 10 rounds ========
file: results_delay2ms_near10.txt

cold_near      base        628.479 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=688 merged=0 kB/read=110.2
cold_near      v36         842.861 ms | shared hit=128573 read=9262 | Prefetch: 
avg=98.14 max=271 capacity=272 | I/O: count=24207 waits=492 size=1.00 
in-progress=15.98 | dev: reads=809 merged=0 kB/read=94.0
cold_near      v36         786.284 ms | shared hit=128578 read=9262 | Prefetch: 
avg=96.68 max=271 capacity=272 | I/O: count=24434 waits=484 size=1.00 
in-progress=15.98 | dev: reads=795 merged=0 kB/read=95.5
cold_near      base        719.211 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        670.891 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         867.353 ms | shared hit=128560 read=9262 | Prefetch: 
avg=92.20 max=271 capacity=272 | I/O: count=25906 waits=519 size=1.00 
in-progress=15.95 | dev: reads=848 merged=0 kB/read=89.7
cold_near      v36         731.318 ms | shared hit=128570 read=9262 | Prefetch: 
avg=96.11 max=257 capacity=272 | I/O: count=24695 waits=483 size=1.00 
in-progress=15.98 | dev: reads=767 merged=0 kB/read=99.2
cold_near      base        711.721 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        723.261 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         911.945 ms | shared hit=128572 read=9262 | Prefetch: 
avg=96.35 max=271 capacity=272 | I/O: count=24884 waits=547 size=1.00 
in-progress=15.99 | dev: reads=883 merged=0 kB/read=86.1
cold_near      v36         961.812 ms | shared hit=128552 read=9262 | Prefetch: 
avg=104.96 max=271 capacity=272 | I/O: count=23347 waits=572 size=1.00 
in-progress=15.97 | dev: reads=865 merged=0 kB/read=87.9
cold_near      base        720.178 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=706 merged=0 kB/read=107.8
cold_near      base        740.722 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36        1038.626 ms | shared hit=128550 read=9262 | Prefetch: 
avg=104.01 max=271 capacity=272 | I/O: count=23466 waits=537 size=1.00 
in-progress=15.97 | dev: reads=886 merged=0 kB/read=86.0
cold_near      v36         858.799 ms | shared hit=128564 read=9262 | Prefetch: 
avg=99.06 max=271 capacity=272 | I/O: count=23972 waits=506 size=1.00 
in-progress=15.99 | dev: reads=816 merged=0 kB/read=93.1
cold_near      base        701.321 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        618.703 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         912.249 ms | shared hit=128557 read=9262 | Prefetch: 
avg=101.50 max=271 capacity=272 | I/O: count=23776 waits=541 size=1.00 
in-progress=15.99 | dev: reads=844 merged=0 kB/read=90.1
cold_near      v36        1173.631 ms | shared hit=128549 read=9262 | Prefetch: 
avg=117.41 max=271 capacity=272 | I/O: count=20690 waits=536 size=1.00 
in-progress=15.98 | dev: reads=829 merged=0 kB/read=91.8
cold_near      base        869.266 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2


======== delay 2 ms, io_min_workers=2 io_max_workers=8, eic 16 ========
file: results_2ms_w2-8_eic16.txt

cold_near      base        715.714 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=693 merged=0 kB/read=109.8
cold_near      v36         648.691 ms | shared hit=128590 read=9262 | Prefetch: 
avg=101.58 max=252 capacity=272 | I/O: count=23024 waits=415 size=1.00 
in-progress=15.94 | dev: reads=735 merged=0 kB/read=103.5
cold_near      v36         774.553 ms | shared hit=128580 read=9262 | Prefetch: 
avg=100.16 max=271 capacity=272 | I/O: count=23397 waits=476 size=1.00 
in-progress=15.97 | dev: reads=773 merged=0 kB/read=98.3
cold_near      base        687.415 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        708.205 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         787.544 ms | shared hit=128575 read=9262 | Prefetch: 
avg=89.96 max=204 capacity=272 | I/O: count=25970 waits=454 size=1.00 
in-progress=15.99 | dev: reads=727 merged=0 kB/read=104.6
cold_near      v36         879.530 ms | shared hit=128571 read=9262 | Prefetch: 
avg=96.44 max=271 capacity=272 | I/O: count=24745 waits=541 size=1.00 
in-progress=15.94 | dev: reads=836 merged=0 kB/read=91.0
cold_near      base        715.530 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        667.619 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         813.518 ms | shared hit=128563 read=9262 | Prefetch: 
avg=93.95 max=271 capacity=272 | I/O: count=25209 waits=504 size=1.00 
in-progress=15.97 | dev: reads=820 merged=0 kB/read=92.8


======== delay 2 ms, io_min_workers=io_max_workers=8, eic 16 ========
file: results_2ms_w8-8_eic16.txt

cold_near      base        680.033 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         765.969 ms | shared hit=128574 read=9262 | Prefetch: 
avg=96.75 max=271 capacity=272 | I/O: count=24415 waits=490 size=1.00 
in-progress=15.95 | dev: reads=782 merged=0 kB/read=97.3
cold_near      v36         797.225 ms | shared hit=128570 read=9262 | Prefetch: 
avg=98.43 max=271 capacity=272 | I/O: count=24208 waits=500 size=1.00 
in-progress=15.97 | dev: reads=801 merged=0 kB/read=94.9
cold_near      base        731.915 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=689 merged=0 kB/read=110.3
cold_near      base        682.726 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         838.295 ms | shared hit=128567 read=9262 | Prefetch: 
avg=95.81 max=271 capacity=272 | I/O: count=24863 waits=506 size=1.00 
in-progress=15.99 | dev: reads=819 merged=0 kB/read=92.9
cold_near      v36         752.924 ms | shared hit=128570 read=9262 | Prefetch: 
avg=97.97 max=259 capacity=272 | I/O: count=24091 waits=513 size=1.00 
in-progress=15.97 | dev: reads=790 merged=0 kB/read=96.3
cold_near      base        694.124 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=686 merged=0 kB/read=110.8
cold_near      base        755.660 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=688 merged=0 kB/read=110.2
cold_near      v36         845.281 ms | shared hit=128565 read=9262 | Prefetch: 
avg=99.84 max=271 capacity=272 | I/O: count=23835 waits=507 size=1.00 
in-progress=15.94 | dev: reads=818 merged=0 kB/read=93.0


======== delay 2 ms, io_min_workers=io_max_workers=32, eic 16 ========
file: results_2ms_w32-32_eic16.txt

cold_near      base        697.190 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         742.540 ms | shared hit=128597 read=9262 | Prefetch: 
avg=96.79 max=203 capacity=272 | I/O: count=24309 waits=417 size=1.00 
in-progress=15.98 | dev: reads=736 merged=0 kB/read=103.0
cold_near      v36         855.282 ms | shared hit=128570 read=9262 | Prefetch: 
avg=96.26 max=271 capacity=272 | I/O: count=24491 waits=509 size=1.00 
in-progress=15.96 | dev: reads=810 merged=0 kB/read=93.8
cold_near      base        683.933 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        658.507 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         677.703 ms | shared hit=128588 read=9262 | Prefetch: 
avg=96.10 max=248 capacity=272 | I/O: count=24558 waits=454 size=1.00 
in-progress=15.97 | dev: reads=737 merged=0 kB/read=103.0
cold_near      v36         922.887 ms | shared hit=128558 read=9262 | Prefetch: 
avg=106.31 max=271 capacity=272 | I/O: count=22762 waits=556 size=1.00 
in-progress=15.98 | dev: reads=846 merged=0 kB/read=89.9
cold_near      base        698.108 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.1
cold_near      base        665.118 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         791.373 ms | shared hit=128577 read=9262 | Prefetch: 
avg=97.25 max=271 capacity=272 | I/O: count=24259 waits=501 size=1.00 
in-progress=15.98 | dev: reads=786 merged=0 kB/read=96.8


======== delay 2 ms, io_min_workers=io_max_workers=32, eic 64 ========
file: results_2ms_w32-32_eic64.txt

cold_near      base        731.686 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         831.352 ms | shared hit=128643 read=9262 | Prefetch: 
avg=184.70 max=375 capacity=376 | I/O: count=48512 waits=460 size=1.00 
in-progress=63.79 | dev: reads=912 merged=0 kB/read=83.4
cold_near      v36         913.928 ms | shared hit=128632 read=9262 | Prefetch: 
avg=179.99 max=375 capacity=376 | I/O: count=49618 waits=484 size=1.00 
in-progress=63.66 | dev: reads=965 merged=0 kB/read=78.8
cold_near      base        697.416 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=704 merged=0 kB/read=108.2
cold_near      base        743.645 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=691 merged=0 kB/read=110.1
cold_near      v36         843.014 ms | shared hit=128630 read=9262 | Prefetch: 
avg=184.61 max=375 capacity=376 | I/O: count=48340 waits=473 size=1.00 
in-progress=63.76 | dev: reads=885 merged=0 kB/read=85.9
cold_near      v36         715.381 ms | shared hit=128629 read=9262 | Prefetch: 
avg=197.24 max=375 capacity=376 | I/O: count=45490 waits=379 size=1.00 
in-progress=63.81 | dev: reads=805 merged=0 kB/read=94.4
cold_near      base        739.173 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        713.214 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         816.469 ms | shared hit=128633 read=9262 | Prefetch: 
avg=196.32 max=375 capacity=376 | I/O: count=45339 waits=371 size=1.00 
in-progress=63.68 | dev: reads=803 merged=0 kB/read=94.7


======== delay 2 ms, io_method=worker, eic 16 (control, --with-liburing builds) 
========
file: results_2ms_worker_eic16.txt

cold_near      base        759.837 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=693 merged=0 kB/read=109.8
cold_near      v36         894.134 ms | shared hit=128566 read=9262 | Prefetch: 
avg=112.27 max=271 capacity=272 | I/O: count=21510 waits=544 size=1.00 
in-progress=15.98 | dev: reads=812 merged=0 kB/read=93.7
cold_near      v36         716.359 ms | shared hit=128569 read=9262 | Prefetch: 
avg=96.38 max=271 capacity=272 | I/O: count=24133 waits=486 size=1.00 
in-progress=15.94 | dev: reads=777 merged=0 kB/read=97.9
cold_near      base        686.676 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        693.308 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         803.587 ms | shared hit=128570 read=9262 | Prefetch: 
avg=96.29 max=271 capacity=272 | I/O: count=24499 waits=519 size=1.00 
in-progress=15.96 | dev: reads=804 merged=0 kB/read=94.6
cold_near      v36         801.003 ms | shared hit=128568 read=9262 | Prefetch: 
avg=101.34 max=271 capacity=272 | I/O: count=23110 waits=486 size=1.00 
in-progress=15.93 | dev: reads=787 merged=0 kB/read=96.7
cold_near      base        713.368 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        679.883 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         809.360 ms | shared hit=128565 read=9262 | Prefetch: 
avg=96.81 max=271 capacity=272 | I/O: count=24845 waits=518 size=1.00 
in-progress=15.94 | dev: reads=808 merged=0 kB/read=94.1
cold_corr      base        652.716 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      v36         271.868 ms | shared read=9260 | Prefetch: avg=255.71 
max=271 capacity=272 | I/O: count=514 waits=142 size=15.88 in-progress=15.46 | 
dev: reads=691 merged=0 kB/read=110.0
cold_corr      v36         317.911 ms | shared read=9260 | Prefetch: avg=256.67 
max=271 capacity=272 | I/O: count=514 waits=120 size=15.88 in-progress=15.51 | 
dev: reads=691 merged=0 kB/read=110.0
cold_corr      base        634.490 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      base        656.403 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      v36         342.476 ms | shared read=9260 | Prefetch: avg=255.58 
max=271 capacity=272 | I/O: count=514 waits=148 size=15.88 in-progress=15.44 | 
dev: reads=691 merged=0 kB/read=109.9
cold_corr      v36         303.390 ms | shared read=9260 | Prefetch: avg=255.74 
max=271 capacity=272 | I/O: count=514 waits=173 size=15.88 in-progress=15.46 | 
dev: reads=691 merged=0 kB/read=110.0
cold_corr      base        611.305 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      base        677.298 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      v36         337.760 ms | shared read=9260 | Prefetch: avg=256.39 
max=271 capacity=272 | I/O: count=514 waits=137 size=15.88 in-progress=15.49 | 
dev: reads=691 merged=0 kB/read=110.0


======== delay 2 ms, io_method=io_uring, eic 16 ========
file: results_2ms_io_uring_eic16.txt

cold_near      base        608.865 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         680.972 ms | shared hit=127669 read=9262 | Prefetch: 
avg=32.68 max=41 capacity=272 | I/O: count=65087 waits=405 size=1.00 
in-progress=15.97 | dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         676.206 ms | shared hit=127674 read=9262 | Prefetch: 
avg=32.57 max=41 capacity=272 | I/O: count=64898 waits=411 size=1.00 
in-progress=15.94 | dev: reads=690 merged=0 kB/read=110.2
cold_near      base        624.405 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        780.401 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         703.659 ms | shared hit=127674 read=9262 | Prefetch: 
avg=32.57 max=41 capacity=272 | I/O: count=64898 waits=400 size=1.00 
in-progress=15.94 | dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         722.234 ms | shared hit=127669 read=9262 | Prefetch: 
avg=32.64 max=41 capacity=272 | I/O: count=65017 waits=401 size=1.00 
in-progress=15.96 | dev: reads=689 merged=0 kB/read=110.2
cold_near      base        712.393 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        697.989 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         665.212 ms | shared hit=127669 read=9262 | Prefetch: 
avg=32.64 max=41 capacity=272 | I/O: count=65017 waits=422 size=1.00 
in-progress=15.96 | dev: reads=690 merged=0 kB/read=110.2
cold_corr      base        719.615 ms | shared read=9260 |  |  | dev: reads=692 
merged=0 kB/read=109.7
cold_corr      v36         246.525 ms | shared read=9260 | Prefetch: avg=236.38 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=15.13 | 
dev: reads=691 merged=0 kB/read=110.0
cold_corr      v36         197.097 ms | shared read=9260 | Prefetch: avg=238.77 
max=256 capacity=272 | I/O: count=514 waits=9 size=15.88 in-progress=15.28 | 
dev: reads=690 merged=0 kB/read=110.2
cold_corr      base        647.344 ms | shared read=9260 |  |  | dev: reads=692 
merged=0 kB/read=109.8
cold_corr      base        632.211 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      v36         206.986 ms | shared read=9260 | Prefetch: avg=238.52 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=15.26 | 
dev: reads=690 merged=0 kB/read=110.2
cold_corr      v36         197.856 ms | shared read=9260 | Prefetch: avg=240.59 
max=256 capacity=272 | I/O: count=514 waits=8 size=15.88 in-progress=15.39 | 
dev: reads=693 merged=0 kB/read=109.7
cold_corr      base        667.480 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      base        615.175 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      v36         282.744 ms | shared read=9260 | Prefetch: avg=249.05 
max=271 capacity=272 | I/O: count=514 waits=11 size=15.88 in-progress=15.24 | 
dev: reads=692 merged=0 kB/read=109.9


======== delay 2 ms, io_method=io_uring, eic 64 ========
file: results_2ms_io_uring_eic64.txt

cold_near      base        678.754 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         741.750 ms | shared hit=128536 read=9262 | Prefetch: 
avg=80.71 max=115 capacity=376 | I/O: count=106625 waits=465 size=1.00 
in-progress=63.80 | dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         680.460 ms | shared hit=128536 read=9262 | Prefetch: 
avg=80.23 max=114 capacity=376 | I/O: count=106422 waits=416 size=1.00 
in-progress=63.67 | dev: reads=690 merged=0 kB/read=110.2
cold_near      base        686.557 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        817.741 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         760.274 ms | shared hit=128511 read=9262 | Prefetch: 
avg=80.54 max=113 capacity=376 | I/O: count=106530 waits=434 size=1.00 
in-progress=63.77 | dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         672.421 ms | shared hit=128513 read=9262 | Prefetch: 
avg=80.00 max=111 capacity=376 | I/O: count=106766 waits=443 size=1.00 
in-progress=63.67 | dev: reads=690 merged=0 kB/read=110.2
cold_near      base        665.140 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      base        725.470 ms | shared hit=128671 read=9262 |  |  | 
dev: reads=690 merged=0 kB/read=110.2
cold_near      v36         730.184 ms | shared hit=128530 read=9262 | Prefetch: 
avg=80.41 max=113 capacity=376 | I/O: count=106357 waits=472 size=1.00 
in-progress=63.69 | dev: reads=690 merged=0 kB/read=110.2
cold_corr      base        649.543 ms | shared read=9260 |  |  | dev: reads=693 
merged=0 kB/read=109.8
cold_corr      v36         210.136 ms | shared read=9260 | Prefetch: avg=239.40 
max=256 capacity=376 | I/O: count=514 waits=8 size=15.88 in-progress=15.32 | 
dev: reads=692 merged=0 kB/read=109.9
cold_corr      v36         202.363 ms | shared read=9260 | Prefetch: avg=239.90 
max=256 capacity=376 | I/O: count=514 waits=8 size=15.88 in-progress=15.35 | 
dev: reads=691 merged=0 kB/read=109.9
cold_corr      base        673.980 ms | shared read=9260 |  |  | dev: reads=721 
merged=0 kB/read=105.6
cold_corr      base        638.536 ms | shared read=9260 |  |  | dev: reads=696 
merged=0 kB/read=109.4
cold_corr      v36         176.111 ms | shared read=9260 | Prefetch: avg=239.71 
max=256 capacity=376 | I/O: count=514 waits=8 size=15.88 in-progress=15.34 | 
dev: reads=692 merged=0 kB/read=109.9
cold_corr      v36         224.432 ms | shared read=9260 | Prefetch: avg=239.96 
max=256 capacity=376 | I/O: count=514 waits=8 size=15.88 in-progress=15.35 | 
dev: reads=693 merged=0 kB/read=109.7
cold_corr      base        656.058 ms | shared read=9260 |  |  | dev: reads=707 
merged=0 kB/read=107.9
cold_corr      base        708.272 ms | shared read=9260 |  |  | dev: reads=694 
merged=0 kB/read=109.6
cold_corr      v36         199.227 ms | shared read=9260 | Prefetch: avg=239.90 
max=256 capacity=376 | I/O: count=514 waits=8 size=15.88 in-progress=15.35 | 
dev: reads=691 merged=0 kB/read=110.0

Reply via email to