Семь ядер замерли у невидимого барьера. Восьмое задержалось на чужом процессе — и весь LLM-инференс завис. Так выглядит главная коллизия совместной жизни задач машинного обучения и обычных процессов на одном процессоре. Инференс-ганг требует, чтобы все ядра ударили в такт одновременно — иначе тишина. Но операционная система не может просто заморозить одно ядро посреди генерации токена (слова или части слова в языковой модели): барьер никогда не дождётся опоздавшего, а самовольное подключение нового участника незаметно исказит результат.
В Anima OS — операционной системе, написанной на Rust, — эту проблему решили, превратив ганг в эластичный оркестр без дирижёра. Каждое ядро-музыкант может войти в ансамбль или покинуть его строго между тактами — то есть между токенами. Протокол ACK-latch работает так: перед началом генерации выставляется флаг активности и увеличивается номер эпохи. Каждое ядро, способное одолжиться, подтверждает текущую эпоху, предварительно сохранив состояние своего процесса — словно музыкант ставит инструмент на паузу и кивает. Состав участников для очередного токена фиксируется в одном атомарном слове — битовой маске, куда попадают только те, чьё подтверждение совпадает с эпохой на момент фиксации. Эта маска публикуется перед стартом токена, и каждая точка барьерного ожидания читает именно её. Ядро, не успевшее подтвердиться, просто не включается в текущий токен — никто его не ждёт, а его работу крадут соседи.
Испытания на процессоре AMD Ryzen 9 9800X3D (архитектура Zen 5) с моделями SmolLM2-135M и Qwen2.5-7B показали: при четверти времени, занятой инференсом, общая пропускная способность для обычных процессов выросла в 1,75 раза по сравнению со статическим разделением ядер — с 327 до 574 служебных квантов в секунду. При этом скорость генерации не упала, а выход моделей остался побитово идентичен фиксированной конфигурации. Хеш финальных логитов — числовых оценок вероятности токенов — 0x9a2917eca1a62bd1 не изменился ни в одном сценарии. Задержка возврата ядра после окончания генерации составила медианные 0,22 микросекунды — практически мгновенно. А захват занятого ядра, по консервативной политике, длится один квант планировщика (около 16 миллисекунд): процесс-арендатор не прерывается посреди своего кванта, ядро присоединяется к гангу только по его истечении.
Эластичный ганг ломает устоявшееся представление о несовместимости жёстко-барьерных вычислений с динамическим перераспределением ядер. Протокол ACK-latch превращает инференс-группу в полноправный объект планирования: она делится ресурсами с остальной системой без потери корректности. Это открывает путь к операционным системам, где инференс LLM — не изолированная задача, а рядовая служба, подстраивающаяся под нагрузку подобно тому, как оркестр меняет состав между частями симфонии. Механизм может быть перенесён в Linux с планировщиком SCHED_DEADLINE, адаптирован к гетерогенным архитектурам (big.LITTLE) и интегрирован с политиками энергосбережения. Так эластичный ганг, синхронизируясь по единому слову-партитуре, делает шаг к решению фундаментальной проблемы мирного сосуществования синхронных и асинхронных вычислений в одной системе. Теперь зависшее ядро — не беда. Не успев к барьеру, оно просто пропускает такт, а эластичный оркестр играет дальше — и ни одна нота не фальшивит.
Даже при 301 миграции процессов за 10-секундное окно инференс оставался побитово точным, а разброс измерений пропускной способности не превышал 0.9%.