nos_
ENRU

Блог

Истории о разработке nos: настоящие баги на настоящем железе, гипервизор, Rust в ядре и гейты, которые не дают выдать желаемое за действительное.

RSS-лента
13 мин чтения

Сеть гостей: с 5,7 секунды до 2,8 — и две идеи, которые не выдержали замеров

Posted interrupts, one-shot-таймер, модерация прерываний приёма, offload, отображённые кольца — с замерами на железе; halt polling и задача для NIC не помогли.

ГипервизорСетьПроизводительностьx86-64Rust
9 мин чтения

Как гипервизор nos не пускает спекулятивное исполнение гостя к хосту и соседям

Очистка регистров, заполнение RSB, IBPB, IBRS, BHI_DIS_S, VERW: что гипервизор nos делает вокруг каждого VM exit, сколько это стоит и что ещё открыто.

ГипервизорБезопасностьx86-64ПроизводительностьЖелезо
8 мин чтения

Когда баг в эмуляторе: две странности QEMU TCG под AMD-V

В TCG из QEMU 10.2 чтение CR4 гостем не вызывает vmexit, а точка останова по данным во вложенном госте вешает CPU насовсем. Как мы это нашли и обошли.

ГипервизорQEMUОтладкаТестированиеx86-64
11 мин чтения

Фаззинг ядра на хосте

Четыре фаззера, которые собирают исходники самого ядра в программы для хоста, — гипервизор, сеть, хранилище и C++ — и ошибки, которые они нашли.

ФаззингТестированиеБезопасностьRustГипервизорСетьХранилище
6 мин чтения

Конструктор, который никто не вызвал, и линковка, которая его больше не пропустит

nos не исполняет .init_array, и глобальный объект с настоящим конструктором остаётся нулями. Так два лока выпали из watchdog — теперь такое не слинкуется.

БезопасностьЗагрузкаОтладкаТестирование
7 мин чтения

W^X везде: образ ядра, куча и каждый модуль

В nos нет страниц, доступных одновременно на запись и на исполнение. Как разделили образ, какая дыра была под каждым отображением и какой тест её стережёт.

ПамятьБезопасностьx86-64arm64МодулиТестирование
8 мин чтения

AX41: загрузка, которая не сказала ни слова

Ядро умерло раньше, чем появилась хоть какая-то консоль, на сервере, где консоль — только сеть. Два счётчика на дисках и копия в QEMU нашли причину.

ОтладкаЖелезоЗагрузкаQEMUx86-64
9 мин чтения

Семь неверных теорий и одно чтение регистра: потерянное прерывание RTL8125

Под UDP-нагрузкой EX44 глох насовсем. Семь теорий, выведенных из кода драйвера, оказались ложными, а одно чтение регистров чипа нашло потерянный фронт MSI-X.

ЖелезоСетьДрайверыОтладкаRust
7 мин чтения

Дедлок без паники: почему в nos нельзя освобождать память под спинлоком

TLB shootdown ждал CPU, который крутился на спинлоке отправителя. Как одно тихое зависание стало правилом, пулом кадров, гейтом и паникой через 10 секунд.

БезопасностьПамятьОтладкаСетьФаззингx86-64