Skip to content

Работа с системой хранения данных DAOS

Создание DAOS-пула

Создать DAOS-пул можно на любом узле системы хранения DAOS. Для этого необходимо под учётной записью root выполнить команду следующего формата:

dmg -l <leader-host> -i pool create -s NumberGB -n NumberTB
где leader-host - название узла доступа к системе хранения DAOS, флаг -s указывает, что при создании пула необходимо зарезервировать NumberGB гигабайт памяти на PMEM-устройствах каждого DAOS инстанса пула, а флаг -n указывает, что необходимо зарезервировать NumberTB терабайт памяти на NVMe-дисках каждого DAOS инстанса пула.

Например, команда создания пула может выглядеть следующим образом:

[root@sky08 ~]# dmg -l apache512 -i pool create -s 100GB -n 1TB

apache512:10001: connected
Pool-create command SUCCEEDED: UUID: 47d00a92-4682-44cb-acef-ba35e7d1595f, Service replicas: 0

Сохраните UUID пула в переменной окружения dpool как для дальнейших непосредственных операций с пулом, так и для организации доступа пользовательских приложений к данным, хранящимся в пуле, которое осуществляется посредством указания UUID пула:

[root@sky08 ~]# export dpool=47d00a92-4682-44cb-acef-ba35e7d1595f ; export $svcl=0

Переменная svcl (service list) соответствует выводу Service replicas.

Просмотр текущих пулов DAOS

Просмотреть список текущих пулов DAOS можно с помощью dmg, утилиты управления системой хранения DAOS, указав при этом название узла доступа к системе хранения DAOS. Например, для просмотра пулов узла apache512:

[root@sky08 ~]# dmg -l apache512 -i pool list

apache512:10001: connected
Pool UUID                            Svc Replicas
---------                            ------------
47d00a92-4682-44cb-acef-ba35e7d1595f 0

Создание DAOS-контейнера

Процесс создания DAOS-контайнера, который выполняется на на клиентском узле (узле с запущенным DAOS агентом), состоит из нескольких этапов.

  1. Необходимо задать с помощью переменных окружения ОС интерфейс OFI_INTERFACE, параметр сети CRT_TIMEOUT, физический адрес провайдера сети CRT_PHY_ADDR_STR (и домен OFI_DOMAIN в случаи Infiniband сетей):
# for Infiniband
[root@sky08 ~]# export OFI_INTERFACE="ib0"; export OFI_DOMAIN=mlx5_0; export CRT_TIMEOUT=120; export CRT_PHY_ADDR_STR="ofi+verbs;ofi_rxm"

# for IPoverIB
[root@sky08 ~]# export OFI_INTERFACE="ib0"; export CRT_TIMEOUT=120; export CRT_PHY_ADDR_STR="ofi+sockets" 
  1. Необходимо сгенерировать и сохранить в переменной окружения ОС dcont UUID для создаваемого контейнера:
root@sky08 ~]# uuidgen

0e75d729-2164-493e-ba9e-2942df394bca

[root@sky08 ~]# export dcont=0e75d729-2164-493e-ba9e-2942df394bca
  1. Используя сохраненные переменные окружения и тип контейнера POSIX (рекомендуемое значение), контейнер создается командой:

[root@sky08 ~]# daos cont create --pool=$dpool --svc=$svcl --cont=$dcont --type=POSIX --path=/tmp/abrekhov

Successfully created container 0e75d729-2164-493e-ba9e-2942df394bca type POSIX
Необязательный параметр --path позволяет создать путь внутри контейнера.

  1. Просмотреть информацию о созданном контейнере можно командой:
[root@sky08 ~]# daos container query --svc=0

Pool UUID:      76a53be7-27ec-4ec6-ac50-830382e6f2d9
Container UUID: 0e75d729-2164-493e-ba9e-2942df394bca
Number of snapshots: 0
Latest Persistent Snapshot: 0
Highest Aggregated Epoch: 1600272717844904960
DAOS Unified Namespace Attributes on path /tmp/abrekhov:
Container Type: POSIX
Object Class:   SX
Chunk Size:     1048576

Просмотр текущих контейнеров.

Для просмотра списка доступных контейнеров пула $dpool необходимо выполнить следующую команду:

[root@sky08 ~]# daos pool list-cont --pool=$dpool --svc=0

Pool UUID:      76a53be7-27ec-4ec6-ac50-830382e6f2d9
Container UUID: 0e75d729-2164-493e-ba9e-2942df394bca
Number of snapshots: 0
Latest Persistent Snapshot: 0
Highest Aggregated Epoch: 1600272717844904960

Монтирование контейнера

Для монтирования контейнера $dcont пула $dpool к директории /tmp/dfuse/ необходимо выполнить следующие команды:

[root@sky08 ~]# mkdir /tmp/dfuse
[root@sky08 ~]# dfuse -m /tmp/dfuse/ -s 0 --pool $dpool --cont $dcont
[root@sky08 ~]# echo "Hello" > /tmp/dfuse/hello.txt
[root@sky08 ~]# cat /tmp/dfuse/hello.txt

Hello

Работа с файлами в контексте POSIX

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

Однако, использование нативного API интерфейса пока неудобно для большинства задач, поэтому для POSIX контейнеров предлагается использовать библиотеку Interception. Эта библиотека работает вместе с утилитой DFuse и позволяет перехватывать вызовы ввода-вывода POSIX, а также выполнять операции ввода-вывода непосредственно из контекста приложения посредством библиотеки libdaos без каких-либо изменений пользовательского приложения (см. более подробное описание).

Для использования библиотеки Interception, необходимо задать путь к ней через системную переменную окружения LD_PRELOAD:

LD_PRELOAD=/path/to/daos/install/lib/libioil.so

# or when installed from RPMs
LD_PRELOAD=/usr/lib64/libioil.so

Использование этой библиотеки позволяет получить десятикратный прирост пропускной способности на запись.