Учебное пособие по io_uring и «сырому» Wayland на чистом C для начинающих
Codotaku
0:00 / 0:00
Учебное пособие по io_uring и «сырому» Wayland на чистом C для начинающих
1 053 просмотра · 2 недели назад
Codotaku
6,64 тыс. подписчиков
1 053 просмотра · 2 недели назад
io_uring и руководство по использованию Wayland для начинающих на чистом C
io_uring — это интерфейс системных вызовов ядра Linux для асинхронных операций ввода-вывода на устройствах хранения данных. Он решает проблемы производительности, связанные с аналогичными интерфейсами, предоставляемыми такими функциями, как read()/write() или aio_read()/aio_write() для операций с данными, доступ к которым осуществляется через файловые дескрипторы.
Он работает путем создания двух кольцевых буферов, называемых «кольцами очередей», для отслеживания отправки и завершения запросов ввода-вывода соответственно. Для устройств хранения данных они называются очередью отправки (SQ) и очередью завершения (CQ). Совместное использование этих буферов ядром и приложением помогает повысить производительность ввода-вывода, устраняя необходимость в дополнительных и дорогостоящих системных вызовах для копирования этих буферов между ними. Согласно проектной документации io_uring, буфер SQ доступен для записи только приложениями-потребителями, а буфер CQ — только ядром.
eBPF может быть объединен с io_uring.
Ядро Linux поддерживает асинхронный ввод-вывод с версии 2.5, но он считался сложным в использовании и неэффективным. Этот старый API поддерживал только определенные нишевые сценарии использования, в частности, он включал асинхронную работу только при использовании флага O_DIRECT и при доступе к уже выделенным файлам. Это исключало использование кэша страниц, а также подвергало приложение сложной семантике O_DIRECT. Linux AIO также не поддерживает сокеты, поэтому его нельзя использовать для мультиплексирования сетевого и дискового ввода-вывода.
Интерфейс ядра io_uring был принят в ядре Linux версии 5.1 (2019) для решения недостатков Linux AIO. Библиотека liburing предоставляет API для простого взаимодействия с интерфейсом ядра из пользовательского пространства.
Wayland — это протокол связи, определяющий взаимодействие между сервером отображения и его клиентами, а также реализация этого протокола в библиотеке C. Сервер отображения, использующий протокол Wayland, называется композитором Wayland, поскольку он дополнительно выполняет задачу композиторского оконного менеджера.
Wayland разрабатывается группой волонтеров, первоначально возглавляемой Кристианом Хёгсбергом, как свободный проект с открытым исходным кодом, управляемый сообществом, с целью замены системы X Window на безопасную и более простую оконную систему для Linux и других Unix-подобных операционных систем. Исходный код проекта публикуется в соответствии с условиями лицензии MIT, разрешительной лицензии на свободное программное обеспечение. Проект Wayland также разрабатывает реализацию композитора Wayland под названием Weston.