122 lines
5.7 KiB
Markdown
122 lines
5.7 KiB
Markdown
[Документация](../../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 <POOL> --inode <INODE> --size <SIZE>` вместо `--image testimg`.
|
||
|
||
vitastor-ublk поддерживает все обычные опции Vitastor, например, `--config_path <path_to_config>`,
|
||
плюс специфичные для 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}}
|
||
```
|