18+
реклама
18+
Бургер менюБургер меню

Оливия Кросс – Слепое пятно (страница 8)

18

– Снятся, – ответ прозвучал сухо и без шутки. Нервы – расходник. Расходники нужно планировать.

Техник, проходя мимо с коробкой расходников, кивнул, как кивают в привычном коридоре людям, у которых своя линия. От коробки пахло пластиком и новой резиной. На крышке маркером было выведено «шлейфы; комплект 2». Такие надписи помогают помнить, что железо – не абстракция. В КП эта память тоже нужна.

Возвращение в комнату заняло меньше минуты. Вентиляция снова стала слышна отчётливо, перегретый воздух чуть лип к коже на шее. На стол легла новая форма полёта. Второй прогон – тот, с поворотом и лёгким РЭБ, – требовал чуть больше внимания.

– На участке два-ноль – поворот с компенсацией, – Петров сказал это не Громову, а себе и цифрам. – Шум – по профилю.

Старт и разгон – как раньше. «АРЕС» держал перехват ухоженным. «Сырые» числа шли без эмоций, и это было к лучшему. К одиннадцатой минуте подошли к повороту. Лёгкий шум РЭБ включился именно той ступенью, что записана в листе: кратковременная модуляция, короткая «грязь». На «красивой» – почти ничего не меняется. На «сырых» – полезные колючки в дельтах.

Переход через угол совпал с узкой щелью в канале. Тут и проявилась искомая вещь: «двоение» метки не в «коридоре», а на повороте. Вторая точка мигнула в полградусе правее основной и растворилась быстрее, чем хочется сказать «было». В этот самый момент внутренняя диагностика успела положить строку «merge» – но на один кадр раньше фактической «второй» формы. «policy loaded: 17c». «window=2». Параметры стояли в том же виде, как и утром, и вчера, и в серверной ночью. Ритм – одинаковый.

Гарнитура треснула чуть громче. Воздух улавливал это как личное вмешательство. Память снова принесла лабораторный свет и «пилик» калиброванной лампы. На этот раз картинка не мешала, а выпрямляла: в таких местах сигналы всегда спорят. Если «слияние» приходит раньше, чем спор оформился, – это не свойство шума. Это свойство правила.

– Держу, – Громов на манёвре почти не менял голоса. Паузы из его речи выходили вместе с нагрузкой и возвращались на равнине.

Ещё в течение пары минут картина стабилизировалась. Пики легли там, где им полагается лежать при этом профиле. Маленькая строка в диагностике добавила: «assist re-engaged». Ровный выдох.

Петров в этот раз ничего не говорил. Смотрел на общую панель как на карту, у которой есть отдельный слой «неизвестные дороги». Марков на соседнем экране ловил «хвостики» времени: короткая «cache snapshot … 10:59:47.999» с внутренним полем «event time», которое на долю секунды опережало системные часы. NTP не прыгал. Значит, «бежит» внутреннее.

– Вернусь в КП, подниму логи, – Марков не формулировал «выводы» вслух. Выводы – потом.

После посадки и коротких «по книге» процедур КП снова взял на себя тёплый шум и озон. Окна за стеклом чуть посветлели – мимо прошёл разрыв в облаках. Клавиатура, нагретая пальцами, работала мягче.

Разбор – не спектакль. Сначала – отметки «коридора». Лента шла без скачков. В месте выпадения 1000 мс – раннее «merge». Соседняя строка – «policy=17c». Параметры: «theta=0.61», «window=2», «early_ok=true». В комментариях алгоритма – ничего. Внутренний «самоанализ» пометил: «fast-path». Вчистую тот же рисунок, что был в серверной. Скриншот – в папку.

Затем – поворот под шум. Прокрутка на десять секунд назад, запуск заново. Вторичное эхо – как пузырёк в правом нижнем углу поля зрения. «merge» – на кадр раньше. «17c» – здесь же. Дважды. Разных источника шума, разные геометрии, одна и та же последовательность.

Этого, по-хорошему, уже достаточно. Но слово «достаточно» здесь лучше не произносить до третьего раза. Третьим должен стать не «красивый» отчёт, а независимое подтверждение. В боковой панели – «реплей». В архиве – вчерашний дневной прогон контрольного набора. Никакой романтики: чистая функция – прогнать через ту же цепочку с теми же фильтрами.

Марков запустил реплей и поставил флажки «с АРЕС/без». Без «АРЕСа» картина вышла честной: дышащие линии, маленькие разноговорки между каналами. С включённым – сходились до ровности, которая на полигоне отдаёт ложным блеском. В месте короткой телеметрической щели – раннее «merge» с теми же признаками. «window=2». «17c». Пакет положил в «артефакты».

Петров стоял чуть сзади и смотрел так, как смотрят на инженерную доску с уже решённым узлом.

– Три? – спросил он, без риторики.

