УНИТе

Портал > Документация > Компилиране, инсталиране и използване на Libfabric под CentOS 7 и 8

Компилиране, инсталиране и използване на Libfabric под CentOS 7 и 8

Съдържание:

  1. Предварителна информация
  2. Изтегляне на изходния код и компилирането му с GNU Compilers
  3. Динамично свързване на компилираната библиотека към C/C++ и Fortran приложения

 

1. Предварителна информация

Libfabric е библиотека за обмяна на данни между приложенията в дистрибутирана изчислителна инфраструктура. Целта на този документ е да предложи рецепта за изграждане на версия на последната версия на библиотеката за CentOS 7 и 8, с използването на GNU Compilers.

Този документ не включва описание на процедура по компилирането на програмния код на библиотеката с Intel Compilers. Отбележете, че ако имате съвремена, актуална и цялостна инсталация на пакета Intel Compilers с MPI поддръжка, вие ще имате библиотеката libfabric и тя ще се намира във файла:

/usr/unite/intel/compilers_and_libraries/linux/mpi/intel64/libfabric/lib/libfabric.so.1

(възможно е във вашия случай инсталационната директория на Intel Compilers да не е /usr/unite, а например /opt/intel). В този случай отделните библиотеки-доставчици на протоколи за връзка ще се намират в директория:

/usr/unite/intel/compilers_and_libraries/linux/mpi/intel64/libfabric/lib/prov/

Най-вероятно там ще намерите файловете с библиотеки:

libpsmx2-fi.so
librxm-fi.so
libsockets-fi.so
libtcp-fi.so
libverbs-fi.so

Също така, към настоящия момент, не може да използвате PGI Compilers за да компилирате кода на библиотеката!

ВНИМАНИЕ! Към настоящия момент в CentOS 8 не се поддържат интерфейсните протоколи PSM и PSM2. Това е поради това, че поддръжката на тези протоколи в ядрото е прекратена!

Отбележете, че поддръжката на PSM2, например, изисква модула ib_qib, който е наличен в ядрото, на база на което работи CentOS 7, но той не е наличен за ядрото на CentOS 8.

 

2. Изтегляне на изходния код и компилирането му с GNU Compilers

За да може да създадете стабилно функционираща алтернативна libfabric библиотека под CentOS 7, се изисква да компилирате кода чрез GCC 8.3.1. Как да инсталирате тази версия е описано в документа "Инсталиране и използване на алтернативни версии на GCC компилаторите под CentOS 7". Подразбираща се версия на GCC в CentOS 8 е 8.2.1 е тя е достатъчно добра за компилирането на кода под тази дистрибуция. Следните пакети трябва да бъдат инсталирани преди да започнете с изпълнение на процедурите, описани по-долу:

  • CentOS 7

    $ sudo yum install gcc autoconf glibc-headers kernel-headers rdma-core-devel ibacm libibumad libpsm2-devel infinipath-psm-devel 
  • CentOS 8

    $ sudo dnf install gcc autoconf glibc-headers kernel-headers rdma-core-devel librdmacm libibverbs infiniband-diags-devel

За да изтеглите поседната стабилна версия на изходния програмен код, посетете хранилището на проекта:

https://github.com/ofiwg/libfabric/releases

Връзката за изтегляне на архива в изходния код е в текста на страницата. За примерите по-долу се предполага, че наличната към момента версия на библиотеката е 1.9.0 (по-времето, по което вие изпълнявате тези инструкции, версията може да е по-висока от 1.9.0):

$ wget https://github.com/ofiwg/libfabric/archive/v1.9.0.tar.gz -O libfabric-1.9.0.tar.gz

Създайте директория, в която ще се извършва процеса на разпакетиране, конфигуриране и компилиране:

$ mkdir ~/build

Разпакетирайте в нея файла с архива:

$ tar xvf libfabric-1.9.0.tar.gz -C ~/build

влезте в новосъздадената при разпакетирането директория:

$ cd ~/build/libfabric-1.9.0

и в нея изпълнете:

$ ./autogen.sh

за да създадете configure скрипта. След това (пак там) стартирайте процеса на конфигуриране и компилиране:

  • CentOS 7:

    $ scl enable devtoolset-8 bash
    $ CC=gcc ./configure --prefix=/usr/unite/libfabric-1.9.0-gcc --enable-shm=yes --enable-perf=yes --enable-rstream=yes --enable-rxd=yes --enable-mrail=yes --enable-rxm=yes --enable-tcp=yes --enable-udp=yes --enable-efa=yes --enable-verbs=yes --enable-sockets=yes --enable-psm=yes --enable-psm2=yes
    $ make -j6
    $ make test
  • CentOS 8:

    $ CC=gcc ./configure --prefix=/usr/unite/libfabric-1.9.0-gcc --enable-shm=yes --enable-perf=yes --enable-rstream=yes --enable-rxd=yes --enable-mrail=yes --enable-rxm=yes --enable-tcp=yes --enable-udp=yes --enable-efa=yes --enable-verbs=yes --enable-sockets=yes --enable-psm=no --enable-psm2=no
    $ make -j6
    $ make test

