1 |
commit: 04ef58d781e50b4f676789e70899e761dbdcdd0f |
2 |
Author: Brian Evans <grknight <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Feb 9 21:41:49 2018 +0000 |
4 |
Commit: Brian Evans <grknight <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Feb 9 21:41:49 2018 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/mysql-extras.git/commit/?id=04ef58d7 |
7 |
|
8 |
Add patch to enable NUMA in MariaDB 10.1 |
9 |
|
10 |
20029_all_mariadb-10.1.31-enable-numa.patch | 209 ++++++++++++++++++++++++++++ |
11 |
1 file changed, 209 insertions(+) |
12 |
|
13 |
diff --git a/20029_all_mariadb-10.1.31-enable-numa.patch b/20029_all_mariadb-10.1.31-enable-numa.patch |
14 |
new file mode 100644 |
15 |
index 0000000..41c8fa0 |
16 |
--- /dev/null |
17 |
+++ b/20029_all_mariadb-10.1.31-enable-numa.patch |
18 |
@@ -0,0 +1,209 @@ |
19 |
+Backport MariaDB 10.2 support into 10.1 |
20 |
+ |
21 |
+diff --git a/cmake/numa.cmake b/cmake/numa.cmake |
22 |
+new file mode 100644 |
23 |
+index 000000000000..d5234a5ef4f6 |
24 |
+--- /dev/null |
25 |
++++ b/cmake/numa.cmake |
26 |
+@@ -0,0 +1,43 @@ |
27 |
++MACRO (MYSQL_CHECK_NUMA) |
28 |
++ |
29 |
++ IF(CMAKE_SYSTEM_NAME MATCHES "Linux") |
30 |
++ CHECK_INCLUDE_FILES(numa.h HAVE_NUMA_H) |
31 |
++ CHECK_INCLUDE_FILES(numaif.h HAVE_NUMAIF_H) |
32 |
++ |
33 |
++ IF(HAVE_NUMA_H AND HAVE_NUMAIF_H) |
34 |
++ OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" ON) |
35 |
++ ELSE() |
36 |
++ OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" OFF) |
37 |
++ ENDIF() |
38 |
++ |
39 |
++ IF(WITH_NUMA AND HAVE_NUMA_H AND HAVE_NUMAIF_H) |
40 |
++ SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) |
41 |
++ SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} numa) |
42 |
++ CHECK_C_SOURCE_COMPILES( |
43 |
++ " |
44 |
++ #include <numa.h> |
45 |
++ #include <numaif.h> |
46 |
++ int main() |
47 |
++ { |
48 |
++ struct bitmask *all_nodes= numa_all_nodes_ptr; |
49 |
++ set_mempolicy(MPOL_DEFAULT, 0, 0); |
50 |
++ return all_nodes != NULL; |
51 |
++ }" |
52 |
++ HAVE_LIBNUMA) |
53 |
++ SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) |
54 |
++ IF(HAVE_LIBNUMA) |
55 |
++ ADD_DEFINITIONS(-DHAVE_LIBNUMA=1) |
56 |
++ SET(NUMA_LIBRARY "numa") |
57 |
++ ENDIF() |
58 |
++ ENDIF() |
59 |
++ |
60 |
++ IF(WITH_NUMA AND NOT HAVE_LIBNUMA) |
61 |
++ # Forget it in cache, abort the build. |
62 |
++ UNSET(WITH_NUMA CACHE) |
63 |
++ UNSET(NUMA_LIBRARY CACHE) |
64 |
++ MESSAGE(FATAL_ERROR "Could not find numa headers/libraries") |
65 |
++ ENDIF() |
66 |
++ ENDIF() |
67 |
++ |
68 |
++ENDMACRO() |
69 |
++ |
70 |
+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 |
71 |
+new file mode 100644 |
72 |
+index 000000000000..c1c2bb26b8ac |
73 |
+--- /dev/null |
74 |
++++ b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt |
75 |
+@@ -0,0 +1,1 @@ |
76 |
++--loose-innodb_numa_interleave=1 |
77 |
+diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt |
78 |
+index 7e667d5ebb29..c80ef6f09937 100644 |
79 |
+--- a/storage/innobase/CMakeLists.txt |
80 |
++++ b/storage/innobase/CMakeLists.txt |
81 |
+@@ -23,12 +23,14 @@ INCLUDE(lzo) |
82 |
+ INCLUDE(lzma) |
83 |
+ INCLUDE(bzip2) |
84 |
+ INCLUDE(snappy) |
85 |
++INCLUDE(numa) |
86 |
+ |
87 |
+ MYSQL_CHECK_LZ4() |
88 |
+ MYSQL_CHECK_LZO() |
89 |
+ MYSQL_CHECK_LZMA() |
90 |
+ MYSQL_CHECK_BZIP2() |
91 |
+ MYSQL_CHECK_SNAPPY() |
92 |
++MYSQL_CHECK_NUMA() |
93 |
+ |
94 |
+ IF(CMAKE_CROSSCOMPILING) |
95 |
+ # Use CHECK_C_SOURCE_COMPILES instead of CHECK_C_SOURCE_RUNS when |
96 |
+@@ -63,5 +63,2 @@ |
97 |
+ ENDIF() |
98 |
+ ADD_DEFINITIONS("-DUNIV_LINUX -D_GNU_SOURCE=1") |
99 |
+- IF(HAVE_LIBNUMA) |
100 |
+- LINK_LIBRARIES(numa) |
101 |
+- ENDIF() |
102 |
+@@ -517,6 +517,10 @@ |
103 |
+ MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE |
104 |
+ MODULE_ONLY |
105 |
+ MODULE_OUTPUT_NAME ha_innodb |
106 |
+- LINK_LIBRARIES ${ZLIB_LIBRARY} ${LIBSYSTEMD} ${LINKER_SCRIPT}) |
107 |
++ LINK_LIBRARIES |
108 |
++ ${ZLIB_LIBRARY} |
109 |
++ ${NUMA_LIBRARY} |
110 |
++ ${LIBSYSTEMD} |
111 |
++ ${LINKER_SCRIPT}) |
112 |
+ |
113 |
+ ADD_DEPENDENCIES(innobase GenError) |
114 |
+diff --git a/storage/xtradb/CMakeLists.txt b/storage/xtradb/CMakeLists.txt |
115 |
+index 7d2a3fad56dc..51e24b3cd8a2 100644 |
116 |
+--- a/storage/xtradb/CMakeLists.txt |
117 |
++++ b/storage/xtradb/CMakeLists.txt |
118 |
+@@ -23,12 +23,14 @@ INCLUDE(lzo) |
119 |
+ INCLUDE(lzma) |
120 |
+ INCLUDE(bzip2) |
121 |
+ INCLUDE(snappy) |
122 |
++INCLUDE(numa) |
123 |
+ |
124 |
+ MYSQL_CHECK_LZ4() |
125 |
+ MYSQL_CHECK_LZO() |
126 |
+ MYSQL_CHECK_LZMA() |
127 |
+ MYSQL_CHECK_BZIP2() |
128 |
+ MYSQL_CHECK_SNAPPY() |
129 |
++MYSQL_CHECK_NUMA() |
130 |
+ |
131 |
+ IF(CMAKE_CROSSCOMPILING) |
132 |
+ # Use CHECK_C_SOURCE_COMPILES instead of CHECK_C_SOURCE_RUNS when |
133 |
+@@ -63,5 +63,2 @@ |
134 |
+ ENDIF() |
135 |
+ ADD_DEFINITIONS("-DUNIV_LINUX -D_GNU_SOURCE=1") |
136 |
+- IF(HAVE_LIBNUMA) |
137 |
+- LINK_LIBRARIES(numa) |
138 |
+- ENDIF() |
139 |
+@@ -507,6 +507,9 @@ |
140 |
+ MYSQL_ADD_PLUGIN(xtradb ${INNOBASE_SOURCES} STORAGE_ENGINE |
141 |
+ DEFAULT RECOMPILE_FOR_EMBEDDED |
142 |
+- LINK_LIBRARIES ${ZLIB_LIBRARY} ${LINKER_SCRIPT}) |
143 |
++ LINK_LIBRARIES |
144 |
++ ${ZLIB_LIBRARY} |
145 |
++ ${NUMA_LIBRARY} |
146 |
++ ${LINKER_SCRIPT}) |
147 |
+ |
148 |
+ IF(TARGET xtradb AND NOT XTRADB_OK) |
149 |
+ MESSAGE(FATAL_ERROR "Percona XtraDB is not supported on this platform") |
150 |
+diff --git a/mysql-test/include/have_numa.inc b/mysql-test/include/have_numa.inc |
151 |
+new file mode 100644 |
152 |
+index 000000000000..18bca99e04d7 |
153 |
+--- /dev/null |
154 |
++++ b/mysql-test/include/have_numa.inc |
155 |
+@@ -0,0 +1,9 @@ |
156 |
++let $numa_support = `SELECT COUNT(VARIABLE_VALUE) = 1 FROM |
157 |
++ INFORMATION_SCHEMA.GLOBAL_VARIABLES |
158 |
++ WHERE VARIABLE_NAME='innodb_numa_interleave'`; |
159 |
++ |
160 |
++if ( $numa_support == 0 ) |
161 |
++{ |
162 |
++ --skip Test requires: Binary must be built with NUMA support. |
163 |
++} |
164 |
++ |
165 |
+diff --git a/mysql-test/suite/sys_vars/r/innodb_numa_interleave_basic.result b/mysql-test/suite/sys_vars/r/innodb_numa_interleave_basic.result |
166 |
+new file mode 100644 |
167 |
+index 000000000000..21ed16c1dab8 |
168 |
+--- /dev/null |
169 |
++++ b/mysql-test/suite/sys_vars/r/innodb_numa_interleave_basic.result |
170 |
+@@ -0,0 +1,11 @@ |
171 |
++call mtr.add_suppression("InnoDB: Failed to set NUMA memory policy"); |
172 |
++SELECT @@GLOBAL.innodb_numa_interleave; |
173 |
++@@GLOBAL.innodb_numa_interleave |
174 |
++1 |
175 |
++SET @@GLOBAL.innodb_numa_interleave=off; |
176 |
++ERROR HY000: Variable 'innodb_numa_interleave' is a read only variable |
177 |
++SELECT @@GLOBAL.innodb_numa_interleave; |
178 |
++@@GLOBAL.innodb_numa_interleave |
179 |
++1 |
180 |
++SELECT @@SESSION.innodb_numa_interleave; |
181 |
++ERROR HY000: Variable 'innodb_numa_interleave' is a GLOBAL variable |
182 |
+diff --git a/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic.test b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic.test |
183 |
+new file mode 100644 |
184 |
+index 000000000000..518b5ebba177 |
185 |
+--- /dev/null |
186 |
++++ b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic.test |
187 |
+@@ -0,0 +1,15 @@ |
188 |
++--source include/have_innodb.inc |
189 |
++--source include/have_numa.inc |
190 |
++ |
191 |
++call mtr.add_suppression("InnoDB: Failed to set NUMA memory policy"); |
192 |
++ |
193 |
++SELECT @@GLOBAL.innodb_numa_interleave; |
194 |
++ |
195 |
++--error ER_INCORRECT_GLOBAL_LOCAL_VAR |
196 |
++SET @@GLOBAL.innodb_numa_interleave=off; |
197 |
++ |
198 |
++SELECT @@GLOBAL.innodb_numa_interleave; |
199 |
++ |
200 |
++--error ER_INCORRECT_GLOBAL_LOCAL_VAR |
201 |
++SELECT @@SESSION.innodb_numa_interleave; |
202 |
++ |
203 |
+diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result |
204 |
+index 87e000faf025..ad6dcc1bb643 100644 |
205 |
+--- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result |
206 |
++++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result |
207 |
+@@ -2,6 +2,7 @@ select * from information_schema.system_variables |
208 |
+ where variable_name like 'innodb%' and |
209 |
+ variable_name not in ( |
210 |
+ 'innodb_disallow_writes', # only available WITH_WSREP |
211 |
++'innodb_numa_interleave', # only available WITH_NUMA |
212 |
+ 'innodb_sched_priority_cleaner', # linux only |
213 |
+ 'innodb_use_native_aio') # default value depends on OS |
214 |
+ order by variable_name; |
215 |
+diff --git a/mysql-test/suite/sys_vars/t/sysvars_innodb.test b/mysql-test/suite/sys_vars/t/sysvars_innodb.test |
216 |
+index bd8442b6a443..38f248cb6113 100644 |
217 |
+--- a/mysql-test/suite/sys_vars/t/sysvars_innodb.test |
218 |
++++ b/mysql-test/suite/sys_vars/t/sysvars_innodb.test |
219 |
+@@ -9,6 +9,7 @@ select * from information_schema.system_variables |
220 |
+ where variable_name like 'innodb%' and |
221 |
+ variable_name not in ( |
222 |
+ 'innodb_disallow_writes', # only available WITH_WSREP |
223 |
++ 'innodb_numa_interleave', # only available WITH_NUMA |
224 |
+ 'innodb_sched_priority_cleaner', # linux only |
225 |
+ 'innodb_use_native_aio') # default value depends on OS |
226 |
+ order by variable_name; |
227 |
+ |