Хочу рассказать о статье "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, подробнее о которых можно прочитать в этой статье. Приведу выдержку из нее:


  • Intel Volume Management Device (Intel VMD) — позволяет работать с накопителями NVM Express напрямую, «отдавая» девайс сразу системе хранения. Как следствие, стала возможна полноценная горячая замена SSD, индикация статуса и использование технологии Intel VROC.
  • Intel Virtual RAID on CPU (Intel VROC). Позволяет создавать RAID из NVMe накопителей средствами процессора, с ним можно отказаться от программных решений или дополнительных адаптеров для создания массивов из скоростных PCIe SSD.
  • Internet Wide-Area RDMA Protocol (iWARP). Расширение RDMA теперь поддерживается встроенными сетевыми адаптерами Intel X722, ведь процессор поддерживает четыре 10-гигабитных (или гигабитных) порта Ethernet. Напомню, RDMA получает доступ к данным по сети напрямую из памяти, минуя ядро и операционную систему.

Всегда очень интересно узнавать о новых концепциях в уже укоренившихся системах.


Прошу писать о замеченных ошибках и необходимых дополнениях.


UPD: В данную статью силами сообщества вносятся изменения.


Спасибо за помощь:



Строка рекламы подкаста "Цинковый прод" в котором на правах темы мы обсудим данную статью.

Комментарии (13)


  1. Zuy
    17.05.2019 06:08

    Интересно, а чем им mmap(...) не угодил. Никаких абстракций, читай или пиши напрямую в память устройства. Они же по сути тоже самое предлагают.


    1. xenmayer Автор
      17.05.2019 06:28
      +1

      В статье они о его упоминают. Говорят о том, что для доступа к I/O mmap — блокирующий интерфейс (в случае когда доступа к данным нет в страничном кэше). В ссылках дают статью в своем блоге ScyllaDB


      1. Zuy
        17.05.2019 06:54

        А так это обзор совсем другой статьи и там речь идет о файловом I/O. Смутило упоминание сети в «аппаратных предпосылках». Тогда понятно откуда у проблемы ноги растут.


        1. xenmayer Автор
          17.05.2019 07:03

          Да. Что касается сетевого стека, то авторы предлагают отключать сетевой стек ядра, для избавления от устаревших абстраций.


          1. Alex_ME
            17.05.2019 08:59

            DPDK какой-то получается.


  1. akurilov
    17.05.2019 07:26

    Современные устройства быстрее что? Ломаются? Вычисляют? Передают данные?


    1. xenmayer Автор
      17.05.2019 08:14

      Заголовок действительно «желтоват». В статье, которую обсуждаем, имеется в виду не столько скорость (вычислений или передачи данных) процессоров, сколько проблемы устаревших концепций ядра операционной системы. Подумаю как можно уточнить название, спасибо.


  1. red75prim
    17.05.2019 08:09
    +1

    В Linux сейчас ведется работа над POSIX AIO интерфейсом, который предоставляет простой и эффективный асинхронный интерфейс ввода-вывода.

    Наоборот-же. Решили, что AIO слишком сложный для реализации и неудобный в применении, и сделали новый интерфейс: io_uring.


    1. xenmayer Автор
      17.05.2019 08:14

      Спасибо за уточнение. Исправляю.


  1. Nikobraz
    17.05.2019 11:22
    +1

    Расскажите еще как iWARP и VROC могут процессору работы подкинуть ну и собственно увеличивают скорость I/O


    1. xenmayer Автор
      17.05.2019 11:31

      Спасибо за идею. Эти технологии также действительно впечатляют. Они аппаратными средствами процессоров решают проблему медленной прослойки в виде ядра операционной системы. Добавлю еще один пункт со ссылкой на интересный обзорный материал, в котором они мелькают.


  1. picul
    17.05.2019 13:30
    +1

    Если не устраивает сетевой стек, то нужна не новая ОС, а всего лишь новый драйвер. Хотя бы потому, что на новую ОС никто не будет пересаживаться (ну разве что по хайпу), а новые драйвера еще могут поставить.


    1. xenmayer Автор
      17.05.2019 13:48
      +1

      Согласен. Глобальными перестройками никто не будет заниматься. Эта разработка похожа на концепт, чтобы все посмотрели и начали движение в выгодном для себя направлении.