Jump to content

io_uring

io_uring (ранее известный как aioring ) — это ядра Linux интерфейс системного вызова для асинхронных операций ввода-вывода устройства хранения , решающий проблемы с производительностью с помощью аналогичных интерфейсов, предоставляемых такими функциями, как read()/ write() или aio_read()/ aio_write() и т. д. для операций с данными, доступ к которым осуществляется файловыми дескрипторами . [1] [2] : 2 

Разработка продолжается, над ней в основном работал Йенс Аксбо из Meta . [1]

Интерфейс

[ редактировать ]

Он работает путем создания двух циклических буферов , называемых «кольцами очереди», для хранения отправки и завершения запросов ввода-вывода соответственно. Для устройств хранения они называются очередью отправки (SQ) и очередью завершения (CQ). [3] Совместное использование этих буферов между ядром и приложением помогает повысить производительность ввода-вывода , устраняя необходимость выполнения дополнительных и дорогостоящих системных вызовов для копирования этих буферов между ними. [1] [3] [4] Согласно документу о проекте io_uring, буфер SQ доступен для записи только потребительским приложениям, а буфер CQ доступен для записи только ядру. [1] : 3 

eBPF можно комбинировать с io_uring. [5]

Ядро Linux поддерживает асинхронный ввод-вывод начиная с версии 2.5, но его считали сложным в использовании и неэффективным. [6] Этот старый API поддерживал только определенные нишевые варианты использования . [7] в частности, он включает асинхронную работу только при использовании флага O_DIRECT и при доступе к уже выделенным файлам. Это предотвращает использование кэша страниц , а также подвергает приложение сложной семантике O_DIRECT. Linux AIO также не поддерживает сокеты, поэтому его нельзя использовать для мультиплексирования сетевого и дискового ввода-вывода. [8]

Интерфейс ядра io_uring был принят в ядре Linux версии 5.1 для устранения недостатков Linux AIO. [1] [4] [9] liburing Библиотека предоставляет API для легкого взаимодействия с интерфейсом ядра из пользовательского пространства . [1] [1] : 12 

Безопасность

[ редактировать ]

io_uring был известен тем, что выявил значительную поверхность атаки и структурные трудности при его интеграции с подсистемой безопасности Linux . [10]

В июне 2023 года группа безопасности Google сообщила, что 60% эксплойтов ядра Linux , представленных в их программу вознаграждения за ошибки в 2022 году, были эксплойтами уязвимостей io_uring. В результате io_uring был отключен для приложений в Android и полностью отключен в ChromeOS, а также на серверах Google. [11] Docker также, следовательно, отключил io_uring из своего профиля seccomp по умолчанию . [12] [ оригинальное исследование? ]

  1. ^ Перейти обратно: а б с д и ж г «Ядро Linux получает io_uring для обеспечения быстрого и эффективного ввода-вывода — Phoronix» . Фороникс . Проверено 14 марта 2021 г.
  2. ^ Аксбо, Йенс (15 октября 2019 г.). «Эффективный ввод-вывод с помощью io_uring» (PDF) .
  3. ^ Перейти обратно: а б «Практическое знакомство с io_uring с использованием Go» . Developers.mattermost.com . Проверено 20 ноября 2021 г.
  4. ^ Перейти обратно: а б «Быстрый рост io_uring [LWN.net]» . lwn.net . Проверено 20 ноября 2021 г.
  5. ^ «BPF встречает io_uring [LWN.net]» . LWN.net . Проверено 17 апреля 2023 г.
  6. ^ Корбет, Джонатан. «Вызов нового API асинхронного ввода-вывода» . LWN.net . Проверено 14 марта 2021 г.
  7. ^ «Что нового в io_uring» (PDF) . Проверено 1 июня 2022 г.
  8. ^ «Асинхронный ввод-вывод Linux» . 21 апреля 2014 г. Архивировано из оригинала 06 апреля 2015 г. Проверено 16 июня 2023 г. Блокировка во время io_submit в ext4, при буферизованных операциях, доступе к сети, каналам и т. д. Некоторые операции не совсем хорошо представлены интерфейсом AIO. В случае совершенно неподдерживаемых операций, таких как чтение из буфера, операции с сокетом или каналами, вся операция будет выполнена во время системного вызова io_submit, а завершение будет доступно немедленно для доступа с помощью io_getevents. Доступ AIO к файлу в файловой системе, такой как ext4, поддерживается частично: если для поиска блока данных требуется чтение метаданных (т. е. если метаданные еще не находятся в памяти), то вызов io_submit будет блокироваться при чтении метаданных. Некоторые типы операций записи, увеличивающие файлы, полностью не поддерживаются и блокируются на протяжении всей операции.
  9. ^ «Ускоренный ввод-вывод через io_uring | Рецепты ядра 2019» . Проверено 14 марта 2021 г.
  10. ^ Корбет, Джонатан (28 июля 2022 г.). «Требования безопасности для новых функций ядра» . LWN.net . Проверено 16 июня 2023 г.
  11. ^ Кочка, Тамаш. «Уроки из представленных материалов об эксплойтах ядра Linux 42 от kCTF VRP» . Блог Google по онлайн-безопасности . Google . Проверено 14 июня 2023 г.
  12. ^ «seccomp: заблокировать системные вызовы io_uring_* в профиле по умолчанию от akerouanton · Pull Request #46762 · moby/moby» . Гитхаб . Проверено 2 ноября 2023 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6203e3051135ab6677f4f0be7c5d5ec8__1720540860
URL1:https://arc.ask3.ru/arc/aa/62/c8/6203e3051135ab6677f4f0be7c5d5ec8.html
Заголовок, (Title) документа по адресу, URL1:
io_uring - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)