[Документация](../../README-ru.md#документация) → Использование → UBLK ----- [Read in English](ublk.en.md) # UBLK [ublk](https://docs.kernel.org/block/ublk.html) - это новый Linux-интерфейс на основе io_uring для реализации блочных устройств в пространстве пользователя, доступный, начиная с Linux 6.0. ublk тоже копирует память (т.е. не является zero-copy), но по IOPS всё равно обгоняет и [NBD](nbd.ru.md), и [VDUSE](qemu.ru.md#vduse), и иногда может даже обгонять VDUSE по скорости линейного доступа. Также ublk позволяет оживлять устройства, у которых умер сервер (процесс-обработчик vitastor-ublk). ## Пример сравнения производительности TCP (100G), 3 сервера с 6 NVMe OSD каждый, 3 реплики, один клиент | | Прямой fio | NBD | VDUSE | UBLK | |--------------------------|-------------|-------------|------------|-------------| | линейная запись | 3807 MB/s | 1832 MB/s | 3226 MB/s | 3027 MB/s | | линейное чтение | 3067 MB/s | 1885 MB/s | 1800 MB/s | 2076 MB/s | | 4k случайная запись Q128 | 128624 iops | 91060 iops | 94621 iops | 149450 iops | | 4k случайное чтение Q128 | 117769 iops | 153408 iops | 93157 iops | 171987 iops | | 4k случайная запись Q1 | 8090 iops | 6442 iops | 6316 iops | 7272 iops | | 4k случайное чтение Q1 | 9474 iops | 7200 iops | 6840 iops | 8038 iops | RDMA (100G), 3 сервера с 6 NVMe OSD каждый, 3 реплики, один клиент | | Прямой fio | NBD | VDUSE | UBLK | |--------------------------|-------------|-------------|-------------|-------------| | линейная запись | 6998 MB/s | 1878 MB/s | 4249 MB/s | 3140 MB/s | | линейное чтение | 8628 MB/s | 3389 MB/s | 5062 MB/s | 3674 MB/s | | 4k случайная запись Q128 | 222541 iops | 181589 iops | 138281 iops | 218222 iops | | 4k случайное чтение Q128 | 412647 iops | 239987 iops | 151663 iops | 269583 iops | | 4k случайная запись Q1 | 11601 iops | 8592 iops | 9111 iops | 10000 iops | | 4k случайное чтение Q1 | 10102 iops | 7788 iops | 8111 iops | 8965 iops | ## Команды vitastor-ublk поддерживает следующие команды: - [map](#map) - [unmap](#unmap) - [ls](#ls) ## map Чтобы создать локальное блочное устройство для образа, выполните команду: ``` vitastor-ublk map [/dev/ublkbN] --image testimg ``` Команда напечатает название блочного устройства вида /dev/ublkb0, которое потом можно будет использовать как обычный диск. Для обращения по номеру инода, аналогично другим командам, можно использовать опции `--pool --inode --size ` вместо `--image testimg`. vitastor-ublk поддерживает все обычные опции Vitastor, например, `--config_path `, плюс специфичные для ublk: * `--recover` \ Восстановить ранее подключённое устройство, у которого умер обработчик. * `--queue_depth 256` \ Максимальная глубина очереди устройства. * `--max_io_size 1M` \ Максимальный размер запроса ввода-вывода для устройства. По умолчанию: `max(1 MB, блок данных пула * число частей данных EC)`. * `--readonly` \ Подключить устройство в режиме только для чтения. * `--hdd` \ Пометить устройство как вращающийся жёсткий диск (флаг rotational). * `--logfile /path/to/log/file.txt` \ Писать сообщения о процессе работы в заданный файл, вместо пропуска их при фоновом режиме запуска или печати на стандартный вывод при запуске в консоли с `--foreground 1`. * `--dev_num N` \ Использовать заданное устройство `/dev/ublkbN` вместо автоматического подбора. * `--foreground 1` \ Не уводить процесс в фоновый режим. Обратите внимание, что опции `ublk_queue_depth` и `ublk_max_io_size` можно также задавать в `/etc/vitastor/vitastor.conf` или в другом файле конфигурации, заданном опцией `--config_path`. ## unmap Для отключения устройства выполните: ``` vitastor-ublk unmap /dev/ublkb0 ``` ## ls ``` vitastor-ublk ls [--json] ``` Вывести подключённые устройства. Пример вывода в обычном формате: ``` /dev/ublkb0 image: bench pid: 584536 /dev/ublkb1 image: bench1 pid: 584546 ``` Пример вывода в JSON-формате: ``` {"/dev/ublkb0": {"image": "bench", "pid": 584536}, "/dev/ublkb1": {"image": "bench1", "pid": 584546}} ```