liburing

Библиотека liburing предоставляет удобный интерфейс для работы с асинхронным вводом-выводом в Linux через io_uring, обеспечивая высокую производительность и низкие накладные расходы.

Подпакеты
Имя Краткое описание
liburing-devel Описание отсутствует

Домашняя страница: https://git.kernel.dk/cgit/liburing/

Доступные версии
Версия Релиз Архитектура Лицензия Дата сборки Размер Версии ОС Подробности
2.9 1.niceos5 x86_64 (GPL-2.0-only WITH Linux-syscall-note OR MIT) AND (LGPL-2.0-or-later OR MIT) 25 апр. 2025 г. 119,198 МиБ Подробности
Описание

Обзор библиотеки liburing

Библиотека liburing представляет собой мощный инструмент для разработчиков, работающих с современными механизмами асинхронного ввода-вывода в операционных системах Linux. Она предоставляет удобный пользовательский интерфейс для работы с io_uring — новым API ядра Linux, которое было введено для повышения производительности операций ввода-вывода за счет минимизации системных вызовов и оптимизации взаимодействия между пользовательским пространством и ядром. В данном описании мы подробно рассмотрим, что такое liburing, для чего она нужна, как её установить в Найс.ОС с помощью пакетного менеджера dnf, а также приведем примеры использования.

Что такое io_uring и liburing?

io_uring — это интерфейс ядра Linux, разработанный для асинхронного ввода-вывода. Он был впервые представлен в ядре версии 5.1 и с тех пор активно развивается. Основная идея io_uring заключается в использовании двух кольцевых буферов (submission queue и completion queue), которые позволяют отправлять и получать результаты операций ввода-вывода без лишних системных вызовов. Это особенно полезно для высоконагруженных приложений, таких как веб-серверы, базы данных и системы обработки больших объемов данных.

Библиотека liburing выступает в роли обертки над этим низкоуровневым API, упрощая разработку приложений. Она предоставляет высокоуровневые функции для инициализации, отправки задач и обработки результатов, что делает работу с io_uring более доступной для программистов, не желающих углубляться в детали реализации ядра.

Основные возможности liburing

  • Упрощенный доступ к API io_uring через высокоуровневые функции.
  • Поддержка асинхронных операций чтения, записи, сетевых взаимодействий и других типов ввода-вывода.
  • Оптимизация производительности за счет минимизации системных вызовов.
  • Интеграция с современными приложениями, требующими высокой скорости обработки данных.

Установка liburing в Найс.ОС

Для использования библиотеки liburing в системе Найс.ОС необходимо установить соответствующий пакет с помощью менеджера пакетов dnf. Убедитесь, что у вас есть права администратора (или используйте sudo), и выполните следующую команду:

sudo dnf install liburing

Эта команда загрузит и установит библиотеку liburing вместе с необходимыми зависимостями. После установки вы можете проверить наличие пакета с помощью команды:

dnf info liburing

Если вам также нужны заголовочные файлы и документация для разработки, установите пакет разработчика:

sudo dnf install liburing-devel

Примеры использования liburing

Инициализация и базовая операция чтения

Давайте рассмотрим простой пример использования liburing для асинхронного чтения данных из файла. Ниже приведен код на языке C, демонстрирующий базовую работу с библиотекой.

#include 
#include 
#include 
#include 

#define QUEUE_DEPTH 1

int main() {
    struct io_uring ring;
    io_uring_queue_init(QUEUE_DEPTH, &ring, 0);
    
    int fd = open("test.txt", O_RDONLY);
    if (fd < 0) {
        perror("open");
        return 1;
    }
    
    char buffer[4096];
    struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);
    io_uring_prep_readv(sqe, fd, &(struct iovec){.iov_base = buffer, .iov_len = sizeof(buffer)}, 1, 0);
    io_uring_submit(&ring);
    
    struct io_uring_cqe *cqe;
    io_uring_wait_cqe(&ring, &cqe);
    ssize_t ret = io_uring_cqe_get_data(cqe);
    io_uring_cqe_seen(&ring, cqe);
    
    printf("Read %zd bytes: %.*s\n", ret, (int)ret, buffer);
    
    close(fd);
    io_uring_queue_exit(&ring);
    return 0;
}

Этот код инициализирует очередь io_uring, открывает файл test.txt и выполняет асинхронное чтение данных из него. После компиляции (с использованием флага -luring) и запуска программы вы увидите содержимое файла, прочитанное асинхронно.

Для компиляции примера используйте следующую команду:

gcc -o read_example read_example.c -luring

Применение в высоконагруженных системах

Библиотека liburing особенно полезна в высоконагруженных системах, таких как веб-серверы (например, NGINX или Apache) или базы данных (например, PostgreSQL). Эти приложения могут использовать io_uring через liburing для обработки тысяч запросов одновременно, минимизируя задержки и повышая пропускную способность.

Например, веб-сервер может использовать асинхронные операции чтения/записи для обработки HTTP-запросов, не блокируя основной поток выполнения. Это особенно важно для серверов, работающих с большим количеством статических файлов или потоковой передачей данных.

Преимущества и ограничения

Преимущества

  • Высокая производительность: За счет уменьшения системных вызовов и оптимизации работы с ядром.
  • Простота интеграции: Благодаря высокоуровневому API библиотеки liburing.
  • Гибкость: Поддержка широкого спектра операций ввода-вывода, включая файловые, сетевые и другие.

Ограничения

  • Требуется ядро Linux версии 5.1 или новее для работы с io_uring.
  • Не все приложения могут извлечь выгоду из асинхронного ввода-вывода, особенно если нагрузка на ввод-вывод минимальна.
  • Необходимость изучения API для сложных сценариев использования.

Совместимость и поддержка

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

Для получения дополнительной информации и документации вы можете обратиться к официальному репозиторию проекта на GitHub или к man-страницам, доступным после установки пакета liburing-devel.

Итоги

Библиотека liburing — это мощный инструмент для разработчиков, стремящихся использовать возможности асинхронного ввода-вывода в Linux. Она идеально подходит для высоконагруженных приложений, где важны производительность и масштабируемость. Установка в Найс.ОС с помощью dnf проста и не требует дополнительных усилий, а примеры кода помогают быстро начать работу с библиотекой. Если вы разрабатываете современные приложения для Linux, liburing может стать важной частью вашего инструментария.