Skip to content

prism: read small files with ReadFile instead of CreateFileMapping on Windows - #10

Open
Largo wants to merge 1 commit into
masterfrom
prism-win32-readfile
Open

Largo wants to merge 1 commit into
masterfrom
prism-win32-readfile

Conversation

@Largo

@Largo Largo commented Aug 9, 2026

Copy link
Copy Markdown
Owner

A section map (CreateFileMapping + MapViewOfFile) costs a kernel section object plus soft page faults on first touch. For the small files require feeds the parser, that is slower than a single ReadFile into a heap buffer.

Read files up to 16 MB directly and keep the mapping for larger ones and as the fallback on read failure. PM_WIN32_MMAP=1 restores the old behavior for A/B testing.

Measured on this VM (warm, best-of-7, same binary, A/B via the env var): require "rspec" 117 → 109 ms median; require "active_support/all" ~570 → 559 ms median. Correctness suite output byte-identical on both paths, DATA/__END__ intact.

Windows-only. Note this touches prism/, which is vendored from ruby/prism, so it would need to go there rather than here.

… Windows

A section map (CreateFileMapping + MapViewOfFile) costs a kernel section object plus soft page faults on first touch. For the small files require feeds the parser this is slower than a single ReadFile into a heap buffer. Read files up to 16 MB directly; keep the map for larger ones and as the fallback on read failure. PM_WIN32_MMAP=1 restores the old behavior for A/B testing.

Measured (warm, best-of-7, this binary A/B via env var): require rspec 117 -> 109 ms median; require active_support/all ~570 -> 559 ms median. Byte-identical correctness suite output on both paths, DATA/__END__ intact.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant