Работа с системой хранения данных DAOS
Создание DAOS-пула
Создать DAOS-пул можно на любом узле системы хранения DAOS. Для этого необходимо
под учётной записью root
выполнить команду следующего формата:
dmg -l <leader-host> -i pool create -s NumberGB -n NumberTB
Например, команда создания пула может выглядеть следующим образом:
[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 агентом), состоит из нескольких этапов.
- Необходимо задать с помощью переменных окружения ОС интерфейс 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"
- Необходимо сгенерировать и сохранить в переменной окружения ОС dcont UUID для создаваемого контейнера:
root@sky08 ~]# uuidgen
0e75d729-2164-493e-ba9e-2942df394bca
[root@sky08 ~]# export dcont=0e75d729-2164-493e-ba9e-2942df394bca
- Используя сохраненные переменные окружения и тип контейнера 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
- Просмотреть информацию о созданном контейнере можно командой:
[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
Использование этой библиотеки позволяет получить десятикратный прирост пропускной способности на запись.