Хочу рассказать о статье "I/O Is Faster Than the CPU – Let’s Partition Resources
and Eliminate (Most) OS Abstractions", опубликованной на личной странице одного из разработчиков ScyllaDB, Pekka Enberg. О ней узнал из видео. С докладом по этой статье авторы должны были выступать на HOTOS17 (Hot Topics in Operating Systems) воркшопе 12 -15 мая 2019. Насколько понял там обсуждают наработки на ранних этапах их жизни. Моя статья носит новостной характер с целью возбудить пытливые умы на обдумывание этой темы и размышления в комментариях. Ввод-ввывод на серверах с быстрыми программируемыми сетевыми картами и энергонезависимой памятью приближается к скорости энергозависимых ОЗУ, а скорость одного ядра процессора, остается на месте. Приложения не могут использовать преимущества современных аппаратных средств, т.к. вынуждены использовать интерфейсы построенные на абстракциях предполагающих медленные системы ввода-вывода.  Авторы предлагают свою структуру ОС, которую называют parakernel, она устраняет большинство абстракций ОС и предоставляет интерфейс для приложений, чтобы они могли использовать весь потенциал оборудования. Parakernel облегчает параллелизм на уровне приложений путем безопасного разделения ресурсов и мультиплексирования неразделяемых ресурсов. Архитектура современных ОС была придумана, когда скорость ввода-вывода была намного меньше, и приложения ожидали выполнения операций ввода-вывода. В текущее время устройства ввода-вывода с легкостью могут насытить процессор.  По словам авторов, современные сетевые стеки выполняют слишком много работы на пакет. Кроме того ОС обычно реализуют API POSIX сокетов, который имеет большие издержки переключения контекста и загрязнения кэша процессора. Современная 40Гбит сетевая карта может получать пакет соизмеримый со строкой кэша каждые 5 нс, а задержка доступа к LLC (last level cache) процессоров примерно 15 нс. Например в Linux вели разработку POSIX AIO интерфейса, который должен бы был предоставлять простой и эффективный асинхронный интерфейс ввода-вывода. Реализация, поддержка и применение подобного интерфейса с сохранением POSIX семантики оказалась очень сложной и от него отказались в пользу нового io_uring. Новая структура ОС, которую авторы называют parakernel, предназначена для упрощения распараллеливания задач. Приложениям выделяются ресурсы и они имеют полный контроль над ними, ресурсы которые нельзя разделить мультиплексируются ядром. Совместное использование ресурсов в многоядерных системах требует синхронизации между ядрами процессора, что препятствует параллелизму на уровне приложения. Это препятствие можно уменьшить разделив ресурсы между ядрами процессора. Некоторые абстракции операционных систем ограничивают производительность ввода-вывода. Авторы представляют структуру ОС, которая разделяет разделяемые ресурсы и мультиплексирует неразделяемые ресурсы. Parakernel упрощает параллелизм уровня приложения, и дополняет дизайн поток на ядро. Прототип parakernel написан на Rust и сейчас находится в разработке. В статье я не увидел название операционной системы, но нашел другой материал одного из авторов Manticore Operating System и делаю вывод, что вот репозиторий этой разработки. Как оказывается, производители процессоров не спят и тоже пытаются решать проблему медленной прослойки между их продукцией и потребителями. Значит многих не устраивает бутылочное горлышко производительности в виде ядра операционной системы.
Интересные нововведения от Intel, подробнее о которых можно прочитать в этой статье. Приведу выдержку из нее: Всегда очень интересно узнавать о новых концепциях в уже укоренившихся системах.  Прошу писать о замеченных ошибках и необходимых дополнениях.  UPD: В данную статью силами сообщества вносятся изменения. Спасибо за помощь:  Строка рекламы подкаста "Цинковый прод" в котором на правах темы мы обсудим данную статью. Team lead, ведущий подкаста «Цинковый прод»