Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
7317076
Add PCO logical page indexing and shared selective access
danking Oct 24, 2026
77bc480
Copy contiguous PCO runs and add public compatibility coverage
danking Oct 24, 2026
5506f66
Build PCO page ends with dense prefixes and bitmap select
danking Oct 24, 2026
a782355
Use public piecewise slots and reserve only initial take runs
danking Oct 24, 2026
a0c6b11
Amortize PCO decoding and preserve bulk selection for legacy files
danking Oct 24, 2026
bfa0932
Build nullable selections directly in their final output buffer
danking Oct 24, 2026
b30c862
Validate corrupt page counts through the public wire boundary
danking Oct 24, 2026
0371a2b
Elide gather validity allocation for non-nullable selections
danking Oct 24, 2026
d26ad59
Add matched public PCO resource controls and satisfy upstream lint
danking Oct 24, 2026
73ee941
Measure complete array preparation and large PCO selection controls
danking Oct 24, 2026
902580c
Prepare historical harness directory and document resource boundaries
danking Oct 24, 2026
72cbb01
Retain the last selected PCO page as a constant-time probe fast path
danking Oct 24, 2026
b2ee3f9
Account for optional PCO page metadata in the compact file size golden
danking Oct 24, 2026
9da3bb7
Record old and new public file sizes alongside resource controls
danking Oct 24, 2026
bd0da50
Profile frozen adverse PCO writer and selection paths
danking Oct 24, 2026
52eb027
Avoid touching nullable output gaps and defer page rank indexes
danking Oct 24, 2026
0dbc4ce
Group scattered requests and preserve direct cached scalar hits
danking Oct 24, 2026
2195e66
Avoid output validity materialization for validated zero-page slices
danking Oct 24, 2026
6f10d72
Plan visible-domain take before sparse allocations and retain compact…
danking Oct 24, 2026
fa1bfe4
Measure mixed and compact requests and attribute metadata envelope bytes
danking Oct 24, 2026
364213a
Reserve only defined requests and preserve empty take dtype
danking Oct 24, 2026
ef7eb2b
Use software cpu-clock samples for bounded attribution
danking Oct 24, 2026
e80af84
Attribute exact compact stock fixture segment and framing bytes
danking Oct 24, 2026
acffeef
Keep public size diagnostic output machine readable
danking Oct 24, 2026
e15a6e6
Use inclusive range checks in public profiling fixtures
danking Oct 24, 2026
0e763cc
Use public write strategy re-export in size diagnostic
danking Oct 24, 2026
bf5fecb
Fix selected-reader trait imports and warning-clean qualifications
danking Oct 24, 2026
bdae091
Stream contiguous pages into final output and reuse native index extrema
danking Oct 24, 2026
459d8da
Format diagnostic JSON through stable Display values
danking Oct 24, 2026
ad54a18
Share streaming range decoding with contiguous take requests
danking Oct 24, 2026
fec4aed
Bound individual software profiling and report extraction commands
danking Oct 24, 2026
ace2734
Borrow typed primitive indices through their erased array handle
danking Oct 24, 2026
a703552
Inline retained scalar hits and prepare validated all-null probes
danking Oct 24, 2026
9f468ab
Compare linked scalar-hit assembly for base, adverse and current sources
danking Oct 24, 2026
5dbe6fa
Separate PCO retained probe hits from temporary and miss state
danking Oct 24, 2026
58fd61e
Freeze final probe comparison against the previous iteration
danking Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/pco-attribution.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: PCO attribution

on:
pull_request:
paths:
- ".github/workflows/pco-attribution.yml"
workflow_dispatch: { }

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false