Отбележете, че тестовете трябва да бъдат успешни (тестовете се активират от make test в процедурите по-горе), за да може да се премине към инсталирането на продукта. Изходът от тестовете, изведен на екрана, ще има вид подобен на следния (приемера е за CentOS 8):

provider: UDP;ofi_rxd
    fabric: UDP-IP
    domain: udp
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
provider: UDP;ofi_rxd
    fabric: UDP-IP
    domain: udp
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
provider: UDP;ofi_rxd
    fabric: UDP-IP
    domain: udp
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
provider: UDP;ofi_rxd
    fabric: UDP-IP
    domain: udp
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
provider: UDP;ofi_rxd
    fabric: UDP-IP
    domain: udp
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
provider: shm
    fabric: shm
    domain: shm
    version: 1.1
    type: FI_EP_RDM
    protocol: FI_PROTO_SHM
provider: UDP
    fabric: UDP-IP
    domain: udp
    version: 1.1
    type: FI_EP_DGRAM
    protocol: FI_PROTO_UDP
provider: UDP
    fabric: UDP-IP
    domain: udp
    version: 1.1
    type: FI_EP_DGRAM
    protocol: FI_PROTO_UDP
provider: UDP
    fabric: UDP-IP
    domain: udp
    version: 1.1
    type: FI_EP_DGRAM
    protocol: FI_PROTO_UDP
provider: UDP
    fabric: UDP-IP
    domain: udp
    version: 1.1
    type: FI_EP_DGRAM
    protocol: FI_PROTO_UDP
provider: UDP
    fabric: UDP-IP
    domain: udp
    version: 1.1
    type: FI_EP_DGRAM
    protocol: FI_PROTO_UDP
provider: tcp
    fabric: TCP-IP
    domain: tcp
    version: 1.0
    type: FI_EP_MSG
    protocol: FI_PROTO_SOCK_TCP
provider: tcp
    fabric: TCP-IP
    domain: tcp
    version: 1.0
    type: FI_EP_MSG
    protocol: FI_PROTO_SOCK_TCP
provider: tcp
    fabric: TCP-IP
    domain: tcp
    version: 1.0
    type: FI_EP_MSG
    protocol: FI_PROTO_SOCK_TCP
provider: tcp
    fabric: TCP-IP
    domain: tcp
    version: 1.0
    type: FI_EP_MSG
    protocol: FI_PROTO_SOCK_TCP
provider: tcp
    fabric: TCP-IP
    domain: tcp
    version: 1.0
    type: FI_EP_MSG
    protocol: FI_PROTO_SOCK_TCP

Пристъпете към инсталиране:

$ make install

 

3. Динамично свързване на компилираната библиотека към C/C++ приложения

За да може даден код да бъде компилиран спрямо динамичната версия на libfabric библиотеката (компилирана по процедурата показана по-горе), освен описание на използваните от нея функции в кода, в процеса на конфигурацията или компилацията трява да бъат посочени пътищата до хедър файловете и директорията, която съдържа библиотеката (и нейното име):

$ CC=gcc CXX=g++ ./configure ... CGLAGS="-I/usr/unite/libfabric-1.9.0-gcc/include -I/usr/unite/libfabric-1.9.0-gcc/include/rdma" LFLAGS="-L/usr/unite/libfabric-1.9.0-gcc/lib -lfabric"

След успешна компилация спрямо динамичната версия на библиотеката, изпълнимият код трябва да може да зарежда libfabric библиотеката при стартиране. За целта, в текущата сесия на bash, в която ще става стартирането, трябва да се зареди пътя до тях:

$ export LD_LIBRARY_PATH=/usr/unite/libfabric-1.9.0-gcc/lib:$LD_LIBRARY_PATH

Това зареждане може да бъде направено инцидентно (примера по-горе) или да стане част от постоянните настройки за bash сесията (те са обикновено във файла ~/.bashrc).

Когато се използва статичната версия на libfabric библиотеката, самия файл с библиотеката се задава в списъка с бинарни обекти, на база на които компилатора създава изпълнимия код. Например:

$ gcc -I/usr/unite/libfabric-1.9.0-gcc/include -I/usr/unite/libfabric-1.9.0-gcc/include/rdma -o test test.c file1.o file2.o /usr/unite/libfabric-1.9.0-gcc/lib/libfabric.a

 


Последна актуализация: 8 декември 2019

2019 УНИТе, Веселин Колев