Rethinking the Linux cloud stack for confidential VMs
Конфиденциальные ВМ требуют переработки стека Linux в облаке.
Публичное облако не гарантирует приватности: хост-провайдер может получить доступ к памяти гостя. Confidential computing решает это, шифруя память даже от гипервизора, но приходится балансировать между безопасностью и производительностью.
Изоляция и производительность
Аппаратные уровни привилегий, IOMMU, KVM, cgroups и namespaces обеспечивают изоляцию ВМ. Однако для скорости всё чаще используют прямой доступ к устройствам (DPDK, vDPA), что снижает контроль ОС и усиливает зависимость от железа и прошивок.
Решение: доверенные устройства
AMD SEV-TIO и стандарт TDISP позволяют гостю криптографически убедиться в подлинности устройства и разрешить ему прямой доступ к зашифрованной памяти, избегая медленных bounce-буферов. Реализуется через SR-IOV: физическое устройство создаёт множество виртуальных функций, каждая из которых может быть «доверенной» для конкретной конфиденциальной ВМ.
Комментарии (44)
- Критики считают, что Confidential Computing (CC) — это скорее маркетинговый трюк облачных провайдеров, чем реальная защита: аппаратная основа часто уязвима и не может быть исправлена.
- Даже при шифровании памяти вы всё равно работаете на чужом железе, которое теоретически могут модифицировать для сниффинга или извлечения данных.
- Для многих CC — способ «галочки» под GDPR, особенно в медицинских исследованиях, но реальная польза пока минимальна.
- Apple реализовала собственную версию CC качественно, но она закрыта и только для экосистемы Apple.
- Участники соглашаются: если ваша модель угроз не позволяет доверять провайдеру, используйте физические серверы; «доверие» в облаке всегда остаётся условным.
Io_uring, kTLS and Rust for zero syscall HTTPS server 🔥 Горячее
- История: от pre-fork до
epoll
— каждый шаг уменьшал сисколлы, но они всё ещё оставались узким местом. - io_uring — кольцевые очереди в памяти: сервер пишет команды, ядро асинхронно их выполняет и кладёт результат обратно. При высокой нагрузке
strace
не покажет ни одного сисколла. - 1 поток = 1 ядро без разделяемых структур; память берётся только из локального NUMA-узла.
- Память: заранее выделяем фиксированный буфер на соединение — без
brk/mmap
, без фрагментации. - kTLS — после рукопожатия шифрование переходит в ядро. Плюсы:
- Работает
sendfile
, данные не копируются в userspace. - Возможно аппаратное ускорение NIC.
- Работает
Комментарии (137)
- io_uring даёт «zero-syscall» при высокой нагрузке, но требует ручного управления памятью: безопасность не обеспечивается ни borrow checker, ни runtime.
- На большинстве облачных платформ io_uring выключен по умолчанию, поэтому остаётся нишевым.
- Автор статьи сначала чистит код, а потом будет мерить производительность — что вызвало одобрение читателей.
- Обсуждаются альтернативы: epoll, kTLS, DPDK, eBPF, а также споры «один поток на ядро» vs oversubscription.
- Некоторые считают, что сложность io_uring и async Rust — цена за неспособность ОС ускорить syscalls без нарушения обратной совместимости.