summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--cmake/numa.cmake38
-rw-r--r--config.h.cmake1
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt1
-rw-r--r--storage/innobase/CMakeLists.txt12
-rw-r--r--storage/xtradb/CMakeLists.txt12
6 files changed, 63 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a04181fd6ea..48742995722 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -154,6 +154,7 @@ INCLUDE(install_macros)
INCLUDE(systemd)
INCLUDE(mysql_add_executable)
INCLUDE(crc32-vpmsum)
+INCLUDE(numa)
# Handle options
OPTION(DISABLE_SHARED
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()
+
diff --git a/config.h.cmake b/config.h.cmake
index 00aa03483ee..08b0422a520 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -106,6 +106,7 @@
#cmakedefine HAVE_LIBWRAP 1
#cmakedefine HAVE_SYSTEMD 1
#cmakedefine HAVE_CRC32_VPMSUM 1
+#cmakedefine HAVE_LIBNUMA 1
/* Does "struct timespec" have a "sec" and "nsec" field? */
#cmakedefine HAVE_TIMESPEC_TS_SEC 1
diff --git a/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt
new file mode 100644
index 00000000000..c1c2bb26b8a
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt
@@ -0,0 +1 @@
+--loose-innodb_numa_interleave=1
diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt
index 7e667d5ebb2..c80ef6f0993 100644
--- a/storage/innobase/CMakeLists.txt
+++ b/storage/innobase/CMakeLists.txt
@@ -29,6 +29,7 @@ MYSQL_CHECK_LZO()
MYSQL_CHECK_LZMA()
MYSQL_CHECK_BZIP2()
MYSQL_CHECK_SNAPPY()
+MYSQL_CHECK_NUMA()
IF(CMAKE_CROSSCOMPILING)
# Use CHECK_C_SOURCE_COMPILES instead of CHECK_C_SOURCE_RUNS when
@@ -506,8 +507,17 @@ ELSE()
SET(LINKER_SCRIPT)
ENDIF()
+UNSET(NUMA_LIBRARY)
+IF(HAVE_LIBNUMA)
+ SET(NUMA_LIBRARY "numa")
+ENDIF()
+
MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE
MODULE_ONLY
MODULE_OUTPUT_NAME ha_innodb
- LINK_LIBRARIES ${ZLIB_LIBRARY} ${CRC32_VPMSUM_LIBRARY} ${LINKER_SCRIPT})
+ LINK_LIBRARIES
+ ${ZLIB_LIBRARY}
+ ${CRC32_VPMSUM_LIBRARY}
+ ${NUMA_LIBRARY}
+ ${LINKER_SCRIPT})
diff --git a/storage/xtradb/CMakeLists.txt b/storage/xtradb/CMakeLists.txt
index 7d2a3fad56d..51e24b3cd8a 100644
--- a/storage/xtradb/CMakeLists.txt
+++ b/storage/xtradb/CMakeLists.txt
@@ -29,6 +29,7 @@ MYSQL_CHECK_LZO()
MYSQL_CHECK_LZMA()
MYSQL_CHECK_BZIP2()
MYSQL_CHECK_SNAPPY()
+MYSQL_CHECK_NUMA()
IF(CMAKE_CROSSCOMPILING)
# Use CHECK_C_SOURCE_COMPILES instead of CHECK_C_SOURCE_RUNS when
@@ -496,9 +497,18 @@ SET(INNOBASE_SOURCES
ut/ut0wqueue.cc
ut/ut0timer.cc)
+UNSET(NUMA_LIBRARY)
+IF(HAVE_LIBNUMA)
+ SET(NUMA_LIBRARY "numa")
+ENDIF()
+
MYSQL_ADD_PLUGIN(xtradb ${INNOBASE_SOURCES} STORAGE_ENGINE
DEFAULT RECOMPILE_FOR_EMBEDDED
- LINK_LIBRARIES ${ZLIB_LIBRARY} ${CRC32_VPMSUM_LIBRARY} ${LINKER_SCRIPT})
+ LINK_LIBRARIES
+ ${ZLIB_LIBRARY}
+ ${CRC32_VPMSUM_LIBRARY}
+ ${NUMA_LIBRARY}
+ ${LINKER_SCRIPT})
IF(TARGET xtradb AND NOT XTRADB_OK)
MESSAGE(FATAL_ERROR "Percona XtraDB is not supported on this platform")