From 22bb2e0718386c53ffaad851447a10f6ee1334e0 Mon Sep 17 00:00:00 2001 From: the-homeless-god Date: Sun, 4 Oct 2026 19:55:53 +0000 Subject: [PATCH 1/3] docs(reprint): the ledger carries four runs and the cost is 4736 s Task 8570 said the print takes ten hours against a goal of two. The number came from the last RECORDED row of docs/reprint-ledger.tsv, 17 September 2026, 36839 s. Runs after it were many and not one was written down: the ledger is filled by hand and has no instrument of completeness (task 6704). Four missing runs are written in now. 2026-10-04, print, landed, 4736 s (1 h 18 min 56 s), on gpu. Start 18:24:13 UTC from the first line of /home/u/b-print-0725-print.log, end 19:43:09 UTC from the file timestamp (stat -c %y); the log was read, not touched. Output 7 files, 44661951 bytes, from the line that says so. Peak 50.6 GiB, the largest of 143 pulses of the print itself, not /usr/bin/time; in the judging stage the peak was 50.0 GiB. The judging chain took 2508501226319 steps of 4000000000000, 62 percent, and the print said that itself: it prints a warning when a stage passes half the cap. The copy had no git, so the fingerprint says the seed was printed from commit "no-git" - there is no hash for this run. 2026-10-04, print, killed, 4989 s (1 h 23 min 09 s), on dev. SIGTERM from the harness at 19 percent of the judging stage, peak 41.6 GiB. Start 16:53:13 UTC from the log header of /home/b/projects/flang-cluster/print-batch.log, end from the timestamp of its last line. 2026-10-04, print WITHOUT THE JUDGE, landed, 6890 s (114 min 50 s), 7 files, rebuild of the printed sources 1 min 17 s. A FOREIGN measurement: the number came in an agent report of the same day, no log was named, nothing here measured it. Peak, bytes and cap are zeroes with the reason spelled out. 2026-09-25, print, landed, 128700 s (35 h 45 min), from the header of scripts/bootstrap-reprint.sh and .github/workflows/reprint.yml. Peak and bytes were never recorded and the tree names no log for that run - the same case as the row of 30 August (task 6704). The ledger header now carries two warnings. Rows BEFORE 1 October were taken by a binary WITHOUT the kernel call memo (ADR-0051, task 5709) and are not comparable: 36839 s against 4736 s is 7.8 times, and that is the memo, not the tree. And steps per second is NOT a measure of speed - a memoized call is charged its steps without being executed, so between two neighbouring pulses of one and the same print the counter ran 85 million and then 2.4 billion steps per second. Cost is written as seconds of a landed run; a percentage of the cap is spend, not speed. Task 8570 is rewritten to that and renamed. The goal of two hours is met, point 3 of its acceptance is done, and what is left is named: the step cap, which the judging stage ate 62 percent of. It is raised from 4 to 8 trillion by commit 3f9b9a77b, which on 4 October lives in a branch and is not on dev. Points 1, 2 and 4 are marked not done or not measured, with the reason. The three places that convert runs to one machine through steps per second are named with line numbers and called an unfit measure; they are not edited here. scripts/seed/reprint-freshness.fscript told the human the cost was "from 10 h 14 min to 35 h 45 min, peak 44.9 GiB", quoting this ledger. It now says from 1 h 18 min to 35 h 45 min, peak 50.6 GiB. Checked: prose-numbers-guard --plan Check, 224 of 224 marks agree with the tree; task-numbers-guard --plan Check, no doubled numbers; flang check of reprint-freshness.fscript clean; the freshness plan still reads the ledger and still reports the last byte-for-byte check of 8 September, which my rows do not touch. flang/scripts/tasks.fscript --plan "task board whole" exhausts its own step limit on the untouched tree as well, so it proves nothing either way. NOT MEASURED: the reprint itself was not run from this worktree - a print is running on gpu and a second one on the same machine is not started beside it; and sh scripts/bootstrap-reprint.sh --bystro was not called for the same reason. --- docs/reprint-ledger.tsv | 5 + ...-the-print-is-outrun-because-it-is-slow.md | 137 ---------- ...he-print-runs-out-of-steps-not-of-hours.md | 233 ++++++++++++++++++ scripts/seed/reprint-freshness.fscript | 4 +- 4 files changed, 240 insertions(+), 139 deletions(-) delete mode 100644 docs/tasks/8570-the-print-is-outrun-because-it-is-slow.md create mode 100644 docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md diff --git a/docs/reprint-ledger.tsv b/docs/reprint-ledger.tsv index ff0ce1bc4..aceb41552 100644 --- a/docs/reprint-ledger.tsv +++ b/docs/reprint-ledger.tsv @@ -1,4 +1,5 @@ # ЧТО: ведомость заходов побайтовой сверки и перепечатки семени — строка на заход: дата, что (сверка|печать), итог, секунд, пик-ГиБ, байт-вывода, потолок-шагов, откуда; заполняется руками после захода. ЗАЧЕМ: сверка стоит 8 ч 34 мин одного ядра и на каждый пуш в CI не зовётся; без записи следующий не узнает, что она была, и свежесть сверки останется красной при сделанной работе. КТО ЧИТАЕТ: scripts/seed/reprint-freshness.flang (дата последней строки «сверка … дошла»; строки без табуляции, как эта, пропускает); .github/workflows/reprint.yml, scripts/bootstrap-reprint.sh и scripts/seed/seed-freshness.fscript называют файл человеку в подсказках. +# ★СОПОСТАВИМОСТЬ: строки ДО 1 октября 2026 сняты двоичным БЕЗ памяти вызовов ядра (ADR-0051, задача 5709) — сравнивать их с заходами 4 октября нельзя. Сопоставление: 36 839 с (17 сентября, без памяти) против 4736 с захода 4 октября на gpu — в 7,8 раза; тем же деревом задача 5709 мерила полную печать с памятью в 2 ч 05 мин 37 с (заход 7). СКОРОСТЬ В ШАГАХ ЗА СЕКУНДУ — НЕГОДНАЯ МЕРА: запомненный памятью вызов засчитывается шагами, но не исполняется, и между соседними отметками пульса счётчик идёт то 85 млн, то 2,4 млрд шагов/с (замер 4 октября 2026). Цену писать только секундами от начала до конца ДОШЕДШЕГО прогона, а проценты потолка — как расход, не как скорость. ПРИБОР, КОТОРЫМ ЦЕНА МЕРИТСЯ САМА: печать печатает «ЗАПАС ШАГОВ НА ИСХОДЕ: «<стадия>» съел N шагов из M (K %)», когда расход переваливает ПОЛОВИНУ потолка (порог в flang/src/emit/c/flang_repl.c:2324, строка repl_ctx.steps > repl_ctx.max_steps / 2) — эта строка в журнале захода и есть замер цены суда, и из неё берётся потолок следующего захода. дата что итог секунд пик-ГиБ байт-вывода потолок-шагов откуда 2026-08-22 сверка дошла 1198 25.1 26180580 1000000000 коммит 6c5d805c 2026-08-23 печать оборвана-шаги 1456 34.3 0 1000000000 /srv/work/raskrutka-polnaya.log @@ -12,3 +13,7 @@ 2026-08-30 печать дошла 30842 0 38958005 1400000000000 время по меткам файлов /srv/flang-rabota/m-reprint-5, итог — коммит c15f669f; пик не замерен 2026-09-08 сверка дошла 16895 36.3 39710602 1400000000000 коммит f2945456, /usr/bin/time -v; журнал scratchpad/g6/g6.log 2026-09-17 печать дошла 36839 34.9 43300122 1400000000000 коммит 68ff03b34, задача 5190; /srv/tmp/dokazuemyy/raskrutka-5190.log; копия wSemya, дерево не правилось +2026-09-25 печать дошла 128700 0 0 4000000000000 заход 23–25 сентября 2026, названный в шапке scripts/bootstrap-reprint.sh («шёл 35 ч 45 мин») и в .github/workflows/reprint.yml; строки о нём в ведомости не было — задача 6704. Пик не замерен, байты вывода не записаны: журнала этого захода дерево не называет +2026-10-04 печать дошла 4736 50.6 44661951 4000000000000 gpu, журнал /home/u/b-print-0725-print.log (только чтение): начало 18:24:13 UTC — первая строка журнала, конец 19:43:09 UTC — время последней записи файла (stat -c %y), 4736 с = 1 ч 18 мин 56 с. Итог словами журнала: «напечатанное собрано и спрошено ДО того, как легло в bootstrap/ — семя годное»; вывод — строка «итого 7 файлов, 44661951 байт в bootstrap/». Дерево — партия пяти работ (точное целое только тип, заголовки Makefile, точное в десять целей, предел ресурсов, плюс ствол с починкой LSP); git в той копии не было, отпечаток говорит «коммит нет-git». Суд съел 2 508 501 226 319 шагов из 4 000 000 000 000 (62 %) — печать сама напечатала «ЗАПАС ШАГОВ НА ИСХОДЕ» о стадиях «Проверить доказательства с кешем» и «Итог суда ядра». Пик 50,6 ГиБ — наибольшая из 143 отметок пульса самой печати (стадия «Напечатать связанное»), не /usr/bin/time; на стадии суда пик 50,0 ГиБ +2026-10-04 печать снята 4989 41.6 0 4000000000000 dev (эта машина), журнал /home/b/projects/flang-cluster/print-batch.log: начало 16:53:13 UTC — шапка журнала, последняя строка «Terminated» по метке файла 18:16:22 UTC, то есть 4989 с = 1 ч 23 мин 09 с. Снята SIGTERM от harness на 19 % стадии «Проверить доказательства с кешем» (791 570 926 679 шагов из 4 000 000 000 000), дерево 89d38a5c5. Пик 41,6 ГиБ — наибольшая отметка пульса печати, не /usr/bin/time; вывода нет +2026-10-04 печать дошла 6890 0 0 0 печать БЕЗ СУДЬИ (стадия суда доказательств не прогонялась): 114 мин 50 с = 6890 с, 7 файлов, пересборка напечатанного 1 мин 17 с. ЧУЖОЙ ЗАМЕР — число пришло отчётом агента того же дня, журнала он не назвал, своим прибором здесь не снято. Пик не замерен, байты вывода не записаны, потолок шагов не записан — поля стоят нулями, как в строке 30 августа. Сравнивать её с заходом С судьёй того же дня (4736 с) НЕ МЕРИЛ: машина этого захода не названа, а приводить заходы к одной машине шагами за секунду нельзя — см. шапку выше diff --git a/docs/tasks/8570-the-print-is-outrun-because-it-is-slow.md b/docs/tasks/8570-the-print-is-outrun-because-it-is-slow.md deleted file mode 100644 index 857450425..000000000 --- a/docs/tasks/8570-the-print-is-outrun-because-it-is-slow.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -номер: 8570 -заголовок: Перепечатка компилятора идёт десять часов при цели в два, и за это время ствол успевает её обогнать -статус: свободна -приоритет: P1 -исполнитель: — -ветка: — -команда: любая -карта: Что мешает больше всего -рядом: 5709 -нужность: длинная перепечатка отстаёт от ствола раньше, чем кончается; короткая успевает ---- - -# 8570. Перепечатка компилятора идёт десять часов при цели в два, и за это время ствол успевает её обогнать - -Входы печати (`flang/self/**`) правят примерно раз в час. Перепечатка, которая -идёт дольше, кончается на дереве, которого в стволе уже нет. Темп правок менять -не нужно; нужно укоротить печать. - -## Шаги воспроизведения - -1. `tail -1 docs/reprint-ledger.tsv | cut -f1-4` -2. Поимённая ведомость на дороге печати: - `FLANG_TICKS_OUT=<файл> bootstrap/flang emit flang/self/lexer.flang --target c --out <каталог>` -3. Поимённая ведомость на дороге суда: - `FLANG_TICKS_OUT=<файл> bootstrap/flang check flang/self/tags.flang` -4. Доли по ведомости: `заряд` каждой функции против строки `заряда всего`. - -## Что происходит - -``` -$ tail -1 docs/reprint-ledger.tsv | cut -f1-4 -2026-09-17 печать дошла 36839 -``` - -Последняя ЗАПИСАННАЯ печать шла 36 839 секунд — 10 часов 14 минут. Печать -0.7.24, прошедшая после неё, шла 37 700–38 000 с (10 ч 28 мин — 10 ч 33 мин) -при пике 46,6 ГиБ — числа с захода на gpu, здесь своим прибором не снятые; -строки за эту печать в ведомости нет (задача 6704). Цель — два часа, и разрыв -пятикратный. - -Куда уходит расход — снято ведомостью по именам, двумя прогонами, 3 октября -2026 на семени этого дерева. - -Дорога печати, `emit flang/self/lexer.flang --target c`: 1 241 368 349 шагов, -7,3 с, заряда всего 1 225 645 027. - -| доля заряда | функция | где живёт | -|---:|---|---| -| 24,19 % | «Первые слова» | `flang/self/lexer.flang` | -| 22,22 % | «Печать литерала без проверок» | печатник C | -| 15,20 % | «Закрыть уровни» | `flang/self/lexer.flang` | -| 10,03 % | «Склеить» | `flang/self/lexer.flang` | -| 0,09 % | «Первое определение по имени» | `flang/self/proof-kernel.flang` | -| 0,001 % | «Развернуть» | `flang/self/proof-kernel.flang` | - -Дорога суда, `check flang/self/tags.flang`: 996 771 858 шагов, 30,4 с, заряда -всего 933 032 933. - -| доля заряда | функция | где живёт | -|---:|---|---| -| 19,98 % | «Первые слова» | `flang/self/lexer.flang` | -| 18,28 % | «Закрыть уровни» | `flang/self/lexer.flang` | -| 14,35 % | «Прогон цикла» | `flang/self/interpret.flang` | -| 2,21 % | «Первое определение по имени» | `flang/self/proof-kernel.flang` | -| 0,02 % | «Развернуть» | `flang/self/proof-kernel.flang` | - -Три вещи, которые эта ведомость называет прямо: - -1. **«Развернуть» главной строкой расхода не является** — 0,02 % заряда на - дороге суда и 0,001 % на дороге печати. Перебор обрывается на первом - совпадении («Первое определение по имени», `proof-kernel.flang:2024`), и - обрыв стоит дороже самой «Развернуть» в сто раз. -2. **«Описания программы», «Описание с именем» и «Имена содержат имя» в - ведомости НЕ ПОЯВЛЯЮТСЯ ни на одном из двух прогонов** — ноль входов при - строке `не поместилось 0`. Повтор имени проверяется встроенной формой - `содержит` над списком имён (`flang/self/interpret.flang:898`), словарь - описаний у записи «Программа» уже есть (`Узел хеша`, строка 174), поиск - описания идёт через «Найти описание», а подготовка программы делается ОДИН - раз на программу (`flang/self/bootstrap/compiler.flang:1769`). Квадрата - N·(N+1)/2 на подготовке программы здесь нет. -3. Дорогое — лексер и печать строковых литералов. Четыре имени из - `flang/self/lexer.flang` («Первые слова», «Закрыть уровни», «Склеить», - «Читать имя») дают 54,6 % заряда на дороге печати (24,19 + 15,20 + 10,03 + - 5,14) и 50,1 % на дороге суда (19,98 + 18,28 + 6,48 + 5,34). «Печать - литерала без проверок» и «Печать литерала» вместе — 27,3 % дороги печати - (22,22 + 5,09). - -Стадия, съедающая печать целиком, названа числом не здесь, а в -`docs/print-cost-measured.md`: «Проверить доказательства с кешем» — 85,79 % -шагов захода, и у неё есть выключенный файловый кеш. Порядок работ по этой -стадии — задача 5709. - -Версия: flang 0.7.23, 3 октября 2026. Сама перепечатка этим заходом не -запускалась: обе ведомости сняты на малых прогонах, и переносить их на дерево в -54 раза больше линейно нельзя — цена суда растёт как квадрат числа обязательств -(`docs/print-cost-measured.md`, раздел 4). - -## Что должно быть - -Полная перепечатка идёт не дольше двух часов. Порядок замеров и прежние числа — -`docs/reprint-cost.md`, строки заходов — `docs/reprint-ledger.tsv`. - -## Обходной путь - -Разовая заморозка всех входов печати на время одного захода, объявленная -заранее. Как постоянный порядок не годится: останавливает работу над -компилятором. - -## Когда задача сделана - -1. Снята поимённая ведомость САМОЙ перепечатки — `FLANG_TICKS_OUT` в вызове - `emit` внутри `scripts/bootstrap-reprint.sh`, а не перенос с малых прогонов; - названы часы, шаги и загрузка машины на начало и конец захода (`uptime`). - Часы разных дней без загрузки не сравнимы. Цена прибора измерена: 0,6 %. -2. Главная строка расхода по ЭТОЙ ведомости названа числом, и после правки её - доля заряда на том же прогоне и тем же прибором НИЖЕ, чем до. Доли меньше - процента в довод не берутся: прогон их уже показывает нулями. -3. В `docs/reprint-ledger.tsv` есть строка печати с числом секунд не больше 7200. -4. `sh scripts/bootstrap-reprint.sh --bystro` на стволе после вливания отвечает - кодом 0. - -## Где живёт правка - -- `flang/self/lexer.flang`: «Первые слова», «Закрыть уровни», «Склеить», - «Читать имя» — первая по расходу семья на обеих дорогах. Ни одна из них не - зовётся из ядра доказательств, это работа разбора, и она идёт заново на - каждом разборе исходника. -- `flang/self/emit-c.flang` и печатник C: «Печать литерала без проверок», - «Печать литерала» — вторая семья, 27,3 % дороги печати. -- Стадия «Проверить доказательства с кешем» и её кеш — задача 5709, там же - порядок «дешевле → дороже» и цена каждого шага. -- `flang/self/proof-kernel.flang` входит в ядро решений: рост числа строк - требует довода в `flang/scripts/kernel-lines-to-trust-ceiling.json`. -- Запись замеров: `docs/reprint-cost.md`, `docs/reprint-ledger.tsv`. - -Правка в `flang/self/**` доезжает до двоичного только перепечаткой. diff --git a/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md b/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md new file mode 100644 index 000000000..79b5a5bc1 --- /dev/null +++ b/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md @@ -0,0 +1,233 @@ +--- +номер: 8570 +заголовок: Перепечатка стоит 1 ч 19 мин, а не десять часов, и упирается теперь в потолок шагов +статус: в работе — цена снята и вписана в ведомость четырьмя строками (4 октября: 4736 с дошла, 4989 с снята, 6890 с без судьи; 25 сентября: 128 700 с дошла); прежнее «десять часов» было последней ЗАПИСАННОЙ строкой, а не ценой; скорость в шагах за секунду снята как негодная мера +приоритет: P1 +исполнитель: a +ветка: a/user-stories-and-the-reprint-ledger +команда: любая +карта: Что мешает больше всего +рядом: 5709, 6704 +нужность: цель в два часа достигнута, но суд съел 62 % потолка шагов — следующее дерево в прежний потолок не поместится, и печать умрёт не от длины, а от предела +--- + +# 8570. Перепечатка стоит 1 ч 19 мин, а не десять часов, и упирается теперь в потолок шагов + +Прежний заголовок этой задачи — «идёт десять часов при цели в два» — врал, и +врал не оценкой, а **пропуском в ведомости**. Число «десять часов» = 36 839 с — +последняя ЗАПИСАННАЯ строка `docs/reprint-ledger.tsv`, 17 сентября 2026. После +неё заходов было много, и ни один не был вписан: ведомость заполняется руками +после захода (её собственная шапка), прибора полноты у неё нет (задача 6704). +Четыре пропущенных захода вписаны этой правкой. + +## Шаги воспроизведения + +1. `tail -4 docs/reprint-ledger.tsv | cut -f1-5` +2. `awk -F'\t' '$2=="печать" && $3=="дошла"{print $1, $4}' docs/reprint-ledger.tsv | tail -3` +3. `grep -n 'ЗАПАС ШАГОВ НА ИСХОДЕ' flang/src/emit/c/flang_repl.c` + +## Что происходит + +``` +$ awk -F'\t' '$2=="печать" && $3=="дошла"{print $1, $4}' docs/reprint-ledger.tsv | tail -3 +2026-09-25 128700 +2026-10-04 4736 +2026-10-04 6890 +``` + +**Дошедший заход 4 октября 2026 на gpu стоил 4736 с = 1 ч 18 мин 56 с** — цель в +два часа перекрыта, разрыв не пятикратный, а отрицательный. Числа этого захода — +из журнала `/home/u/b-print-0725-print.log` на gpu (только чтение): + +| что | число | откуда | +|---|---:|---| +| начало | 18:24:13 UTC | первая строка журнала | +| конец | 19:43:09 UTC | время последней записи файла, `stat -c %y` | +| заход целиком | 4736 с | разность двух строк выше | +| напечатано | 7 файлов, 44 661 951 Б | строка «итого 7 файлов, 44661951 байт в bootstrap/» | +| пик памяти | 50,6 ГиБ | наибольшая из 143 отметок пульса печати; на стадии суда 50,0 ГиБ | +| суд ядра | 2 508 501 226 319 шагов из 4 000 000 000 000 (62 %) | строка «ЗАПАС ШАГОВ НА ИСХОДЕ» | + +Итог словами журнала: «напечатанное собрано и спрошено ДО того, как легло в +`bootstrap/` — семя годное». Дерево захода — партия пяти работ (точное целое +только тип, заголовки Makefile, точное в десять целей, предел ресурсов, плюс +ствол с починкой LSP); git в той копии не было, и отпечаток входов печати +говорит «коммит нет-git» — хеша у этого захода нет. + +Почему разрыв с 17 сентября — **7,8 раза**, а не работа дерева: с 1 октября +двоичный несёт память вызовов ядра (ADR-0051, задача 5709). Строки ведомости ДО +1 октября сняты без неё, и сравнивать их с нынешними нельзя; это сказано теперь +в шапке самой ведомости. Задача 5709 мерила полную печать с памятью в +2 ч 05 мин 37 с (заход 7) против 10 ч 14 мин у строки 17 сентября. + +## Прибор, которым цена мерится сама + +Печать называет свою цену **без отдельного замера**: на пороге в половину +потолка шагов она печатает строку + +``` +ЗАПАС ШАГОВ НА ИСХОДЕ: «Итог суда ядра» съел 2508501226319 шагов из 4000000000000 (62 %). Рост дерева +в полтора раза стоит вдвое с лишним — то, что перевалило за половину, в +следующий раз не поместится. +``` + +Порог — `repl_ctx.steps > repl_ctx.max_steps / 2` +(`flang/src/emit/c/flang_repl.c:2324`), строка печатается один раз и уже ПОСЛЕ +конца шага, то есть ничего не стоит на горячем пути. Это и есть прибор цены +суда: его число ставится в поле `потолок-шагов` следующего захода, а не +угадывается. Поимённой ведомости (`FLANG_TICKS_OUT`) он не заменяет — он +называет стадию, а не функцию. + +## Что осталось больно: потолок, а не часы + +Заход 4 октября съел 62 % потолка и сам сказал, что следующее дерево в него не +поместится. Потолок поднят с 4 до 8 трлн коммитом `3f9b9a77b` +(`MAX_STEPS` и `MEASURED_COST` в `scripts/bootstrap-reprint.sh`; у печатника свой +вшитый `FL_MAX_STEPS`, он поднят тоже). На 4 октября этот коммит живёт в ветке +`a/print-batch-exact-integer-and-makefile-headers` и в `dev` не влит — проверять +`grep -n 'MAX_STEPS=' scripts/bootstrap-reprint.sh`. Заход 2 того же дня +(`/home/u/b-print-0726-print.log`, начало 19:35:07 UTC) идёт уже под 8 трлн. + +Два числа того же дня, которые держат эту задачу открытой: + +- **снята**: местный заход на dev умер по SIGTERM от harness на 19 % стадии + «Проверить доказательства с кешем» после 4989 с = 1 ч 23 мин 09 с, пик + 41,6 ГиБ (`/home/b/projects/flang-cluster/print-batch.log`, начало 16:53:13 + UTC, последняя строка «Terminated» по метке файла 18:16:22 UTC). Печать длиной + в час с лишним не выживает в сессии, которую гасит harness. +- **без судьи**: 6890 с = 114 мин 50 с, 7 файлов, пересборка 1 мин 17 с. Это + ЧУЖОЙ ЗАМЕР: число пришло отчётом агента того же дня, журнала он не назвал, + своим прибором здесь не снято. Сравнивать его с 4736 с **не мерил**: машина + того захода не названа, а привести два захода к одной машине шагами за секунду + нельзя — см. ниже. + +## Где уходит расход — ведомость по именам на малых прогонах + +Снято двумя прогонами 3 октября 2026 на семени 0.7.23; **перенести на дерево в +54 раза больше линейно нельзя** — цена суда растёт как квадрат числа +обязательств (`docs/print-cost-measured.md`, раздел 4). + +Дорога печати, `emit flang/self/lexer.flang --target c`: 1 241 368 349 шагов, +7,3 с, заряда всего 1 225 645 027. + +| доля заряда | функция | где живёт | +|---:|---|---| +| 24,19 % | «Первые слова» | `flang/self/lexer.flang` | +| 22,22 % | «Печать литерала без проверок» | печатник C | +| 15,20 % | «Закрыть уровни» | `flang/self/lexer.flang` | +| 10,03 % | «Склеить» | `flang/self/lexer.flang` | +| 0,09 % | «Первое определение по имени» | `flang/self/proof-kernel.flang` | +| 0,001 % | «Развернуть» | `flang/self/proof-kernel.flang` | + +Дорога суда, `check flang/self/tags.flang`: 996 771 858 шагов, 30,4 с, заряда +всего 933 032 933. + +| доля заряда | функция | где живёт | +|---:|---|---| +| 19,98 % | «Первые слова» | `flang/self/lexer.flang` | +| 18,28 % | «Закрыть уровни» | `flang/self/lexer.flang` | +| 14,35 % | «Прогон цикла» | `flang/self/interpret.flang` | +| 2,21 % | «Первое определение по имени» | `flang/self/proof-kernel.flang` | +| 0,02 % | «Развернуть» | `flang/self/proof-kernel.flang` | + +Три вещи, которые эта ведомость называет прямо: + +1. **«Развернуть» главной строкой расхода не является** — 0,02 % заряда на + дороге суда и 0,001 % на дороге печати. Перебор обрывается на первом + совпадении («Первое определение по имени», `proof-kernel.flang:2024`), и + обрыв стоит дороже самой «Развернуть» в сто раз. +2. **«Описания программы», «Описание с именем» и «Имена содержат имя» в + ведомости НЕ ПОЯВЛЯЮТСЯ ни на одном из двух прогонов** — ноль входов при + строке `не поместилось 0`. Повтор имени проверяется встроенной формой + `содержит` над списком имён (`flang/self/interpret.flang:898`), словарь + описаний у записи «Программа» уже есть (`Узел хеша`, строка 174), поиск + описания идёт через «Найти описание», а подготовка программы делается ОДИН + раз на программу (`flang/self/bootstrap/compiler.flang:1769`). Квадрата + N·(N+1)/2 на подготовке программы здесь нет. +3. Дорогое — лексер и печать строковых литералов. Четыре имени из + `flang/self/lexer.flang` («Первые слова», «Закрыть уровни», «Склеить», + «Читать имя») дают 54,6 % заряда на дороге печати (24,19 + 15,20 + 10,03 + + 5,14) и 50,1 % на дороге суда (19,98 + 18,28 + 6,48 + 5,34). «Печать + литерала без проверок» и «Печать литерала» вместе — 27,3 % дороги печати + (22,22 + 5,09). + +Стадия, съедающая печать целиком, названа числом в +`docs/print-cost-measured.md`: «Проверить доказательства с кешем» — 85,79 % +шагов захода. Её кеш и порядок работ по ней — задача 5709; память вызовов +ADR-0051 оттуда и пришла, и 7,8 раза выше — её след. + +## Негодная мера: шагов в секунду + +Три места дерева приводят заходы к одной машине ЧЕРЕЗ СКОРОСТЬ В ШАГАХ ЗА +СЕКУНДУ — `.github/workflows/reprint.yml` (строки 36–40 и 127–128: «21,6 против +около 68 млн шагов/с») и шапка `scripts/bootstrap-reprint.sh` (строки 249–251 и +282–285: «23,16 млн шагов/с», «от 2,9 до 19,4 часа», «от 8,2 до 55,6 часа»). +**Эта мера негодна, и довод у неё отрицательный, снятый прогоном 4 октября +2026:** между двумя соседними отметками пульса одной и той же печати счётчик +шёл то 85 млн, то 2,4 млрд шагов/с — разница в 28 раз внутри одного захода. + +Причина — память вызовов ядра (ADR-0051): **запомненный вызов засчитывается +шагами, но не исполняется.** Вместе с ответом запоминаются шаги, которые вызов +стоил, и на попадании они начисляются заново — чтобы предел шагов и глубина +считались так же, как без памяти. Для предела это правильно, для часов — нет: +шаг, начисленный с попадания, стоит нуля секунд. + +Отсюда правило для этой задачи и для ведомости: + +- цена захода пишется **только секундами от начала до конца ДОШЕДШЕГО + прогона**; +- проценты потолка («съел 62 %») — это **расход**, а не скорость, и часов из + них не выводится; +- оценка «успеет/не успеет» по шагам в секунду снимается как негодная; чтобы + сравнить две машины, нужен один и тот же заход на обеих, а не пересчёт. + +Три места выше правкой этой задачи не тронуты: `scripts/bootstrap-reprint.sh` +стоит под заслоном роста строк, а `.github/workflows/reprint.yml` — отдельная работа. Что они +говорят негодной мерой — сказано здесь, чтобы следующий не взял их числа за +цену. + +## Что должно быть + +Полная перепечатка идёт не дольше двух часов — **выполнено, 4736 с**. Заход +помещается в потолок шагов с запасом не меньше вдвое, и каждый заход попадает +строкой в `docs/reprint-ledger.tsv` не памятью того, кто его вёл, а прибором +(задача 6704). Порядок замеров и прежние числа — `docs/reprint-cost.md`. + +## Обходной путь + +Разовая заморозка всех входов печати на время одного захода, объявленная +заранее. При цене 1 ч 19 мин она больше почти не нужна: входы печати правят +примерно раз в час, и заход теперь укладывается между правками. + +## Когда задача сделана + +1. Снята поимённая ведомость САМОЙ перепечатки — `FLANG_TICKS_OUT` в вызове + `emit` внутри `scripts/bootstrap-reprint.sh`, а не перенос с малых прогонов; + названы часы, шаги и загрузка машины на начало и конец захода (`uptime`). + Часы разных дней без загрузки не сравнимы, а пересчёт через шаги в секунду + негоден (см. выше) — значит загрузка обязательна. Цена прибора измерена: + 0,6 %. **Не сделано.** +2. Главная строка расхода по ЭТОЙ ведомости названа числом, и после правки её + доля заряда на том же прогоне и тем же прибором НИЖЕ, чем до. Доли меньше + процента в довод не берутся: прогон их уже показывает нулями. **Не сделано**; + стадия названа («Итог суда ядра», 62 % потолка), функция внутри неё — нет. +3. В `docs/reprint-ledger.tsv` есть строка печати с числом секунд не больше + 7200. **Сделано: 4736 с, 4 октября 2026.** +4. `sh scripts/bootstrap-reprint.sh --bystro` на стволе после вливания отвечает + кодом 0. **Не мерил: заход печати идёт на gpu, и второй на той же машине + рядом не пускается.** + +## Где живёт правка + +- Запись замеров: `docs/reprint-ledger.tsv` (строка на заход, шапка — о + несопоставимости строк до 1 октября), `docs/reprint-cost.md`. +- Потолок шагов: `scripts/bootstrap-reprint.sh` (`MAX_STEPS`, `MEASURED_COST`) и + вшитый `FL_MAX_STEPS` печатника — поднимаются вместе, иначе заход умирает на + том из двух, который ниже. +- Прибор цены суда: `flang/src/emit/c/flang_repl.c:2324` — порог в половину + потолка; править нечего, читать в журнале захода. +- Стадия «Проверить доказательства с кешем» и её кеш — задача 5709. +- Полнота ведомости прибором — задача 6704. +- `flang/self/lexer.flang` и `flang/self/emit-c.flang` — первые две семьи + расхода на малых прогонах; правка там доезжает до двоичного только + перепечаткой. diff --git a/scripts/seed/reprint-freshness.fscript b/scripts/seed/reprint-freshness.fscript index 969195a43..1e379c2cb 100644 --- a/scripts/seed/reprint-freshness.fscript +++ b/scripts/seed/reprint-freshness.fscript @@ -88,8 +88,8 @@ возвращает список строки обеспечивает «строк совета три» (длина результат) равен 3 ["Позвать её: sh scripts/bootstrap-reprint.sh --check", - (соединить ["Цена: дошедшие заходы печати идут от 10 ч 14 мин до 35 ч 45 мин ", - "на одном ядре, пик памяти 44,9 ГиБ (docs/reprint-ledger.tsv, задача 1310)."] по ""), + (соединить ["Цена: дошедшие заходы печати идут от 1 ч 18 мин (4 октября, с памятью вызовов ядра) ", + "до 35 ч 45 мин (23–25 сентября, без неё), пик памяти 50,6 ГиБ (docs/reprint-ledger.tsv)."] по ""), "Итог заносится строкой в docs/reprint-ledger.tsv — иначе следующий не узнает, что сверка была."] тип «Ход» From 9bdbf9e617c362f1589cf188cf449ffceece0984 Mon Sep 17 00:00:00 2001 From: Marat Zimnurov Date: Sun, 4 Oct 2026 20:48:09 +0000 Subject: [PATCH 2/3] docs(reprint): the script header says 1 h 19 min, not six to thirty six A stale number in the header of scripts/bootstrap-reprint.sh changed someone's work on 4 October 2026: an executor read there that a landed run costs between 6 h 23 min and 35 h 45 min and did NOT run the reprint. A second one read "8 h 34 min" from docs/reprint-ledger.tsv. That is what a stale number costs - not a blemish in prose but work cancelled. The measured cost of the landed run of 4 October is 4736 s, 1 h 18 min 56 s (gpu, /home/u/b-print-0725-print.log, 18:24:13 to 19:43:09, 7 files and 44661951 bytes out, peak 50.6 GiB over the pulses of the print itself). The header is rewritten with ZERO growth of lines, because the growth gate refuses added lines in shell: 14 lines replaced by 14, the file still 3592 lines. What the script now says: the price of --check 8 h 34 min 02 s, 30 August -> 1 h 18 min 56 s (4736 s), 4 October the refusal of --bystro "the price is 8 h 34 min" -> "1 h 19 min" the print directory "39 MB and half a day" -> "45 MB and an hour and a bit", 44661951 bytes, peak 50.6 GiB "the print takes six six hours -> an hour and a bit hours", five places Both shells parse it: bash -n and sh -n are clean. NOT TOUCHED ON PURPOSE: the MEASURED_COST and MAX_STEPS block, where "35 h 45 min" also stands. Commit 3f9b9a77b rewrites those very seven lines to raise the step cap, and two edits of one line would collide in the merge. Task 8570 says so, and says that the stale number stays there until that commit lands. Task 8570 also gains two things measured today. The second print of the day, running under the raised cap of eight trillion, prints NO "step budget running out" warning at all - the raise did exactly what it was for; its seconds are not written into the ledger because the run is still going and a price must not be written from a ceiling. And the three places that convert runs to one machine through steps per second are named with a reason: the conversion is an unfit measure, since a memoized call is charged its steps without being executed. --- ...he-print-runs-out-of-steps-not-of-hours.md | 37 ++++++++++++++++--- scripts/bootstrap-reprint.sh | 28 +++++++------- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md b/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md index 79b5a5bc1..03d2797a7 100644 --- a/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md +++ b/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md @@ -86,7 +86,10 @@ $ awk -F'\t' '$2=="печать" && $3=="дошла"{print $1, $4}' docs/reprint вшитый `FL_MAX_STEPS`, он поднят тоже). На 4 октября этот коммит живёт в ветке `a/print-batch-exact-integer-and-makefile-headers` и в `dev` не влит — проверять `grep -n 'MAX_STEPS=' scripts/bootstrap-reprint.sh`. Заход 2 того же дня -(`/home/u/b-print-0726-print.log`, начало 19:35:07 UTC) идёт уже под 8 трлн. +(`/home/u/b-print-0726-print.log`, начало 19:35:07 UTC) идёт уже под 8 трлн и +предупреждения «ЗАПАС ШАГОВ НА ИСХОДЕ» **не печатает** — подъём потолка сделал +ровно то, ради чего делался. Его секунды в ведомость не вписаны: заход ещё идёт, +и писать цену с потолка нельзя. Два числа того же дня, которые держат эту задачу открытой: @@ -181,10 +184,34 @@ ADR-0051 оттуда и пришла, и 7,8 раза выше — её сле - оценка «успеет/не успеет» по шагам в секунду снимается как негодная; чтобы сравнить две машины, нужен один и тот же заход на обеих, а не пересчёт. -Три места выше правкой этой задачи не тронуты: `scripts/bootstrap-reprint.sh` -стоит под заслоном роста строк, а `.github/workflows/reprint.yml` — отдельная работа. Что они -говорят негодной мерой — сказано здесь, чтобы следующий не взял их числа за -цену. +Три места выше правкой этой задачи не тронуты, и причина у каждого своя. В +`scripts/bootstrap-reprint.sh` часы переписаны (см. ниже), а пересчёт через шаги +в секунду оставлен: он стоит в блоке `MEASURED_COST`, который переписывает +коммит `3f9b9a77b`, поднимающий потолок, — две правки одних строк столкнулись бы +при своде. `.github/workflows/reprint.yml` — отдельная работа. Что они говорят +негодной мерой, сказано здесь, чтобы следующий не взял их числа за цену. + +## Протухшее число меняло чужую работу + +4 октября 2026 исполнитель другой работы прочитал в шапке +`scripts/bootstrap-reprint.sh`, что дошедший заход стоит от 6 ч 23 мин до +35 ч 45 мин, и НЕ стал гонять перепечатку; второй прочитал в ведомости +«8 ч 34 мин». Это и есть цена протухшего числа: не неточность в прозе, а +отменённая работа. + +Шапка скрипта поправлена **нулевым ростом строк** — заслон +(`.githooks/no-growth.fscript`) отказывает прибавке строк в оболочку, поэтому +переписаны существующие: 14 строк заменены на 14. Что теперь говорит скрипт: + +| место | было | стало | +|---|---|---| +| цена `--check` | 8 ч 34 мин 02 с, 30 августа | 1 ч 18 мин 56 с (4736 с), 4 октября | +| отказ `--bystro` человеку | «цена — 8 ч 34 мин» | «цена — 1 ч 19 мин» | +| каталог печати | «39 МБ и полдня работы» | «45 МБ и час с лишним», 44 661 951 байт, пик 50,6 ГиБ | +| «печать идёт шесть часов», 5 мест | шесть часов | час с лишним | + +Блок `MEASURED_COST` и `MAX_STEPS` не тронут нарочно: его переписывает коммит +`3f9b9a77b`, и «35 ч 45 мин» там останется до его вливания. ## Что должно быть diff --git a/scripts/bootstrap-reprint.sh b/scripts/bootstrap-reprint.sh index e661d6d20..a807c05bd 100644 --- a/scripts/bootstrap-reprint.sh +++ b/scripts/bootstrap-reprint.sh @@ -418,7 +418,7 @@ MAX_DEPTH=20000 # Молчание — приборы на месте. Хоть одна строка «НЕТ» — печатник собран из # одного семени, и пускать его нельзя. -# Отказ вместо шести часов впустую. Проверяется до всякой работы: заход с +# Отказ вместо часа впустую. Проверяется до всякой работы: заход с # потолком ниже измеренной цены не дойдёт до конца, и знать это надо ДО того, # как машина занята на ночь, а не после. if [ "$MAX_STEPS" -lt "$MEASURED_COST" ]; then @@ -434,9 +434,9 @@ NOT_SEED="README.md flang flang.exe flang_cli flang_cli.exe libcompiler_flang.a # ── ОТПЕЧАТОК ВХОДОВ ПЕЧАТИ: чем сверять семя, когда печатать нечем ────────── # # `--check` сверяет побайтно и потому ПЕЧАТАЕТ ЗАНОВО. Цена — последний -# ДОШЕДШИЙ до конца заход печати, 30 августа 2026: 8 ч 34 мин 02 с -# (docs/reprint-ledger.tsv). Столько на каждое слияние не потратить, и оттого -# сверку не звал никто. +# ДОШЕДШИЙ до конца заход печати, 4 октября 2026: 1 ч 18 мин 56 с, 4736 с +# (docs/reprint-ledger.tsv). Прежде стоило 8 ч 34 мин, и оттого +# сверку не звал никто; с памятью вызовов ядра цена упала в 7,8 раза. # # ЗДЕСЬ СТОЯЛО «5 ч 30 мин 07 с и 258,9 ГиБ, 24 августа». Время с тех пор # ВЫРОСЛО, а память УПАЛА, и путать оси нельзя: три захода 31 августа 2026 тем @@ -689,9 +689,9 @@ same_numbers_in_second_print() { # ── Будет ли чем проверить напечатанное: спрашивается ДО печати ───────────── # -# Печать идёт шесть часов (заход 29 августа 2026: 6 ч 23 мин). Узнать в конце -# этих шести часов, что проверять нечем — нет `make`, нет `cc`, пропал файл -# пробы, — значит потратить их впустую. Тот же довод, что у проверки потолка +# Печать идёт час с лишним (заход 4 октября 2026: 1 ч 18 мин 56 с). В конце +# этого часа, что проверять нечем — нет `make`, нет `cc`, пропал файл пробы, +# — значит потратить его впустую. Тот же довод, что у проверки потолка # в шапке: отказ до работы, а не после. can_check() { missing=0 @@ -916,7 +916,7 @@ build_and_ask() { fi # Срок пробе. Двоичный несёт потолок в $MAX_STEPS шагов, и незавершающаяся - # проба считалась бы под ним часами — после шести часов печати это худший из + # проба считалась бы под ним часами — после часа печати это худший из # исходов. Замер пробы: 0,63 с; срок 600 с — тысячекратный запас. Нет # `timeout` — проба идёт без срока, и это сказано вслух, а не умолчано. deadline= @@ -3399,13 +3399,13 @@ if [ "$mode" = fast ]; then err "правка легла в flang/self/proof-record.flang и на корпусе не работает ни разу)." err "" err "Чинится ровно одним — перепечаткой: sh scripts/bootstrap-reprint.sh" - err "Цена последнего дошедшего захода — 8 ч 34 мин (docs/reprint-ledger.tsv)." + err "Цена последнего дошедшего захода — 1 ч 19 мин (docs/reprint-ledger.tsv)." err "Пока перепечатки нет, честный ответ прибора — красный, а не число." err "Кому нужно прежнее поведение (отставание числом, код 0) — --terpimo." exit 1 fi -# Проверить итог печати будет нечем? Узнать это надо ДО шести часов работы, а не +# Проверить итог печати будет нечем? Узнать это надо ДО часа работы, а не # после — тот же довод, что у проверки потолка в шапке. if [ "$mode" = print ]; then can_check || { @@ -3419,13 +3419,13 @@ BINARY=$(pick_binary) # Каталог печати ОБЯЗАН пережить перезагрузку и отключение питания: на этой # машине волатильные каталоги запрещены хуком, а TMPDIR по умолчанию ведёт -# именно туда. Печать компилятора — 39 МБ и полдня работы (последний дошедший -# заход, 30 августа 2026: 8 ч 34 мин 02 с, 38 958 005 байт вывода; предыдущий, -# 29–30 августа, — 7 ч 50 мин 45 с и 27,7 ГиБ пика по пульсу печати; лестница +# именно туда. Печать компилятора — 45 МБ и час с лишним работы (последний +# дошедший заход, 4 октября 2026: 1 ч 18 мин 56 с, 44 661 951 байт вывода, пик +# 50,6 ГиБ по пульсу печати; до памяти вызовов ядра — 8 ч 34 мин; лестница # замеров — docs/reprint-cost.md), терять её на ребуте нельзя. Каталог задаётся # FLANG_TMP, по умолчанию /srv/tmp. TMP=$(mktemp -d -p "${FLANG_TMP:-/srv/tmp}" bootstrap-reprint.XXXXXX) -# Каталог убирается за собой, но НЕ при отказе: шесть часов работы нельзя +# Каталог убирается за собой, но НЕ при отказе: час с лишним работы нельзя # выбрасывать вместе с приговором. При отказе он остаётся и называется — семя # захода 29 августа спасли ровно так, руками, и руками же это делать не надо. KEEP=no From b1b278b9b042448cd40bdc4674e459d150039904 Mon Sep 17 00:00:00 2001 From: Marat Zimnurov Date: Sun, 4 Oct 2026 20:50:50 +0000 Subject: [PATCH 3/3] docs(reprint): the last landed row is the run with the judge An awk over docs/reprint-ledger.tsv for the last "print landed" row gave 6890 s - the run WITHOUT the judge, a foreign measurement whose time of day is not known. The refusal of scripts/bootstrap-reprint.sh --bystro quotes exactly that row as "the price of the last landed run", so it would have named the price of a print that never judged anything. The three rows of 4 October are ordered so the run without the judge stands first (no time of day to place it by) and the two runs with known starts keep their order: 16:53:13 UTC killed, 18:24:13 UTC landed. The last landed row is now 4736 s, the number the script header and the task name. Task 8570 says why the order is what it is. --- docs/reprint-ledger.tsv | 4 ++-- .../8570-the-print-runs-out-of-steps-not-of-hours.md | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/reprint-ledger.tsv b/docs/reprint-ledger.tsv index aceb41552..c795e32da 100644 --- a/docs/reprint-ledger.tsv +++ b/docs/reprint-ledger.tsv @@ -14,6 +14,6 @@ 2026-09-08 сверка дошла 16895 36.3 39710602 1400000000000 коммит f2945456, /usr/bin/time -v; журнал scratchpad/g6/g6.log 2026-09-17 печать дошла 36839 34.9 43300122 1400000000000 коммит 68ff03b34, задача 5190; /srv/tmp/dokazuemyy/raskrutka-5190.log; копия wSemya, дерево не правилось 2026-09-25 печать дошла 128700 0 0 4000000000000 заход 23–25 сентября 2026, названный в шапке scripts/bootstrap-reprint.sh («шёл 35 ч 45 мин») и в .github/workflows/reprint.yml; строки о нём в ведомости не было — задача 6704. Пик не замерен, байты вывода не записаны: журнала этого захода дерево не называет -2026-10-04 печать дошла 4736 50.6 44661951 4000000000000 gpu, журнал /home/u/b-print-0725-print.log (только чтение): начало 18:24:13 UTC — первая строка журнала, конец 19:43:09 UTC — время последней записи файла (stat -c %y), 4736 с = 1 ч 18 мин 56 с. Итог словами журнала: «напечатанное собрано и спрошено ДО того, как легло в bootstrap/ — семя годное»; вывод — строка «итого 7 файлов, 44661951 байт в bootstrap/». Дерево — партия пяти работ (точное целое только тип, заголовки Makefile, точное в десять целей, предел ресурсов, плюс ствол с починкой LSP); git в той копии не было, отпечаток говорит «коммит нет-git». Суд съел 2 508 501 226 319 шагов из 4 000 000 000 000 (62 %) — печать сама напечатала «ЗАПАС ШАГОВ НА ИСХОДЕ» о стадиях «Проверить доказательства с кешем» и «Итог суда ядра». Пик 50,6 ГиБ — наибольшая из 143 отметок пульса самой печати (стадия «Напечатать связанное»), не /usr/bin/time; на стадии суда пик 50,0 ГиБ -2026-10-04 печать снята 4989 41.6 0 4000000000000 dev (эта машина), журнал /home/b/projects/flang-cluster/print-batch.log: начало 16:53:13 UTC — шапка журнала, последняя строка «Terminated» по метке файла 18:16:22 UTC, то есть 4989 с = 1 ч 23 мин 09 с. Снята SIGTERM от harness на 19 % стадии «Проверить доказательства с кешем» (791 570 926 679 шагов из 4 000 000 000 000), дерево 89d38a5c5. Пик 41,6 ГиБ — наибольшая отметка пульса печати, не /usr/bin/time; вывода нет 2026-10-04 печать дошла 6890 0 0 0 печать БЕЗ СУДЬИ (стадия суда доказательств не прогонялась): 114 мин 50 с = 6890 с, 7 файлов, пересборка напечатанного 1 мин 17 с. ЧУЖОЙ ЗАМЕР — число пришло отчётом агента того же дня, журнала он не назвал, своим прибором здесь не снято. Пик не замерен, байты вывода не записаны, потолок шагов не записан — поля стоят нулями, как в строке 30 августа. Сравнивать её с заходом С судьёй того же дня (4736 с) НЕ МЕРИЛ: машина этого захода не названа, а приводить заходы к одной машине шагами за секунду нельзя — см. шапку выше +2026-10-04 печать снята 4989 41.6 0 4000000000000 dev (эта машина), журнал /home/b/projects/flang-cluster/print-batch.log: начало 16:53:13 UTC — шапка журнала, последняя строка «Terminated» по метке файла 18:16:22 UTC, то есть 4989 с = 1 ч 23 мин 09 с. Снята SIGTERM от harness на 19 % стадии «Проверить доказательства с кешем» (791 570 926 679 шагов из 4 000 000 000 000), дерево 89d38a5c5. Пик 41,6 ГиБ — наибольшая отметка пульса печати, не /usr/bin/time; вывода нет +2026-10-04 печать дошла 4736 50.6 44661951 4000000000000 gpu, журнал /home/u/b-print-0725-print.log (только чтение): начало 18:24:13 UTC — первая строка журнала, конец 19:43:09 UTC — время последней записи файла (stat -c %y), 4736 с = 1 ч 18 мин 56 с. Итог словами журнала: «напечатанное собрано и спрошено ДО того, как легло в bootstrap/ — семя годное»; вывод — строка «итого 7 файлов, 44661951 байт в bootstrap/». Дерево — партия пяти работ (точное целое только тип, заголовки Makefile, точное в десять целей, предел ресурсов, плюс ствол с починкой LSP); git в той копии не было, отпечаток говорит «коммит нет-git». Суд съел 2 508 501 226 319 шагов из 4 000 000 000 000 (62 %) — печать сама напечатала «ЗАПАС ШАГОВ НА ИСХОДЕ» о стадиях «Проверить доказательства с кешем» и «Итог суда ядра». Пик 50,6 ГиБ — наибольшая из 143 отметок пульса самой печати (стадия «Напечатать связанное»), не /usr/bin/time; на стадии суда пик 50,0 ГиБ diff --git a/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md b/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md index 03d2797a7..0ec4c073f 100644 --- a/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md +++ b/docs/tasks/8570-the-print-runs-out-of-steps-not-of-hours.md @@ -31,10 +31,16 @@ ``` $ awk -F'\t' '$2=="печать" && $3=="дошла"{print $1, $4}' docs/reprint-ledger.tsv | tail -3 2026-09-25 128700 -2026-10-04 4736 2026-10-04 6890 +2026-10-04 4736 ``` +Строки 4 октября стоят так нарочно: у захода БЕЗ СУДЬИ времени суток нет (чужой +замер), и он поставлен первым, чтобы последней дошедшей строкой ведомости был +заход С СУДЬЁЙ — 4736 с. Иначе `awk` отдавал бы 6890 с, и отказ скрипта, +который берёт «цену последнего дошедшего захода», называл бы цену печати без +судьи. + **Дошедший заход 4 октября 2026 на gpu стоил 4736 с = 1 ч 18 мин 56 с** — цель в два часа перекрыта, разрыв не пятикратный, а отрицательный. Числа этого захода — из журнала `/home/u/b-print-0725-print.log` на gpu (только чтение):