# COPYRIGHT (c) 2016 Obsidian Research Corporation. See COPYING file
# Run cmake as:
# mkdir build
# cmake -GNinja ..
# ninja
#
# Common options passed to cmake are:
# -DIN_PLACE=1
# Configure the build to be run from the build directory, this results in something
# that is not installable.
# -DCMAKE_EXPORT_COMPILE_COMMANDS=1
# Write a compile_commands.json file for clang tooling
# -DCMAKE_BUILD_TYPE=RelWithDebInfo
# Change the optimization level, Debug disables optimization,
# Release is for packagers
# -DENABLE_VALGRIND=0 (default enabled)
# Disable valgrind notations, this has a tiny positive performance impact
# -DENABLE_RESOLVE_NEIGH=0 (default enabled)
# Do not link to libnl and do not resolve neighbours internally for Ethernet,
# and do not build iwpmd.
# -DENABLE_STATIC=1 (default disabled)
# Produce static libraries along with the usual shared libraries.
# -DVERBS_PROVIDER_DIR='' (default /usr/lib.../libibverbs)
# Use the historical search path for providers, in the standard system library.
# -DNO_COMPAT_SYMS=1 (default disabled)
# Do not generate backwards compatibility symbols in the shared
# libraries. This may is necessary if using a dynmic linker that does
# not support symbol versions, such as uclibc.
# -DIOCTL_MODE=write (default both)
# Disable new kABI ioctl() support and support only the legacy write
# path. May also be 'ioctl' to disable fallback to write.
# -DIBACM_SERVER_MODE_DEFAULT (default unix)
# Selects how clients can connect to this server:
# open) Allow incoming connections from any TCP client (internal or external).
# loop) Limit incoming connections for server_port to 127.0.0.1.
# unix) Use unix-domain sockets, hence limits service to the same machine.
# -DIBACM_ACME_PLUS_KERNEL_ONLY_DEFAULT (default 0)
# If non-zero, limit incoming requests to kernel or the ib_acme utility
# (i.e. do not serve librdmacm requests)
# -DPYTHON_EXECUTABLE
# Override automatic detection of python to use a certain
# exectuable. This can be used to force the build to use python2 on a
# system that has python3 installed. Otherwise the build automatically
# prefers python3 if available.
# -DNO_PYVERBS=1 (default, build pyverbs)
# Invoke cython to build pyverbs. Usually you will run with this option
# set
# -DENABLE_IBDIAGS_COMPAT=True (default False)
# Include obsolete scripts. These scripts are replaced by C programs with
# a different interface now.
# -DNO_MAN_PAGES=1 (default 0, build/install the man pages)
# Disable man pages. Allows rdma-core to be built and installed
# (without man pages) when neither pandoc/rst2man nor the pandoc-prebuilt
# directory are available.
if (${CMAKE_VERSION} VERSION_LESS "3.18.1")
# Centos 6 support
cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
else()
cmake_minimum_required(VERSION 3.18.1 FATAL_ERROR)
endif()
project(rdma-core C)
# CMake likes to use -rdynamic too much, they fixed it in 3.4.
if(POLICY CMP0065)
cmake_policy(SET CMP0065 NEW)
else()
# .. but we really do want to opt out.
string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}")
endif()
# Make RDMA_CHECK_C_LINKER_FLAG work better
if(POLICY CMP0056)
cmake_policy(SET CMP0056 NEW)
endif()
set(PACKAGE_NAME "RDMA")
# See Documentation/versioning.md
set(PACKAGE_VERSION "41.0")
# When this is changed the values in these files need changing too:
# debian/control
# debian/libibverbs1.symbols
set(IBVERBS_PABI_VERSION "34")
set(IBVERBS_PROVIDER_SUFFIX "-rdmav${IBVERBS_PABI_VERSION}.so")
#-------------------------
# Basic standard paths
# Override the CMAKE_INSTALL_ dirs to be under the build/ directory
if (IN_PLACE)
set(CMAKE_INSTALL_SYSCONFDIR "${PROJECT_BINARY_DIR}/etc")
set(CMAKE_INSTALL_BINDIR "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_INSTALL_SBINDIR "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}")
set(CMAKE_INSTALL_LIBDIR "lib")
set(CMAKE_INSTALL_INCLUDEDIR "include")
endif()
include(GNUInstallDirs)
# C include root
set(BUILD_INCLUDE ${PROJECT_BINARY_DIR}/include)
# Executables
set(BUILD_BIN ${PROJECT_BINARY_DIR}/bin)
# Libraries
set(BUILD_LIB ${PROJECT_BINARY_DIR}/lib)
# Static library pre-processing
set(BUILD_STATIC_LIB ${PROJECT_BINARY_DIR}/lib/statics)
# Used for IN_PLACE configuration
set(BUILD_ETC ${PROJECT_BINARY_DIR}/etc)
set(BUILD_PYTHON ${PROJECT_BINARY_DIR}/python)
set(IBDIAG_CONFIG_PATH "${CMAKE_INSTALL_FULL_SYSCONFDIR}/infiniband-diags")
set(IBDIAG_NODENAME_MAP_PATH "${CMAKE_INSTALL_FULL_SYSCONFDIR}/rdma/ib-node-name-map")
set(CMAKE_INSTALL_INITDDIR "${CMAKE_INSTALL_SYSCONFDIR}/init.d"
CACHE PATH "Location for init.d files")
set(CMAKE_INSTALL_MODPROBEDIR "${CMAKE_INSTALL_SYSCONFDIR}/modprobe.d/"
CACHE PATH "Location for modprobe.d files")
set(CMAKE_INSTALL_SYSTEMD_SERVICEDIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
CACHE PATH "Location for systemd service files")
set(CMAKE_INSTALL_SYSTEMD_BINDIR "/lib/systemd"
CACHE PATH "Location for systemd extra binaries")
set(ACM_PROVIDER_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/ibacm"
CACHE PATH "Location for ibacm provider plugin shared library files.")
# Location to find the provider plugin shared library files
set(VERBS_PROVIDER_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/libibverbs"
CACHE PATH "Location for provider plugin shared library files. If set to empty the system search path is used.")
# Allow the 'run' dir to be configurable, this historically has been /var/run, but
# some systems now use /run/
set(CMAKE_INSTALL_RUNDIR "var/run"
CACHE PATH "Location for runtime information, typically /var/run, or /run")
if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_RUNDIR})
set(CMAKE_INSTALL_FULL_RUNDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR}")
else()
set(CMAKE_INSTALL_FULL_RUNDIR "${CMAKE_INSTALL_RUNDIR}")
endif()
# Allow the udev rules.d dir to be configurable, this has historically been
# /lib/udev/rules.d/, but some systems now prefix /usr/
set(CMAKE_INSTALL_UDEV_RULESDIR "lib/udev/rules.d"
CACHE PATH "Location for system udev rules, typically /lib/udev/rules.d or /usr/lib/udev/rules.d")
if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_UDEV_RULESDIR})
set(CMAKE_INSTALL_FULL_UDEV_RULESDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_UDEV_RULESDIR}")
else()
set(CMAKE_INSTALL_FULL_UDEV_RULESDIR "${CMAKE_INSTALL_UDEV_RULESDIR}")
endif()
# Allow the perl library dir to be configurable
set(CMAKE_INSTALL_PERLDIR "share/perl5"
CACHE PATH "Location for system perl library, typically /usr/share/perl5")
if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_PERLDIR})
set(CMAKE_INSTALL_FULL_PERLDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_PERLDIR}")
else()
set(CMAKE_INSTALL_FULL_PERLDIR "${CMAKE_INSTALL_PERLDIR}")
endif()
# Location to place provider .driver files
if (IN_PLACE)
set(CONFIG_DIR "${BUILD_ETC}/libibverbs.d")
set(VERBS_PROVIDER_DIR "${BUILD_LIB}")
set(ACM_PROVIDER_DIR "${BUILD_LIB}/ibacm")
else()
set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/libibverbs.d")
endif()
set(DISTRO_FLAVOUR "None" CACHE
STRING "Flavour of distribution to install for. This primarily impacts the init.d scripts installed.")
#-------------------------
# Load CMake components
set(BUILDLIB "${PROJECT_SOURCE_DIR}/buildlib")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${BUILDLIB}")
include(CMakeParseArguments)
include(CheckCCompilerFlag)
include(CheckIncludeFile)
include(CheckTypeSize)
include(RDMA_EnableCStd)
include(RDMA_Sparse)
include(RDMA_BuildType)
include(RDMA_DoFixup)
include(publish_headers)
include(rdma_functions)
include(pyverbs_functions)
if (NO_MAN_PAGES)
# define empty stub functions to omit man page processing
function(rdma_man_pages)
endfunction()
function(rdma_alias_man_pages)
endfunction()
else()
include(rdma_man)
endif()
if (NOT DEFINED ENABLE_STATIC)
set(ENABLE_STATIC "OFF" CACHE BOOL "Produce static linking l
RDMA-CORE依赖库
需积分: 0 129 浏览量
更新于2024-06-12
收藏 1.79MB GZ 举报
**RDMA-CORE依赖库详解**
RDMA-CORE是一个核心库,它为InfiniBand Verbs(IBverbs)提供支持,这是一种用于实现Remote Direct Memory Access(远程直接内存访问)的技术。RDMA允许网络上的两个节点之间直接交换数据,而无需经过操作系统内核的介入,从而显著提升了I/O性能和效率。
### RDMA技术简介
远程直接内存访问(RDMA)是一种高级网络通信技术,它允许两个计算节点之间的数据传输直接在它们的内存之间进行,无需CPU的干预或操作系统上下文切换。这种技术减少了CPU负载,提高了带宽利用率,并降低了延迟,特别适用于大数据、高性能计算(HPC)、云计算和存储领域。
### IBverbs API
InfiniBand Verbs(IBverbs)是RDMA技术的编程接口,它为应用程序提供了一种直接控制InfiniBand硬件的方式。通过IBverbs,开发者可以编写出高效、低延迟的网络应用。RDMA-CORE库就是围绕这个API构建的,它包含了管理和操作RDMA设备所需的全部功能。
### RDMA-CORE库的功能
1. **设备管理**:RDMA-CORE库负责枚举和管理系统中的RDMA设备,包括InfiniBand、RoCE(RDMA over Converged Ethernet)等。
2. **资源分配**:它提供了分配和释放RDMA资源(如Completion Queue、Work Request Queue等)的接口。
3. **网络操作**:库包含用于建立和管理RDMA连接、发送和接收数据的函数。
4. **错误处理**:当发生RDMA相关错误时,RDMA-CORE能提供有效的故障检测和恢复机制。
5. **兼容性**:RDMA-CORE支持多种RDMA协议和硬件,保证了跨平台的兼容性。
### rdma-core-41.0版本
rdma-core-41.0是RDMA-CORE的一个特定版本,它可能包含了一些新的特性和改进。具体更新内容通常包括:
- **性能优化**:新版本可能会提高RDMA操作的速度和效率。
- **稳定性增强**:修复已知问题,提升系统的稳定性和可靠性。
- **兼容性更新**:支持更多的硬件设备或RDMA协议版本。
- **API改进**:可能对IBverbs API进行了调整,以简化编程或增加新功能。
- **安全修复**:修补任何潜在的安全漏洞,保障系统安全。
为了充分利用rdma-core-41.0,开发者需要了解其提供的新特性,查阅官方文档,了解如何在自己的应用程序中利用这些改进。
### 应用场景
RDMA-CORE库广泛应用于高性能计算、数据库、分布式存储、网络文件系统(如NFS、GlusterFS)、消息传递接口(MPI)等领域。例如,在Hadoop和Spark等大数据处理框架中,RDMA可以显著提升数据传输速度,提高整体性能。
### 结论
RDMA-CORE库是开发RDMA应用的基础,它提供了直接访问远程内存的能力,大大提升了网络通信效率。对于需要高效数据传输和低延迟的应用来说,理解并掌握RDMA-CORE的使用至关重要。随着技术的发展,RDMA-CORE的持续更新将不断推动高性能网络技术的进步。
leotyrael
- 粉丝: 0
- 资源: 14
最新资源
- 基于java+springboot+mysql+微信小程序的学生实习与就业管理系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的云匹面粉直供小程序 源码+数据库+论文(高分毕业设计).rar
- 基于java+springboot+mysql+微信小程序的在线选课系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的运动健康小程序 源码+数据库+论文(高分毕业设计).zip
- T113平台Linux开发环境搭建及SDK测试Demo详解
- (178039800)AP3010DN-V2-V200R010C00SPCf01刷机包
- 基于java+springboot+mysql+微信小程序的在线学习系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的展柜设计公司平面布置小程序 源码+数据库+论文(高分毕业设计).zip
- (178729196)pytorch人脸表情识别数据集(2w8训练集+7k测试集)
- (179478644)单相全桥逆变电路MATLAB仿真,原理图设计,单相全桥逆变器设计资料,ti的参考,可用做光伏并网逆变器,400V输入,220V输
- curl-8.11.1-1.ky10.x86-64.rpm、libcurl-8.11.1-1.ky10.x86-64.rpm
- (179717850)基于matlab的齿轮-轴-轴承系统的含间隙非线性动力学模型,根据牛顿第二定律,建立齿轮系统啮合的非线性动力学方程,同时也主要应
- (180339652)开源基于51单片机的多功能智能闹钟设计
- (18767822)学生信息管理文档
- 打火机部件超声波焊接组装生产线proe4.0可编辑全套技术资料100%好用.zip
- 基于java+ssm+mysql+微信小程序的高校课堂教学管理系统 源码+数据库+论文(高分毕业设计)