diff options
author | Daniel Black <daniel.black@au.ibm.com> | 2016-09-20 10:05:10 +1000 |
---|---|---|
committer | Daniel Black <daniel.black@au.ibm.com> | 2016-09-23 08:33:38 +1000 |
commit | 8103f6f2235b58ca09f75efe24d2731895387152 (patch) | |
tree | 8fa176d600c9241b1c9964f7d0059b6df7620f3c /cmake | |
parent | 26e3117ca9f02cf3dcb424b82e93be8709cc5e91 (diff) | |
download | mariadb-git-8103f6f2235b58ca09f75efe24d2731895387152.tar.gz |
MDEV-10829: Enable Innodb NUMA interleave
Code was already existing within the innobase/xtradb storage engines
however without this cmake code it was never enabled.
num.cmake heavily based off work by Annamalai Gurusami <annamalai.gurusami@oracle.com>
Signed-off-by: Daniel Black <daniel.black@au.ibm.com>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/numa.cmake | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/cmake/numa.cmake b/cmake/numa.cmake new file mode 100644 index 00000000000..d5234a5ef4f --- /dev/null +++ b/cmake/numa.cmake @@ -0,0 +1,38 @@ +MACRO (MYSQL_CHECK_NUMA) + + CHECK_INCLUDE_FILES(numa.h HAVE_NUMA_H) + CHECK_INCLUDE_FILES(numaif.h HAVE_NUMAIF_H) + + IF(HAVE_NUMA_H AND HAVE_NUMAIF_H) + OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" ON) + ELSE() + OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" OFF) + ENDIF() + + IF(WITH_NUMA AND HAVE_NUMA_H AND HAVE_NUMAIF_H) + SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} numa) + CHECK_C_SOURCE_COMPILES( + " + #include <numa.h> + #include <numaif.h> + int main() + { + struct bitmask *all_nodes= numa_all_nodes_ptr; + set_mempolicy(MPOL_DEFAULT, 0, 0); + return all_nodes != NULL; + }" + HAVE_LIBNUMA) + SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) + ELSE() + SET(HAVE_LIBNUMA 0) + ENDIF() + + IF(WITH_NUMA AND NOT HAVE_LIBNUMA) + # Forget it in cache, abort the build. + UNSET(WITH_NUMA CACHE) + MESSAGE(FATAL_ERROR "Could not find numa headers/libraries") + ENDIF() + +ENDMACRO() + |