– Три, – ответ получился не как слово, а как констатация факта. – Разные условия: коридор с выпадением, поворот под шум, архивный контрольный. Везде – одно и то же: «слияние» на окне «два» до появления второй формы. «policy loaded: 17c». Локальные часы ровные. Внутренние «снимки» местами вперёд на десятки миллисекунд.

– Запишем, – Петров сдвинул к себе блокнот. – Для разбора: «поведение кода», не «помеха».

Громов подошёл ближе, положил ладонь на край стола. Жест – короткий, как запись в логе.

– По рукам – было чисто, – он не спрашивал, просто сверял. – На повороте – без хвоста.

– По рукам – да, – подтвердила сводка. – Замечание по «timing» только на первой «проверке задержки», «minor».

В верхнем углу экрана коротко вспыхнуло: «доступ к каталогу временно ограничен». Та же мягкая формула, что уже ловилась в серверной. Щелчок – и сообщение исчезло. В этот раз не пришлось ловить взглядом – палец лёг на «Print Screen» раньше мысли.

Марков выстроил рядом три окна с ключевыми кадрами. Для «красоты» это бесполезно. Для головы – необходимо. На всех трёх – узкая щель входного потока, везде одно и то же решение до появления «второй» формы. Различные кадры, один стиль поведения. Сверху – три короткие строки текста – имён достаточно: «коридор», «поворот», «архив». Рядом – отдельная метка «phase misalign 1 tick (minor)» от первой проверки ручного – чтобы не забыть показать это тем, кто любит валить стрелки на пилота.

Пальцы нащупали страничку блокнота. Внизу появились слова, разделённые запятыми и точками с запятыми: «слияние до появления второй формы; окно=2; 17c; fast-path; early_ok=true; поворот под шум; синхронно с внутренним тактом; локальные часы – в норме; кэш – местами вперёд». Следом – одна фраза, ровная, без пафоса: «Это поведение кода, а не помеха».

Петров склонил голову – знак «так и пойдёт». Вечерний разбор просил именно эту формулу: без метафор, без «кажется», без попыток заранее спорить с теми, кто спросит «допустимо ли».

Воздух в КП снова вспомнил про озон. В динамике едва слышно потрескивало – как сухие листья на низком токе. В такие паузы инженерное чувство времени обретает плотность: кадр, второй, третий; такт, окно, дельта. В этом ряду лишних слов не держат.

Перед тем как закрыть окна, Марков ещё раз глянул на ленту диагностики «АРЕСа». В местах раннего решения стояло то самое «fast-path». Там, где «fast-path» отсутствовал, поведение было обычным, без «преждевременных» склеек. Это – важно для разговора с теми, кто будет тянуть рассуждение в сторону «всё случайно». Случайности повторяются редко так же точно.

В коридоре чьи-то шаги скрипнули по линолеуму. В комнате остались трое и ровные числа на экранах. За окном дождь перешёл на более плотный ритм. Разговор закончился сам собой – не точкой, а отложенной стрелкой: к вечеру – три скриншота, две стрелки, одна фраза.

Громов снял гарнитуру, посмотрел на экран не сообщая ничего вслух и ушёл в сторону ангара – проверять своё железо так, как проверяют инструмент, к которому привыкли. Петров пододвинул папку ближе к краю – аккуратный жест, который всегда обозначал «этот документ сегодня дойдёт до адресата». Бумаге положено дойти.

Комната опустела почти до тишины. Марков сделал ещё одну короткую вещь, на которую времени почти не оставалось: сверил по собственной утилите шаг тактового предиктора с частотой моментов «merge». Совпадение было не просто частым – полным. Ровно каждый раз, когда окно «два» закрывалось, «merge» отмечался на границе этого окна. Не зависел от NTP, не чувствителен к искусственному смещению локального времени в пределах двадцати миллисекунд. Отметка легла в файл «паттерны»: «слияние синхронизировано с внутренним тактом, не с NTP».

Три источника, три условия, один рисунок. Я видел такое однажды. Три года назад я назвал это артефактом кэша и закрыл ноутбук.

Курсор остановился в начале строки. Сохранение отчёта, выгрузка артефактов, резерв на внешний носитель. Дальше – короткий отдых мышцам, глоток воды, взгляд в окно, где балтийский свет редко меняет тон. Завершение первого блока дня отдалось щелчком пружины в стуле. Следующий блок будет вечером. И спор теперь пойдёт не о том, «видел ли кто-нибудь двоение», а о том, «допустимо ли, что машина клеит раньше». Вопрос проще, чем кажется. Сложнее – ответ.

Глава 7

Ночная лаборатория дышала иначе. Лампы дневного света жужжали тонко, как будто у каждой был свой резистор, подобранный вручную. Воздух пах канифолью и тёплым текстолитом, чуть сладил из-за пыли, которая привыкла жить на платах, а не на полках. Столы – со следами колких краёв плат; на одном лежал пинцет, на другом – конверт с микросхемами, прижатый полоской клейкой ленты. В углу стоял стенд: стойка с кабелями, аккуратно перевязанными через каждые двадцать сантиметров, и монитор – не новый, с тёплым белым и лёгкой зернистостью.