Files
vitastor/docs/usage/ublk.ru.md
Vitaliy Filippov db63e58b3d
All checks were successful
Test / buildenv (push) Successful in 10s
Test / build (push) Successful in 4m58s
Test / npm_lint (push) Successful in 9s
Test / test_cas (push) Successful in 10s
Test / make_test (push) Successful in 36s
Test / test_change_pg_count (push) Successful in 33s
Test / test_change_pg_count_ec (push) Successful in 31s
Test / test_change_pg_size (push) Successful in 7s
Test / test_create_nomaxid (push) Successful in 8s
Test / test_add_osd (push) Successful in 1m15s
Test / test_etcd_fail_antietcd (push) Successful in 39s
Test / test_etcd_fail (push) Successful in 41s
Test / test_change_pg_count_online (push) Successful in 1m10s
Test / test_interrupted_rebalance (push) Successful in 46s
Test / test_create_halfhost (push) Successful in 5s
Test / test_interrupted_rebalance_imm (push) Successful in 47s
Test / test_failure_domain (push) Successful in 12s
Test / test_interrupted_rebalance_ec (push) Successful in 48s
Test / test_snapshot (push) Successful in 13s
Test / test_interrupted_rebalance_ec_imm (push) Successful in 47s
Test / test_minsize_1 (push) Successful in 13s
Test / test_snapshot_ec (push) Successful in 16s
Test / test_rm (push) Successful in 11s
Test / test_move_reappear (push) Successful in 17s
Test / test_snapshot_down (push) Successful in 12s
Test / test_snapshot_chain (push) Successful in 31s
Test / test_snapshot_down_ec (push) Successful in 12s
Test / test_splitbrain (push) Successful in 12s
Test / test_snapshot_chain_ec (push) Successful in 40s
Test / test_rm_degraded (push) Successful in 1m1s
Test / test_rebalance_verify (push) Successful in 1m53s
Test / test_rebalance_verify_imm (push) Successful in 1m53s
Test / test_dd (push) Successful in 12s
Test / test_root_node (push) Successful in 10s
Test / test_rebalance_verify_ec (push) Successful in 2m1s
Test / test_rebalance_verify_ec_imm (push) Successful in 2m1s
Test / test_switch_primary (push) Successful in 32s
Test / test_write (push) Successful in 32s
Test / test_write_xor (push) Successful in 36s
Test / test_write_no_same (push) Successful in 10s
Test / test_write_iothreads (push) Successful in 38s
Test / test_heal_pg_size_2 (push) Successful in 2m18s
Test / test_heal_local_read (push) Successful in 2m18s
Test / test_heal_ec (push) Successful in 2m17s
Test / test_heal_antietcd (push) Successful in 2m18s
Test / test_heal_csum_32k_dmj (push) Successful in 2m18s
Test / test_heal_csum_32k_dj (push) Successful in 2m19s
Test / test_heal_csum_32k (push) Successful in 2m18s
Test / test_heal_csum_4k_dmj (push) Successful in 2m19s
Test / test_resize (push) Successful in 15s
Test / test_resize_auto (push) Successful in 9s
Test / test_snapshot_pool2 (push) Successful in 14s
Test / test_osd_tags (push) Successful in 8s
Test / test_enospc (push) Successful in 12s
Test / test_enospc_xor (push) Successful in 14s
Test / test_enospc_imm (push) Successful in 11s
Test / test_enospc_imm_xor (push) Successful in 12s
Test / test_scrub (push) Successful in 13s
Test / test_scrub_zero_osd_2 (push) Successful in 14s
Test / test_scrub_xor (push) Successful in 13s
Test / test_scrub_pg_size_3 (push) Successful in 13s
Test / test_scrub_pg_size_6_pg_minsize_4_osd_count_6_ec (push) Successful in 17s
Test / test_scrub_ec (push) Successful in 15s
Test / test_nfs (push) Successful in 13s
Test / test_heal_csum_4k_dj (push) Successful in 2m16s
Test / test_heal_csum_4k (push) Successful in 2m12s
Add UBLK docs
2025-08-24 16:55:58 +03:00

5.7 KiB
Raw Permalink Blame History

Документация → Использование → UBLK


Read in English

UBLK

ublk - это новый Linux-интерфейс на основе io_uring для реализации блочных устройств в пространстве пользователя, доступный, начиная с Linux 6.0.

ublk тоже копирует память (т.е. не является zero-copy), но по IOPS всё равно обгоняет и NBD, и 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

Чтобы создать локальное блочное устройство для образа, выполните команду:

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}}