Experiment: measure full and reduced Windows Perl archive costs - #272
Closed
lamemustafa wants to merge 5 commits into
Closed
lamemustafa wants to merge 5 commits into
lamemustafa wants to merge 5 commits into
Conversation
3 tasks
Owner
Author
|
Closing this experiment. It measured full vs reduced Windows Perl archive costs and was never a production change — it remains a draft with no review threads. The measurement it captured is preserved in the branch and in this PR's history; reopen or re-cut it if the packaging question comes back. Closed as an experiment concluded, not as work rejected. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Windows Perl cache extraction is a recurring setup cost. This experiment inventories the actual pinned installation, qualifies a conservative three-directory reduction against fresh native builds, then measures full/reduced archive packing and extraction with the existing GNU tar/zstd commands.
Current archive candidate:
c721bc64f403e073ebfd18a018a0319af827e715. This remains a draft experiment, not a production prerequisite change. Standard CI and application code are unchanged. The completed cold-native workflow stage is replaced by an archive-only stage; it does not rerun native tests. Both the inventory and archive jobs explicitly disable production cache saving.The archive stage preserves the original installation in a sibling backup and runs six alternating full/reduced extraction trials on a disposable Windows runner. It uses the existing GNU tar path and compression flags, records tool/source/image hashes, validates each archived file's size/hash and TAR termination, then verifies every extracted file and Perl identity. It refuses links, traversal, replacement directories, malformed padding and unexpected bytes. Cleanup is limited to an explicitly created extraction destination; original bytes are never overwritten by a replacement. Hard termination can bypass finally, so acceptance requires terminal job success and restoration.json true. Archive payloads stay on the disposable runner; only measurement metadata and bounded logs are uploaded.
Evidence already established:
39bf0b2measured 20,861 files / 1,033,835,215 bytes in the exact pinned cache.67fa357passed both full/reduced cases with matching original installation, source hashes and runner image. Artifacts 10097282576 / 10097197040 match API digests. Both rebuilt OpenSSL/SQLite, passed the exact existing encryption/wrong-key test, and restored installation/source hashes. Targets were already cold; positive native timing units prove builds ran. Reduced contents: 15,665 files / 622,626,257 bytes. This historical source qualifies that scoped build/test path, not current-head archive timings or production adoption.Rectifies #273: the first Windows archive run 34337875700 failed before measuring extraction because Python text-mode writing translated the manifest newline to CRLF. GNU tar treated the carriage return as part of the installation path. The fix writes exact UTF-8 bytes without a trailing newline, matching the existing cache action; a regression checks the literal manifest bytes. The failed run restored installation/source/tool hashes and is retained as non-timing evidence. Independent review of this two-file correction is clean; corrected Windows run 34364606308 now passes all six round trips and full installation/source/tool restoration.
Archive preflight at the current candidate:
python3 scripts/measure-perl-archive.test.py: nine parser/filesystem controls pass.python3 scripts/measure-perl-cold.test.py: four reused directory-move controls pass.Measurement limits: packing/extraction commands use warmed local filesystem caches on one runner. Hash checks occur outside measured extraction. Directory metadata can reflect the temporary removals; retained file content is checked exactly. Archive bytes and local extraction times do not measure GitHub transfer, full CI latency or all production consumers. The failed master seed and its warm-comparison/adoption hold remain separate; this experiment performs no crash investigation.
Reuse/deletion: reuses the pinned prerequisite action, inventory, directory-move and bounded-log helpers, and existing runner archive tools. No runtime dependency is added. The completed native workflow stage is replaced rather than repeated. Net experiment addition against the PR base: 867 lines; no production code is deleted. Without this stage, a smaller installed tree could be mistaken for a smaller/faster cache. Project-authored code and controls are recorded in docs/provenance.md under the repository license.
Migration/sync impact: none. Security impact: no Tally, DSC, credential or customer-data behavior change. Rollback removes the branch-only harness; no production cache or data migration is introduced.