Leave a cell alone once it has had its four tries - #81
Merged
Merged
Conversation
failures.json has counted attempts per cell since it was written and nothing read the count, so a cell the box cannot measure was attempted again on every sweep. Worse than the wasted run: the five runs of one cell sit next to each other in the order the matrix goes in, so a shape a box cannot measure is three failures in a row, which is what puts a whole engine down. A sweep of one engine on a busy box therefore stopped at the first bad shape, and a wrapper that restarts it stopped at the same place every time and never reached the end of the matrix. Four attempts and the cell is left alone, counted apart from the ones already on disk in both the progress line and the summary. The failure the sweep exits with now says how many of the missing cells have had their tries, so a script restarting it can tell a sweep worth running again from one that would do nothing. --retry-failed throws the counts away, which is what to pass on a machine that has changed.
This was referenced Sep 10, 2026
tamnd
added a commit
that referenced
this pull request
Sep 10, 2026
Three failures in a row put a whole engine down for the session, which is right for an engine the machine cannot run and wrong for an engine that runs fine and has one shape this machine cannot measure. The five runs of a shape sit next to each other in the matrix order, so a bad shape reads as three in a row and takes the other nine hundred cells with it. A cell on the disk, or one measured in this session, is proof the engine runs here. With that proof the sweep walks past the bad shape and pays one run for each of its cells, once, because the attempt count added in #81 leaves them alone on the next sweep.
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.
failures.jsonhas counted attempts per cell since it was written, the doc on the field says a cell that has failed four times is a cell where something is actually wrong, and nothing read the count. So a cell this box cannot measure was attempted again on every sweep, at the cost of a full run each time, because a cell fails after memtier has finished rather than before it starts.The wasted run is the smaller half. The five runs of one cell sit next to each other in the order the matrix goes in, so a shape a box cannot measure is three failures in a row, and three in a row is what puts the whole engine down for the rest of the session. A sweep of one engine stops there and every remaining cell is left with it. A wrapper that restarts the sweep then stops at the same place every time, so the matrix never gets past the first bad shape.
That is what is happening on the 32 core box right now. Sixteen load generator threads on a WSL2 VM finish wildly apart on the deeper pipelines, the parser refuses the rate because memtier divides the whole operation count by the first thread to finish, and one cell there has been attempted fourteen times. It is not particular to one engine: the published
wsl32coarsefailure file has 40 cells of rugo, 33 of yo and 10 of garnet refused for exactly that reason.What changes
Four attempts and the cell is left alone. It is counted apart from the cells already on disk, in the line the sweep prints when it starts and in the summary it prints when it finishes, because a cell nobody is going to measure and a cell that is already measured are different kinds of absent.
The failure the sweep exits with says how many of the missing cells have had their tries, so a script that restarts it can tell a sweep worth running again from one that would do nothing.
--retry-failedthrows the counts away, which is what to pass on a machine that has changed.Nothing about which cells are measured changes on a box where cells do not fail, and nothing about the numbers changes anywhere.
What checks it
a_cell_is_worth_another_run_until_it_has_had_its_trieswalks a cell up to the limit and past it, and checks that another cell in the same file is its own question.the_matrix_comes_apart_into_measured_spent_and_left_to_doputs one cell on the disk and one over the limit and checks the three counts add up to the matrix, and that the cell with a file stops being a failure.the_way_out_says_whether_another_sweep_would_helpchecks the message a restarting script reads.a_cell_that_has_never_failed_has_been_attempted_no_timesandthrowing_the_counts_away_makes_every_cell_worth_trying_againcover the two new methods onFailures.Part of M8 (#10), because a sweep that cannot reach the end of the matrix on the 32 core box is the thing standing between that milestone and two published results directories.