jobs:
profile:
runs-on: >-
${{ github.repository == 'vortex-data/vortex'
&& format('runs-on={0}/runner=amd64-medium/image=ubuntu24-full-x64-pre-v2/extras=s3-cache/tag=pco-profile', github.run_id)
|| 'ubuntu-latest' }}
timeout-minutes: 25
steps:
- uses: runs-on/action@v2
if: github.repository == 'vortex-data/vortex'
with:
sccache: s3
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
- uses: ./.github/actions/setup-prebuild
with:
enable-sccache: ${{ github.repository == 'vortex-data/vortex' && 'true' || 'false' }}
- name: Build frozen adverse candidate and baseline
run: |
git worktree add --detach "$RUNNER_TEMP/pco-profile-candidate" 9f468abe16dd070d2d8eed5df4f45709b50ae375
git worktree add --detach "$RUNNER_TEMP/pco-profile-base" 910f9933e8e2318c592c1eddcc2dfee8d24c6cd7
git worktree add --detach "$RUNNER_TEMP/pco-profile-latest" HEAD
mkdir -p "$RUNNER_TEMP/pco-profile-base/vortex-file/examples"
cp vortex-file/examples/pco_access_profile.rs "$RUNNER_TEMP/pco-profile-candidate/vortex-file/examples/"
cp vortex-file/examples/pco_access_profile.rs "$RUNNER_TEMP/pco-profile-base/vortex-file/examples/"
for engine in candidate base latest; do
cp vortex-file/tests/pco_logical_pages_compat.rs "$RUNNER_TEMP/pco-profile-$engine/vortex-file/tests/"
cargo build --manifest-path "$RUNNER_TEMP/pco-profile-$engine/Cargo.toml" --profile bench --locked -p vortex-file --example pco_access_profile --message-format=json-render-diagnostics > "$RUNNER_TEMP/$engine-build.jsonl"
done
- name: Bounded software attribution, separate from timings
shell: bash
run: |
mkdir -p "$RUNNER_TEMP/attribution"
sudo apt-get update -qq
sudo apt-get install -y -qq linux-tools-generic
perf=$(find /usr/lib -path "*linux-tools*/perf" -type f | sort | tail -1)
test -n "$perf"
for engine in base candidate latest; do
executable=$(jq -r 'select(.reason == "compiler-artifact" and .target.name == "pco_access_profile") | .executable // empty' "$RUNNER_TEMP/$engine-build.jsonl")
sha256sum "$executable" > "$RUNNER_TEMP/attribution/$engine-executable.sha256"
git -C "$RUNNER_TEMP/pco-profile-$engine" rev-parse HEAD > "$RUNNER_TEMP/attribution/$engine-source.txt"
nm "$executable" | awk '/vortex_pco/ && /cached_scalar|5probe9scalar_at|scalar_at_once|scalar_at_uncached/ {print $NF}' > "$RUNNER_TEMP/attribution/$engine-symbols.txt"
while IFS= read -r symbol; do
timeout --kill-after=5s 20s objdump --disassemble="$symbol" --no-show-raw-insn "$executable" >> "$RUNNER_TEMP/attribution/$engine-scalar-assembly.txt"
done < "$RUNNER_TEMP/attribution/$engine-symbols.txt"
for request in probe:dense probe:nullable probe:all-null; do
IFS=: read -r mode pattern <<< "$request"
repeats=100000
stem="$RUNNER_TEMP/attribution/$engine-$mode-$pattern"
echo "Record $engine $mode $pattern"
timeout --signal=INT --kill-after=5s 25s sudo env DEBUGINFOD_URLS= "$perf" record -e cpu-clock -F 499 -o "$stem.data" -- "$executable" "$mode" "$pattern" 8388608 "$repeats" > "$RUNNER_TEMP/$engine-$mode-$pattern.jsonl" || echo "Record exit $?" > "$stem-status.txt"
echo "Flat report $engine $mode $pattern"
timeout --kill-after=5s 20s sudo env DEBUGINFOD_URLS= "$perf" report -i "$stem.data" --stdio --no-children --call-graph none --percent-limit 0.5 > "$stem-flat.txt" || echo "Flat report exit $?" >> "$stem-status.txt"
sudo rm -f "$stem.data"
done
done
printf '%s\n' 'Frozen 9f adverse candidate, develop910f, and current CI merge source. Software flat samples and exact linked symbol assembly only; profiled times are not uninstrumented latency controls. Startup/fixture compression is included. Public stock/metadata byte attribution is retained in run40119098145; it is not repeated here.' > "$RUNNER_TEMP/attribution/README.txt"
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
if: always()
with:
name: pco-attribution
path: |
${{ runner.temp }}/attribution
!${{ runner.temp }}/attribution/*.data
if-no-files-found: ignore
100 changes: 100 additions & 0 deletions .github/workflows/pco-compat.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: PCO selective access compatibility

on:
pull_request:
paths:
- "encodings/pco/**"
- "vortex-file/src/lib.rs"
- "vortex-file/tests/pco_logical_pages_compat.rs"
- ".github/workflows/pco-compat.yml"
workflow_dispatch: { }

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
pco-compat:
runs-on: >-
${{ github.repository == 'vortex-data/vortex'
&& format('runs-on={0}/runner=amd64-medium/image=ubuntu24-full-x64-pre-v2/extras=s3-cache/tag=pco-compat', github.run_id)
|| 'ubuntu-latest' }}
timeout-minutes: 45
steps:
- uses: runs-on/action@v2
if: github.repository == 'vortex-data/vortex'
with:
sccache: s3
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
- uses: ./.github/actions/setup-prebuild
with:
enable-sccache: ${{ github.repository == 'vortex-data/vortex' && 'true' || 'false' }}
- name: PCO public semantics
run: cargo test --profile ci --locked -p vortex-pco
- name: Generate new files with current public writer
env:
PCO_COMPAT_MODE: write
PCO_COMPAT_DIR: ${{ runner.temp }}/pco-new-files
run: cargo test --profile ci --locked -p vortex-file --test pco_logical_pages_compat
- name: Read new files using unchanged pre-change reader; generate legacy files
env:
PCO_COMPAT_DIR: ${{ runner.temp }}/pco-new-files
run: |
git worktree add --detach "$RUNNER_TEMP/pco-old-reader" 910f9933e8e2318c592c1eddcc2dfee8d24c6cd7
# Only the public test harness is added. The old reader/writer/library sources remain
# exactly the pinned pre-change revision and do not know the new metadata field.
cp vortex-file/tests/pco_logical_pages_compat.rs "$RUNNER_TEMP/pco-old-reader/vortex-file/tests/"
PCO_COMPAT_MODE=read cargo test --manifest-path "$RUNNER_TEMP/pco-old-reader/Cargo.toml" --profile ci --locked -p vortex-file --test pco_logical_pages_compat
PCO_COMPAT_MODE=write PCO_COMPAT_DIR="$RUNNER_TEMP/pco-old-files" cargo test --manifest-path "$RUNNER_TEMP/pco-old-reader/Cargo.toml" --profile ci --locked -p vortex-file --test pco_logical_pages_compat
- name: Read legacy files using current reader
env:
PCO_COMPAT_MODE: read
PCO_COMPAT_DIR: ${{ runner.temp }}/pco-old-files
run: cargo test --profile ci --locked -p vortex-file --test pco_logical_pages_compat
- name: Record actual public file sizes
run: |
mkdir -p "$RUNNER_TEMP/pco-resource-results"
wc -c "$RUNNER_TEMP"/pco-{new,old}-files/*.vortex > "$RUNNER_TEMP/pco-resource-results/public-file-sizes.txt"
- name: Build matching optimized public resource harnesses
run: |
mkdir -p "$RUNNER_TEMP/pco-old-reader/vortex-file/examples"
cp vortex-file/examples/pco_access_profile.rs "$RUNNER_TEMP/pco-old-reader/vortex-file/examples/"
cargo build --profile bench --locked -p vortex-file --example pco_access_profile --message-format=json-render-diagnostics > "$RUNNER_TEMP/pco-candidate-build.jsonl"
cargo build --manifest-path "$RUNNER_TEMP/pco-old-reader/Cargo.toml" --profile bench --locked -p vortex-file --example pco_access_profile --message-format=json-render-diagnostics > "$RUNNER_TEMP/pco-baseline-build.jsonl"
- name: Matched first and warmed resource controls
shell: bash
run: |
mkdir -p "$RUNNER_TEMP/pco-resource-results"
printf '%s\n' 'Wall timings exclude accounting and post-timing scalar inspection.' 'open-only/open-first include public array-plugin metadata decode/validation/index preparation with compressed buffers and validity children already available; no file IO.' 'probe-first starts with prepared metadata/index; probe retains touched pages across iterations.' 'CPU ticks are OS process user+system ticks; sub-tick readings are resolution-limited, not zero CPU.' 'RSS snapshots may miss transient peaks. GNU time maximum RSS is whole-process peak including fixtures/compression and post-timing inspection, not operation-only peak.' > "$RUNNER_TEMP/pco-resource-results/README.txt"
getconf CLK_TCK > "$RUNNER_TEMP/pco-resource-results/clock-ticks-per-second.txt"
git rev-parse HEAD > "$RUNNER_TEMP/pco-resource-results/candidate-source.txt"
git -C "$RUNNER_TEMP/pco-old-reader" rev-parse HEAD > "$RUNNER_TEMP/pco-resource-results/baseline-source.txt"
candidate=$(jq -r 'select(.reason == "compiler-artifact" and .target.name == "pco_access_profile") | .executable // empty' "$RUNNER_TEMP/pco-candidate-build.jsonl")
baseline=$(jq -r 'select(.reason == "compiler-artifact" and .target.name == "pco_access_profile") | .executable // empty' "$RUNNER_TEMP/pco-baseline-build.jsonl")
sha256sum "$candidate" "$baseline" > "$RUNNER_TEMP/pco-resource-results/executables.sha256"
for mode in write full slice slice-near-full take take-large take-repeated take-mixed take-narrow take-spans take-tiny take-contiguous take-range ranges open-only open-first probe-first probe; do
for pattern in dense nullable all-null long-null compressed nullable-legacy; do
# ABBA process order; every process retains all eight iterations including cold.
order=0
for engine in baseline candidate candidate baseline; do
order=$((order + 1))
executable="$candidate"
if [ "$engine" = baseline ]; then
executable="$baseline"
fi
stem="$RUNNER_TEMP/pco-resource-results/$mode-$pattern-$order-$engine"
/usr/bin/time -v "$executable" "$mode" "$pattern" 8388608 8 > "$stem.jsonl" 2> "$stem.time"
done
done
done
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
if: always()
with:
name: pco-resource-results
path: ${{ runner.temp }}/pco-resource-results
if-no-files-found: ignore
Loading
Loading