diff --git a/config.h.cmake b/config.h.cmake index 2b06257a089f18596cd2c544b751cead0a417bef..17683fd1ee30c1d3b5090adf06e9ff2d0f88ba48 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -344,6 +344,7 @@ #define SO_EXT "@CMAKE_SHARED_MODULE_SUFFIX@" +#cmakedefine GMOCK_FOUND 1 /* From libmysql/CMakeLists.txt */ #cmakedefine HAVE_UNIX_DNS_SRV @HAVE_UNIX_DNS_SRV@ diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index efc30a6accf3322a67c434ebd240eee949c69a15..b1d1baebc114542a68a9a12e36423b3bf674771f 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -308,6 +308,12 @@ INSERT INTO global_suppressions VALUES */ ("Manifest file '.*' is not read-only. For better security, please make sure that the file is read-only."), + /* + sched affinity +*/ + ("libnuma test fail."), + ("numa_available test fail."), + ("THE_LAST_SUPPRESSION"); diff --git a/mysql-test/include/query_sched_affinity_sys_var.inc b/mysql-test/include/query_sched_affinity_sys_var.inc new file mode 100644 index 0000000000000000000000000000000000000000..103271de2b1a6c89a129e8e9f1809bb61a5f5318 --- /dev/null +++ b/mysql-test/include/query_sched_affinity_sys_var.inc @@ -0,0 +1,8 @@ +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; \ No newline at end of file diff --git a/mysql-test/include/sched_affinity_manager.inc b/mysql-test/include/sched_affinity_manager.inc new file mode 100644 index 0000000000000000000000000000000000000000..0921815ee2ff28e734f3cd28d1942c601bfc6c18 --- /dev/null +++ b/mysql-test/include/sched_affinity_manager.inc @@ -0,0 +1,197 @@ +if (!$target_sched_affinity_group_number) { + --skip should specify target_sched_affinity_group_number +} + +if (!$target_sched_affinity_group_capacity) { + --skip should specify target_sched_affinity_group_capacity +} + +--let $sched_affinity_group_number = `SELECT variable_value FROM performance_schema.global_status WHERE variable_name='Sched_affinity_group_number'` +if ($sched_affinity_group_number < $target_sched_affinity_group_number) { + --skip $sched_affinity_group_number less than target_sched_affinity_group_number $target_sched_affinity_group_number +} + +--let $sched_affinity_group_capacity = `SELECT variable_value FROM performance_schema.global_status WHERE variable_name='Sched_affinity_group_capacity'` +if ($sched_affinity_group_capacity != $target_sched_affinity_group_capacity) { + --skip $sched_affinity_group_capacity not equal target_sched_affinity_group_capacity $target_sched_affinity_group_capacity +} + +--echo # default config +--source include/query_sched_affinity_sys_var.inc + +--echo # set foreground sys_var +--let $restart_parameters="restart: --sched_affinity_foreground_thread=0-3,5,6" +--source include/restart_mysqld.inc +--source include/query_sched_affinity_sys_var.inc + +--echo # set log_writer sys_var +--let $restart_parameters="restart: --sched_affinity_log_writer=4" +--source include/restart_mysqld.inc +--source include/query_sched_affinity_sys_var.inc + +--echo # set foreground sys_var and log_writer sys_var +--let $restart_parameters="restart: --sched_affinity_foreground_thread=0-3,5,6 --sched_affinity_log_writer=4" +--source include/restart_mysqld.inc +--source include/query_sched_affinity_sys_var.inc + +--echo # set foreground sys_var, log_writer sys_var and numa_aware sys_var +--let $restart_parameters="restart: --sched_affinity_foreground_thread=0-3,5,6 --sched_affinity_log_writer=4 --sched_affinity_numa_aware=ON" +--source include/restart_mysqld.inc +--source include/query_sched_affinity_sys_var.inc + +--echo # test foreground thread group +--let $group1=0,1,2 +--let $range=1 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--let $restart_parameters="restart: --sched_affinity_foreground_thread=$group1,$group2_from-$group2_to" +--source include/restart_mysqld.inc +--source include/query_sched_affinity_sys_var.inc + +--let $i=0 +--let $connection_number = 100 +while ($i<$connection_number) +{ + --connect(conn$i,localhost,root,,) + --connection default + SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + --inc $i +} + +--let $i=0 +while ($i<$connection_number) +{ + --disconnect conn$i + --connection default + SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + --inc $i +} + +--echo # test foreground thread group with numa_aware +--let $group1=0,1,2 +--let $range=1 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--let $restart_parameters="restart: --sched_affinity_foreground_thread=$group1,$group2_from-$group2_to --sched_affinity_numa_aware=ON" +--source include/restart_mysqld.inc +--source include/query_sched_affinity_sys_var.inc + +--let $i=0 +--let $connection_number = 100 +while ($i<$connection_number) +{ + --connect(conn$i,localhost,root,,) + --connection default + SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + --inc $i +} + +--let $i=0 +while ($i<$connection_number) +{ + --disconnect conn$i + --connection default + SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + --inc $i +} + +--echo # Change sched_affinity related system variables + +--let $group1=0,1,2 +--eval SET GLOBAL sched_affinity_foreground_thread='$group1'; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_foreground_thread=""; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--let $group1=0,1,2 +--let $range=1 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--eval SET GLOBAL sched_affinity_foreground_thread='$group1,$group2_from-$group2_to'; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--error ER_INVALID_CPU_STRING +--eval SET GLOBAL sched_affinity_foreground_thread='???'; + +--let $i=0 +--let $connection_number = 100 +while ($i<$connection_number) +{ + --connect(conn$i,localhost,root,,) + --connection default + --inc $i +} +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--let $range=1 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--eval SET GLOBAL sched_affinity_foreground_thread='$group2_from-$group2_to'; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--error ER_INVALID_CPU_STRING +--eval SET GLOBAL sched_affinity_foreground_thread='???'; + +--error ER_INVALID_CPU_STRING +--eval SET GLOBAL sched_affinity_foreground_thread='1-100000'; + +--eval SET GLOBAL sched_affinity_foreground_thread=''; +--eval SET GLOBAL sched_affinity_foreground_thread=''; + +--let $group1=0,1,2 +--let $range=1 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--eval SET GLOBAL sched_affinity_foreground_thread='$group1,$group2_from-$group2_to'; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--let $group1=0 +--let $range=6 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--eval SET GLOBAL sched_affinity_foreground_thread='$group1,$group2_from-$group2_to'; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--let $range=1 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--eval SET GLOBAL sched_affinity_foreground_thread='$group2_from-$group2_to'; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_foreground_thread=""; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_numa_aware=0; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_numa_aware=1; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_numa_aware=0; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--let $group1=0,1,2 +--let $range=1 +--let $group2_from=$sched_affinity_group_capacity +--expr $group2_to=$sched_affinity_group_capacity + $range +--eval SET GLOBAL sched_affinity_foreground_thread='$group1,$group2_from-$group2_to'; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_numa_aware=0; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_numa_aware=1; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--eval SET GLOBAL sched_affinity_numa_aware=0; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; + +--echo # Clean up +--let $i=0 +while ($i<$connection_number) +{ + --disconnect conn$i + --connection default + --inc $i +} \ No newline at end of file diff --git a/mysql-test/r/all_persisted_variables.result b/mysql-test/r/all_persisted_variables.result index 2d4eae332ea1efebf8c3441a90f9b44073e92efa..64b76c0607e79bd6823261d79f0a7f03916e4865 100644 --- a/mysql-test/r/all_persisted_variables.result +++ b/mysql-test/r/all_persisted_variables.result @@ -39,7 +39,7 @@ include/assert.inc [Expect 500+ variables in the table. Due to open Bugs, we are # Test SET PERSIST -include/assert.inc [Expect 412 persisted variables in the table.] +include/assert.inc [Expect 420 persisted variables in the table.] ************************************************************ * 3. Restart server, it must preserve the persisted variable @@ -47,9 +47,9 @@ include/assert.inc [Expect 412 persisted variables in the table.] ************************************************************ # restart -include/assert.inc [Expect 412 persisted variables in persisted_variables table.] -include/assert.inc [Expect 412 persisted variables shown as PERSISTED in variables_info table.] -include/assert.inc [Expect 412 persisted variables with matching peristed and global values.] +include/assert.inc [Expect 420 persisted variables in persisted_variables table.] +include/assert.inc [Expect 420 persisted variables shown as PERSISTED in variables_info table.] +include/assert.inc [Expect 420 persisted variables with matching peristed and global values.] ************************************************************ * 4. Test RESET PERSIST IF EXISTS. Verify persisted variable diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 231d543a2bf393e75aaf403a97ea0d94937af109..8585a233b312ece8b71124b487a9d83af48b3997 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -1180,6 +1180,26 @@ The following options may be given as the first argument: returning a warning. --safe-user-create Don't allow new user creation by the user who has no write privileges to the mysql.user table. + --sched-affinity-foreground-thread=name + The set of cpus which foreground threads will run on. + --sched-affinity-log-checkpointer=name + The set of cpus which log checkpointer thread will run + on. + --sched-affinity-log-flush-notifier=name + The set of cpus which log flush notifier thread will run + on. + --sched-affinity-log-flusher=name + The set of cpus which log flusher thread will run on. + --sched-affinity-log-write-notifier=name + The set of cpus which log write notifier thread will run + on. + --sched-affinity-log-writer=name + The set of cpus which log writer thread will run on. + --sched-affinity-numa-aware + Schedule threads with numa information + --sched-affinity-purge-coordinator=name + The set of cpus which purge coordinator thread will run + on. --schema-definition-cache=# The number of cached schema definitions --secondary-engine-cost-threshold[=#] @@ -1776,6 +1796,14 @@ require-secure-transport FALSE rpl-read-size 8192 rpl-stop-slave-timeout 31536000 safe-user-create FALSE +sched-affinity-foreground-thread (No default value) +sched-affinity-log-checkpointer (No default value) +sched-affinity-log-flush-notifier (No default value) +sched-affinity-log-flusher (No default value) +sched-affinity-log-write-notifier (No default value) +sched-affinity-log-writer (No default value) +sched-affinity-numa-aware FALSE +sched-affinity-purge-coordinator (No default value) schema-definition-cache 256 secondary-engine-cost-threshold 100000 select-into-buffer-size 131072 diff --git a/mysql-test/r/sched_affinity_manager.result b/mysql-test/r/sched_affinity_manager.result new file mode 100644 index 0000000000000000000000000000000000000000..12ec21732549c26643e3a7a35310462d7080e024 --- /dev/null +++ b/mysql-test/r/sched_affinity_manager.result @@ -0,0 +1,1454 @@ +# default config +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +Variable_name Value +sched_affinity_foreground_thread +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +Variable_name Value +sched_affinity_log_writer +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +Variable_name Value +sched_affinity_log_flusher +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +Variable_name Value +sched_affinity_log_write_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +Variable_name Value +sched_affinity_log_flush_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +Variable_name Value +sched_affinity_log_checkpointer +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +Variable_name Value +sched_affinity_purge_coordinator +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; +Variable_name Value +sched_affinity_numa_aware OFF +# set foreground sys_var +# restart: --sched_affinity_foreground_thread=0-3,5,6 +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +Variable_name Value +sched_affinity_foreground_thread 0-3,5,6 +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +Variable_name Value +sched_affinity_log_writer +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +Variable_name Value +sched_affinity_log_flusher +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +Variable_name Value +sched_affinity_log_write_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +Variable_name Value +sched_affinity_log_flush_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +Variable_name Value +sched_affinity_log_checkpointer +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +Variable_name Value +sched_affinity_purge_coordinator +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; +Variable_name Value +sched_affinity_numa_aware OFF +# set log_writer sys_var +# restart: --sched_affinity_log_writer=4 +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +Variable_name Value +sched_affinity_foreground_thread +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +Variable_name Value +sched_affinity_log_writer 4 +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +Variable_name Value +sched_affinity_log_flusher +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +Variable_name Value +sched_affinity_log_write_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +Variable_name Value +sched_affinity_log_flush_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +Variable_name Value +sched_affinity_log_checkpointer +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +Variable_name Value +sched_affinity_purge_coordinator +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; +Variable_name Value +sched_affinity_numa_aware OFF +# set foreground sys_var and log_writer sys_var +# restart: --sched_affinity_foreground_thread=0-3,5,6 --sched_affinity_log_writer=4 +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +Variable_name Value +sched_affinity_foreground_thread 0-3,5,6 +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +Variable_name Value +sched_affinity_log_writer 4 +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +Variable_name Value +sched_affinity_log_flusher +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +Variable_name Value +sched_affinity_log_write_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +Variable_name Value +sched_affinity_log_flush_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +Variable_name Value +sched_affinity_log_checkpointer +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +Variable_name Value +sched_affinity_purge_coordinator +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; +Variable_name Value +sched_affinity_numa_aware OFF +# set foreground sys_var, log_writer sys_var and numa_aware sys_var +# restart: --sched_affinity_foreground_thread=0-3,5,6 --sched_affinity_log_writer=4 --sched_affinity_numa_aware=ON +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +Variable_name Value +sched_affinity_foreground_thread 0-3,5,6 +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +Variable_name Value +sched_affinity_log_writer 4 +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +Variable_name Value +sched_affinity_log_flusher +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +Variable_name Value +sched_affinity_log_write_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +Variable_name Value +sched_affinity_log_flush_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +Variable_name Value +sched_affinity_log_checkpointer +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +Variable_name Value +sched_affinity_purge_coordinator +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; +Variable_name Value +sched_affinity_numa_aware ON +# test foreground thread group +# restart: --sched_affinity_foreground_thread=0,1,2,24-25 +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +Variable_name Value +sched_affinity_foreground_thread 0,1,2,24-25 +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +Variable_name Value +sched_affinity_log_writer +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +Variable_name Value +sched_affinity_log_flusher +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +Variable_name Value +sched_affinity_log_write_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +Variable_name Value +sched_affinity_log_flush_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +Variable_name Value +sched_affinity_log_checkpointer +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +Variable_name Value +sched_affinity_purge_coordinator +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; +Variable_name Value +sched_affinity_numa_aware OFF +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 2/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 3/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 4/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 5/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 6/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 7/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 8/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 9/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 10/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 11/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 12/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 13/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 14/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 15/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 16/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 17/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 18/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 19/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 20/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 21/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 22/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 23/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 24/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 25/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 26/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 27/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 28/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 29/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 30/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 31/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 32/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 33/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 34/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 35/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 36/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 37/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 38/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 39/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 40/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 41/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 42/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 43/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 44/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 45/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 46/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 47/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 48/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 49/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 50/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 51/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 52/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 53/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 54/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 55/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 56/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 57/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 58/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 59/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 60/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 61/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 62/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 63/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 64/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 65/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 66/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 67/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 68/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 69/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 70/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 71/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 72/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 73/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 74/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 75/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 76/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 77/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 78/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 79/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 80/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 81/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 82/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 83/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 84/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 85/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 86/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 87/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 88/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 89/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 90/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 91/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 92/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 93/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 94/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 95/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 96/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 97/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 98/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 99/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 100/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 101/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 100/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 99/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 98/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 97/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 96/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 95/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 94/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 93/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 92/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 91/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 90/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 89/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 88/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 87/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 86/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 85/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 84/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 83/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 82/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 81/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 80/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 79/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 78/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 77/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 76/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 75/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 74/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 73/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 72/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 71/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 70/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 69/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 68/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 67/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 66/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 65/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 64/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 63/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 62/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 61/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 60/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 59/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 58/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 57/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 56/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 55/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 54/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 53/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 52/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 51/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 50/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 49/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 48/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 47/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 46/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 45/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 44/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 43/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 42/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 41/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 40/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 39/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 38/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 37/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 36/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 35/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 34/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 33/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 32/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 31/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 30/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 29/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 28/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 27/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 26/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 25/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 24/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 23/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 22/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 21/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 20/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 19/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 18/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 17/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 16/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 15/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 14/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 13/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 12/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 11/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 10/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 9/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 8/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 7/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 6/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 5/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 4/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 3/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 2/5; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 1/5; +# test foreground thread group with numa_aware +# restart: --sched_affinity_foreground_thread=0,1,2,24-25 --sched_affinity_numa_aware=ON +SHOW VARIABLES LIKE 'sched_affinity_foreground_thread'; +Variable_name Value +sched_affinity_foreground_thread 0,1,2,24-25 +SHOW VARIABLES LIKE 'sched_affinity_log_writer'; +Variable_name Value +sched_affinity_log_writer +SHOW VARIABLES LIKE 'sched_affinity_log_flusher'; +Variable_name Value +sched_affinity_log_flusher +SHOW VARIABLES LIKE 'sched_affinity_log_write_notifier'; +Variable_name Value +sched_affinity_log_write_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_flush_notifier'; +Variable_name Value +sched_affinity_log_flush_notifier +SHOW VARIABLES LIKE 'sched_affinity_log_checkpointer'; +Variable_name Value +sched_affinity_log_checkpointer +SHOW VARIABLES LIKE 'sched_affinity_purge_coordinator'; +Variable_name Value +sched_affinity_purge_coordinator +SHOW VARIABLES LIKE 'sched_affinity_numa_aware'; +Variable_name Value +sched_affinity_numa_aware ON +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 1/3; 1/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 2/3; 1/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 2/3; 2/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 3/3; 2/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 4/3; 2/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 4/3; 3/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 5/3; 3/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 5/3; 4/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 6/3; 4/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 7/3; 4/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 7/3; 5/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 8/3; 5/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 8/3; 6/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 9/3; 6/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 10/3; 6/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 10/3; 7/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 11/3; 7/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 11/3; 8/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 12/3; 8/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 13/3; 8/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 13/3; 9/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 14/3; 9/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 14/3; 10/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 15/3; 10/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 16/3; 10/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 16/3; 11/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 17/3; 11/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 17/3; 12/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 18/3; 12/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 19/3; 12/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 19/3; 13/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 20/3; 13/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 20/3; 14/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 21/3; 14/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 22/3; 14/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 22/3; 15/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 23/3; 15/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 23/3; 16/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 24/3; 16/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 25/3; 16/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 25/3; 17/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 26/3; 17/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 26/3; 18/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 27/3; 18/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 28/3; 18/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 28/3; 19/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 29/3; 19/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 29/3; 20/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 30/3; 20/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 31/3; 20/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 31/3; 21/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 32/3; 21/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 32/3; 22/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 33/3; 22/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 34/3; 22/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 34/3; 23/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 35/3; 23/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 35/3; 24/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 36/3; 24/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 37/3; 24/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 37/3; 25/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 38/3; 25/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 38/3; 26/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 39/3; 26/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 40/3; 26/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 40/3; 27/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 41/3; 27/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 41/3; 28/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 42/3; 28/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 43/3; 28/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 43/3; 29/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 44/3; 29/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 44/3; 30/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 45/3; 30/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 46/3; 30/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 46/3; 31/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 47/3; 31/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 47/3; 32/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 48/3; 32/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 49/3; 32/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 49/3; 33/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 50/3; 33/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 50/3; 34/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 51/3; 34/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 52/3; 34/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 52/3; 35/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 53/3; 35/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 53/3; 36/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 54/3; 36/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 55/3; 36/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 55/3; 37/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 56/3; 37/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 56/3; 38/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 57/3; 38/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 58/3; 38/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 58/3; 39/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 59/3; 39/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 59/3; 40/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 60/3; 40/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 61/3; 40/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 61/3; 39/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 60/3; 39/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 60/3; 38/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 59/3; 38/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 58/3; 38/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 58/3; 37/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 57/3; 37/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 57/3; 36/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 56/3; 36/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 55/3; 36/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 55/3; 35/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 54/3; 35/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 54/3; 34/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 53/3; 34/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 52/3; 34/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 52/3; 33/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 51/3; 33/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 51/3; 32/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 50/3; 32/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 49/3; 32/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 49/3; 31/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 48/3; 31/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 48/3; 30/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 47/3; 30/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 46/3; 30/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 46/3; 29/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 45/3; 29/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 45/3; 28/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 44/3; 28/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 43/3; 28/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 43/3; 27/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 42/3; 27/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 42/3; 26/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 41/3; 26/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 40/3; 26/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 40/3; 25/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 39/3; 25/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 39/3; 24/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 38/3; 24/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 37/3; 24/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 37/3; 23/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 36/3; 23/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 36/3; 22/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 35/3; 22/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 34/3; 22/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 34/3; 21/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 33/3; 21/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 33/3; 20/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 32/3; 20/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 31/3; 20/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 31/3; 19/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 30/3; 19/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 30/3; 18/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 29/3; 18/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 28/3; 18/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 28/3; 17/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 27/3; 17/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 27/3; 16/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 26/3; 16/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 25/3; 16/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 25/3; 15/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 24/3; 15/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 24/3; 14/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 23/3; 14/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 22/3; 14/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 22/3; 13/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 21/3; 13/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 21/3; 12/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 20/3; 12/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 19/3; 12/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 19/3; 11/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 18/3; 11/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 18/3; 10/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 17/3; 10/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 16/3; 10/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 16/3; 9/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 15/3; 9/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 15/3; 8/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 14/3; 8/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 13/3; 8/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 13/3; 7/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 12/3; 7/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 12/3; 6/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 11/3; 6/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 10/3; 6/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 10/3; 5/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 9/3; 5/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 9/3; 4/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 8/3; 4/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 7/3; 4/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 7/3; 3/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 6/3; 3/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 6/3; 2/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 5/3; 2/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 4/3; 2/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 4/3; 1/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 3/3; 1/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 3/3; 0/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 2/3; 0/2 +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 1/3; 0/2 +# Change sched_affinity related system variables +SET GLOBAL sched_affinity_foreground_thread='0,1,2';; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 1/3; 0/0 +SET GLOBAL sched_affinity_foreground_thread="";; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) + +SET GLOBAL sched_affinity_foreground_thread='0,1,2,24-25';; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 1/3; 0/2 +SET GLOBAL sched_affinity_foreground_thread='???';; +ERROR HY000: Invalid cpu string ???. +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 61/3; 40/2 +SET GLOBAL sched_affinity_foreground_thread='24-25';; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 0/0; 101/2 +SET GLOBAL sched_affinity_foreground_thread='???';; +ERROR HY000: Invalid cpu string ???. +SET GLOBAL sched_affinity_foreground_thread='1-100000';; +ERROR HY000: Invalid cpu string 1-100000. +SET GLOBAL sched_affinity_foreground_thread='';; +SET GLOBAL sched_affinity_foreground_thread='';; +SET GLOBAL sched_affinity_foreground_thread='0,1,2,24-25';; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 61/3; 40/2 +SET GLOBAL sched_affinity_foreground_thread='0,24-30';; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 13/1; 89/7 +SET GLOBAL sched_affinity_foreground_thread='24-25';; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 0/0; 101/2 +SET GLOBAL sched_affinity_foreground_thread="";; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) + +SET GLOBAL sched_affinity_numa_aware=0;; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) + +SET GLOBAL sched_affinity_numa_aware=1;; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) + +SET GLOBAL sched_affinity_numa_aware=0;; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) + +SET GLOBAL sched_affinity_foreground_thread='0,1,2,24-25';; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 101/5; +SET GLOBAL sched_affinity_numa_aware=0;; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 101/5; +SET GLOBAL sched_affinity_numa_aware=1;; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 61/3; 40/2 +SET GLOBAL sched_affinity_numa_aware=0;; +SELECT SUBSTRING_INDEX(variable_value,';',2) from performance_schema.global_status WHERE variable_name='Sched_affinity_status'; +SUBSTRING_INDEX(variable_value,';',2) +foreground: 101/5; +# Clean up diff --git a/mysql-test/suite/sys_vars/r/all_vars.result b/mysql-test/suite/sys_vars/r/all_vars.result index 6b771ac4025c1e2afa5d8ff6904d3ee37708888f..e72310998a08c8b7d79d85ff4f76a4277d87792d 100644 --- a/mysql-test/suite/sys_vars/r/all_vars.result +++ b/mysql-test/suite/sys_vars/r/all_vars.result @@ -57,6 +57,22 @@ replication_optimize_for_static_plugin_config replication_sender_observe_commit_only replication_sender_observe_commit_only resultset_metadata +sched_affinity_foreground_thread +sched_affinity_foreground_thread +sched_affinity_log_checkpointer +sched_affinity_log_checkpointer +sched_affinity_log_flush_notifier +sched_affinity_log_flush_notifier +sched_affinity_log_flusher +sched_affinity_log_flusher +sched_affinity_log_write_notifier +sched_affinity_log_write_notifier +sched_affinity_log_writer +sched_affinity_log_writer +sched_affinity_numa_aware +sched_affinity_numa_aware +sched_affinity_purge_coordinator +sched_affinity_purge_coordinator select_into_buffer_size select_into_buffer_size select_into_disk_sync diff --git a/mysql-test/t/all_persisted_variables.test b/mysql-test/t/all_persisted_variables.test index 00c707b52897eafab37fe112026345d87bb28e83..d9fc3f54bfa2f89964b72a0058edf542b5cfe673 100644 --- a/mysql-test/t/all_persisted_variables.test +++ b/mysql-test/t/all_persisted_variables.test @@ -41,7 +41,7 @@ call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Changing innodb_extend_and_i call mtr.add_suppression("Failed to initialize TLS for channel: mysql_main"); let $total_global_vars=`SELECT COUNT(*) FROM performance_schema.global_variables where variable_name NOT LIKE 'ndb_%'`; -let $total_persistent_vars=412; +let $total_persistent_vars=420; --echo *************************************************************** --echo * 0. Verify that variables present in performance_schema.global diff --git a/mysql-test/t/sched_affinity_manager.test b/mysql-test/t/sched_affinity_manager.test new file mode 100644 index 0000000000000000000000000000000000000000..428be397ec9f50b11cdbcf6964ecdf588cef955e --- /dev/null +++ b/mysql-test/t/sched_affinity_manager.test @@ -0,0 +1,3 @@ +--let $target_sched_affinity_group_number=2 +--let $target_sched_affinity_group_capacity=24 +--source include/sched_affinity_manager.inc diff --git a/share/messages_to_clients.txt b/share/messages_to_clients.txt index 7ff9af7528969074891caebd5db76723b040186f..adc4c48774dc3a34bcdd5e4c74c5a01d485de3b7 100644 --- a/share/messages_to_clients.txt +++ b/share/messages_to_clients.txt @@ -9541,6 +9541,15 @@ ER_SDI_GET_KEYS_INVALID_TABLESPACE ER_CHANGE_RPL_SRC_WRONG_COMPRESSION_ALGORITHM_SIZE eng "Value too long setting SOURCE_COMPRESSION_ALGORITHMS option to a %d chars long string for channel '%.192s'." +ER_INVALID_CPU_STRING + eng "Invalid cpu string %s." + +ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER + eng "Cannot update %s successfully." + +ER_CANNOT_UPDATE_SCHED_AFFINITY_NUMA_AWARE + eng "Cannot update sched_affinity_numa_aware successfully." + # # End of 8.0 error messages (server-to-client). # Do NOT add messages intended for the error log above! diff --git a/share/messages_to_error_log.txt b/share/messages_to_error_log.txt index 97f50ddf2ff3c363a278448d772d993bc5622a60..2ab19240f4b006527df86e2487cc65a7898dedcd 100644 --- a/share/messages_to_error_log.txt +++ b/share/messages_to_error_log.txt @@ -11262,6 +11262,45 @@ ER_IB_WRN_FAILED_TO_ACQUIRE_SERVICE ER_IB_WRN_OLD_GEOMETRY_TYPE eng "Column %s of type GEOMETRY is in old (5.6) format which could be deprecated in the future. To change the format to latest, please consider rebuilding the table after the upgrade." +ER_CANT_PARSE_CPU_STRING + eng "Cannot parse cpu string '%s'." + +ER_LIBNUMA_TEST_FAIL + eng "libnuma test fail." + +ER_NUMA_AVAILABLE_TEST_FAIL + eng "numa_available test fail." + +ER_CANNOT_SET_THREAD_SCHED_AFFINIFY + eng "Cannot set thread %s sched affinity." + +ER_CANNOT_UNSET_THREAD_SCHED_AFFINIFY + eng "Cannot unset thread %s sched affinity." + +ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER + eng "Cannot register thread %s sched affinity manager." + +ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER + eng "Cannot unregister thread %s sched affinity manager." + +ER_USE_DUMMY_SCHED_AFFINITY_MANAGER + eng "use dummy sched_affinity_manager." + +ER_SCHED_AFFINITY_THREAD_PROCESS_CONFLICT + eng "Found sched affinity conflict between threads and process." + +ER_SCHED_AFFINITY_FOREGROUND_BACKGROUND_CONFLICT + eng "Found sched affinity conflict between foreground threads and background threads." + +ER_CANNOT_CREATE_SCHED_AFFINITY_MANAGER + eng "Cannot create sched affinity manager." + +ER_SET_FALLBACK_MODE + eng "sched_affinity_manager is set to fallback mode." + +ER_FALLBACK_DELEGATE_SCHED_AFFINITY_MANAGER_IS_CALLED + eng "sched_affinity_manager is in fallback mode. A fallback version of sched_affinity_manager is called, which does nothing." + # DO NOT add server-to-client messages here; # they go in messages_to_clients.txt # in the same directory as this file. diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 5fd225c1ef334b5c57b5a53b4c8730544717f609..27956a67e7ba9854a43c2aa680c35125edbde896 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -21,6 +21,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA INCLUDE_DIRECTORIES(SYSTEM ${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(${GMOCK_INCLUDE_DIRS}) MY_INCLUDE_SYSTEM_DIRECTORIES(ICU) @@ -473,6 +474,7 @@ SET(SQL_SHARED_SOURCES rpl_write_set_handler.cc rules_table_service.cc rwlock_scoped_lock.cc + sched_affinity_manager.cc sd_notify.cc sdi_utils.cc session_tracker.cc diff --git a/sql/conn_handler/connection_handler_per_thread.cc b/sql/conn_handler/connection_handler_per_thread.cc index 0668c4f571c6dcf2cae2b7628b233f7d38a2b669..8a60d823cad49fa5e57d1dad55cb9aa01e095e2f 100644 --- a/sql/conn_handler/connection_handler_per_thread.cc +++ b/sql/conn_handler/connection_handler_per_thread.cc @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -55,6 +56,7 @@ #include "sql/mysqld.h" // max_connections #include "sql/mysqld_thd_manager.h" // Global_THD_manager #include "sql/protocol_classic.h" +#include "sql/sched_affinity_manager.h" #include "sql/sql_class.h" // THD #include "sql/sql_connect.h" // close_connection #include "sql/sql_error.h" @@ -294,6 +296,18 @@ static void *handle_connection(void *arg) { mysql_socket_set_thread_owner(socket); thd_manager->add_thd(thd); + auto sched_affinity_manager = + sched_affinity::Sched_affinity_manager::get_instance(); + bool is_registered_to_sched_affinity = false; + auto pid = sched_affinity::gettid(); + if (sched_affinity_manager == nullptr || + !(is_registered_to_sched_affinity = + sched_affinity_manager->register_thread( + sched_affinity::Thread_type::FOREGROUND, pid))) { + LogErr(ERROR_LEVEL, ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER, + "foreground"); + } + if (thd_prepare_connection(thd)) handler_manager->inc_aborted_connects(); else { @@ -304,6 +318,13 @@ static void *handle_connection(void *arg) { } close_connection(thd, 0, false, false); + if (is_registered_to_sched_affinity && + !sched_affinity_manager->unregister_thread(pid)) { + LogErr(ERROR_LEVEL, + ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER, + "foreground"); + } + thd->get_stmt_da()->reset_diagnostics_area(); thd->release_resources(); diff --git a/sql/memory/aligned_atomic.h b/sql/memory/aligned_atomic.h index 3fed8df602c1aeadb2c12ab32278cc49e187e871..a668bce114c09ae8c2816cce5486ae2ad642ca07 100644 --- a/sql/memory/aligned_atomic.h +++ b/sql/memory/aligned_atomic.h @@ -77,7 +77,9 @@ static inline size_t _cache_line_size() { #elif defined(__linux__) static inline size_t _cache_line_size() { - return sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + long size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + if (size == -1 || size == 0) return 64; + return static_cast(size); } #else diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 83643f76a76e0ab9d41c65fc1ba055a2d888e110..7a4173fb54d3fc77c5c495a1a98f8bf845e2abb8 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -810,6 +810,7 @@ MySQL clients support the protocol: #include "sql/rpl_rli.h" // Relay_log_info #include "sql/rpl_slave.h" // slave_load_tmpdir #include "sql/rpl_trx_tracking.h" +#include "sql/sched_affinity_manager.h" #include "sql/sd_notify.h" // sd_notify_connect #include "sql/session_tracker.h" #include "sql/set_var.h" @@ -1171,6 +1172,9 @@ uint host_cache_size; ulong log_error_verbosity = 3; // have a non-zero value during early start-up bool opt_keyring_migration_to_component = false; +extern std::map sched_affinity_parameter; +extern bool sched_affinity_numa_aware; + #if defined(_WIN32) /* Thread handle of shutdown event handler thread. @@ -2582,6 +2586,7 @@ static void clean_up(bool print_message) { */ sys_var_end(); free_status_vars(); + sched_affinity::Sched_affinity_manager::free_instance(); finish_client_errs(); deinit_errmessage(); // finish server errs @@ -7168,6 +7173,11 @@ int mysqld_main(int argc, char **argv) /* Determine default TCP port and unix socket name */ set_ports(); + if (sched_affinity::Sched_affinity_manager::create_instance(sched_affinity_parameter, sched_affinity_numa_aware) == nullptr) { + LogErr(ERROR_LEVEL, ER_CANNOT_CREATE_SCHED_AFFINITY_MANAGER); + unireg_abort(MYSQLD_ABORT_EXIT); + } + if (init_server_components()) unireg_abort(MYSQLD_ABORT_EXIT); if (!server_id_supplied) @@ -8591,6 +8601,31 @@ static int show_queries(THD *thd, SHOW_VAR *var, char *) { return 0; } +static int show_sched_affinity_status(THD *, SHOW_VAR *var, char *buff) { + var->type = SHOW_CHAR; + var->value = buff; + std::string group_snapshot = sched_affinity::Sched_affinity_manager::get_instance()->take_group_snapshot(); + strncpy(buff, group_snapshot.c_str(), SHOW_VAR_FUNC_BUFF_SIZE); + buff[SHOW_VAR_FUNC_BUFF_SIZE]='\0'; + return 0; +} + +static int show_sched_affinity_group_number(THD *, SHOW_VAR *var, char *buff) { + var->type = SHOW_SIGNED_INT; + var->value = buff; + *(reinterpret_cast(buff)) = sched_affinity::Sched_affinity_manager::get_instance() + ->get_total_node_number(); + return 0; +} + +static int show_sched_affinity_group_capacity(THD *, SHOW_VAR *var, char *buff) { + var->type = SHOW_SIGNED_INT; + var->value = buff; + *(reinterpret_cast(buff)) = sched_affinity::Sched_affinity_manager::get_instance() + ->get_cpu_number_per_node(); + return 0; +} + static int show_net_compression(THD *thd, SHOW_VAR *var, char *buff) { var->type = SHOW_MY_BOOL; var->value = buff; @@ -9183,6 +9218,12 @@ SHOW_VAR status_vars[] = { {"Queries", (char *)&show_queries, SHOW_FUNC, SHOW_SCOPE_ALL}, {"Questions", (char *)offsetof(System_status_var, questions), SHOW_LONGLONG_STATUS, SHOW_SCOPE_ALL}, + {"Sched_affinity_status", + (char *)&show_sched_affinity_status, SHOW_FUNC, SHOW_SCOPE_ALL}, + {"Sched_affinity_group_number", + (char *)&show_sched_affinity_group_number, SHOW_FUNC, SHOW_SCOPE_ALL}, + {"Sched_affinity_group_capacity", + (char *)&show_sched_affinity_group_capacity, SHOW_FUNC, SHOW_SCOPE_ALL}, {"Secondary_engine_execution_count", (char *)offsetof(System_status_var, secondary_engine_execution_count), SHOW_LONGLONG_STATUS, SHOW_SCOPE_ALL}, @@ -11022,6 +11063,7 @@ PSI_mutex_key key_thd_timer_mutex; PSI_mutex_key key_commit_order_manager_mutex; PSI_mutex_key key_mutex_slave_worker_hash; PSI_mutex_key key_monitor_info_run_lock; +PSI_mutex_key key_sched_affinity_mutex; /* clang-format off */ static PSI_mutex_info all_server_mutexes[]= @@ -11107,7 +11149,8 @@ static PSI_mutex_info all_server_mutexes[]= { &key_LOCK_tls_ctx_options, "LOCK_tls_ctx_options", 0, 0, "A lock to control all of the --ssl-* CTX related command line options for client server connection port"}, { &key_LOCK_admin_tls_ctx_options, "LOCK_admin_tls_ctx_options", 0, 0, "A lock to control all of the --ssl-* CTX related command line options for administrative connection port"}, { &key_LOCK_rotate_binlog_master_key, "LOCK_rotate_binlog_master_key", PSI_FLAG_SINGLETON, 0, PSI_DOCUMENT_ME}, - { &key_monitor_info_run_lock, "Source_IO_monitor::run_lock", 0, 0, PSI_DOCUMENT_ME} + { &key_monitor_info_run_lock, "Source_IO_monitor::run_lock", 0, 0, PSI_DOCUMENT_ME}, + { &key_sched_affinity_mutex, "Sched_affinity::m_mutex", 0, 0, PSI_DOCUMENT_ME} }; /* clang-format on */ diff --git a/sql/mysqld.h b/sql/mysqld.h index a7a80a223844a102ef05bbda33d747e1b36d2ee1..9c721c345086e6906644f83adc7929cb96e195b1 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -442,6 +442,8 @@ extern PSI_mutex_key key_monitor_info_run_lock; extern PSI_mutex_key key_commit_order_manager_mutex; extern PSI_mutex_key key_mutex_slave_worker_hash; +extern PSI_mutex_key key_sched_affinity_mutex; + extern PSI_rwlock_key key_rwlock_LOCK_logger; extern PSI_rwlock_key key_rwlock_channel_map_lock; extern PSI_rwlock_key key_rwlock_channel_lock; diff --git a/sql/sched_affinity_manager.cc b/sql/sched_affinity_manager.cc new file mode 100644 index 0000000000000000000000000000000000000000..c68f774c7ca579bbd7ffde9315129a0d9108bfb1 --- /dev/null +++ b/sql/sched_affinity_manager.cc @@ -0,0 +1,616 @@ +/***************************************************************************** +Copyright (c) 2022, Huawei Technologies Co., Ltd. All Rights Reserved. +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License, version 2.0, as published by the +Free Software Foundation. +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, +for more details. +*****************************************************************************/ + +#include "sql/sched_affinity_manager.h" + +#include + +#include + +#include "mysql/components/services/log_builtins.h" +#include "mysqld_error.h" +#include "sql/mysqld.h" + +namespace sched_affinity { +const std::vector thread_types = { + Thread_type::FOREGROUND, Thread_type::LOG_WRITER, + Thread_type::LOG_FLUSHER, Thread_type::LOG_WRITE_NOTIFIER, + Thread_type::LOG_FLUSH_NOTIFIER, Thread_type::LOG_CHECKPOINTER, + Thread_type::PURGE_COORDINATOR}; + +const std::map thread_type_names = { + {Thread_type::FOREGROUND, "foreground"}, + {Thread_type::LOG_WRITER, "log_writer"}, + {Thread_type::LOG_FLUSHER, "log_flusher"}, + {Thread_type::LOG_WRITE_NOTIFIER, "log_write_notifier"}, + {Thread_type::LOG_FLUSH_NOTIFIER, "log_flush_notifier"}, + {Thread_type::LOG_CHECKPOINTER, "log_checkpointer"}, + {Thread_type::PURGE_COORDINATOR, "purge_coordinator"}, + {Thread_type::UNDEFINED, "undefined"}}; +} // namespace sched_affinity + + +#ifdef HAVE_LIBNUMA +namespace sched_affinity { +class Lock_guard { + public: + explicit Lock_guard(mysql_mutex_t &mutex) { + m_mutex = &mutex; + mysql_mutex_lock(m_mutex); + } + Lock_guard(const Lock_guard &) = delete; + Lock_guard &operator=(const Lock_guard &) = delete; + ~Lock_guard() { mysql_mutex_unlock(m_mutex); } + + private: + mysql_mutex_t *m_mutex; +}; + + +Sched_affinity_manager_numa::Sched_affinity_manager_numa() + : Sched_affinity_manager(), + m_total_cpu_num(0), + m_total_node_num(0), + m_cpu_num_per_node(0), + m_numa_aware(false), + m_root_pid(0), + m_is_fallback(false) { + mysql_mutex_init(key_sched_affinity_mutex, &m_mutex, nullptr); +} + +Sched_affinity_manager_numa::~Sched_affinity_manager_numa() { + mysql_mutex_destroy(&m_mutex); +} + + +bool Sched_affinity_manager_numa::init( + const std::map &sched_affinity_parameter, + bool numa_aware) { + m_total_cpu_num = numa_num_configured_cpus(); + m_total_node_num = numa_num_configured_nodes(); + m_cpu_num_per_node = m_total_cpu_num / m_total_node_num; + m_numa_aware = numa_aware; + m_root_pid = gettid(); + + m_thread_bitmask.clear(); + m_sched_affinity_groups.clear(); + m_thread_pid.clear(); + for (const auto &thread_type : thread_types) { + if (sched_affinity_parameter.find(thread_type) == + sched_affinity_parameter.end()) { + continue; + } + m_thread_pid[thread_type] = std::set(); + auto cpu_string = sched_affinity_parameter.at(thread_type); + if (!init_sched_affinity_info( + cpu_string == nullptr ? std::string("") : std::string(cpu_string), + m_thread_bitmask[thread_type])) { + return false; + } + if (is_thread_sched_enabled(thread_type) && + !init_sched_affinity_group( + m_thread_bitmask[thread_type], + m_numa_aware && thread_type == Thread_type::FOREGROUND, + m_sched_affinity_groups[thread_type])) { + return false; + } + } + + return true; +} + +void Sched_affinity_manager_numa::fallback() { + if (!m_is_fallback) { + m_is_fallback = true; + m_fallback_delegate.reset(new Sched_affinity_manager_dummy()); + LogErr(ERROR_LEVEL, ER_SET_FALLBACK_MODE); + } +} + +bool Sched_affinity_manager_numa::init_sched_affinity_info( + const std::string &cpu_string, Bitmask_ptr &group_bitmask) { + group_bitmask.reset(); + if (cpu_string.empty()) { + return true; + } + std::pair normalized_result = + normalize_cpu_string(cpu_string); + if (normalized_result.second == false) { + LogErr(ERROR_LEVEL, ER_CANT_PARSE_CPU_STRING, cpu_string.c_str()); + return false; + } + group_bitmask.reset(numa_parse_cpustring(normalized_result.first.c_str())); + if (!group_bitmask) { + LogErr(ERROR_LEVEL, ER_CANT_PARSE_CPU_STRING, cpu_string.c_str()); + return false; + } + return true; +} + +bool Sched_affinity_manager_numa::init_sched_affinity_group( + const Bitmask_ptr &group_bitmask, const bool numa_aware, + std::vector &sched_affinity_group) { + if (numa_aware) { + sched_affinity_group.resize(m_total_node_num); + for (auto node_id = 0; node_id < m_total_node_num; ++node_id) { + sched_affinity_group[node_id].avail_cpu_num = 0; + sched_affinity_group[node_id].avail_cpu_mask = + Bitmask_ptr(numa_allocate_cpumask()); + sched_affinity_group[node_id].assigned_thread_num = 0; + for (auto cpu_id = m_cpu_num_per_node * node_id; + cpu_id < m_cpu_num_per_node * (node_id + 1); ++cpu_id) { + if (numa_bitmask_isbitset(group_bitmask.get(), cpu_id)) { + numa_bitmask_setbit( + sched_affinity_group[node_id].avail_cpu_mask.get(), cpu_id); + ++sched_affinity_group[node_id].avail_cpu_num; + } + } + } + } else { + sched_affinity_group.resize(1); + sched_affinity_group[0].avail_cpu_num = 0; + sched_affinity_group[0].avail_cpu_mask = + Bitmask_ptr(numa_allocate_cpumask()); + copy_bitmask_to_bitmask(group_bitmask.get(), + sched_affinity_group[0].avail_cpu_mask.get()); + sched_affinity_group[0].assigned_thread_num = 0; + for (auto cpu_id = 0; cpu_id < m_total_cpu_num; ++cpu_id) { + if (numa_bitmask_isbitset(group_bitmask.get(), cpu_id)) { + ++sched_affinity_group[0].avail_cpu_num; + } + } + } + return true; +} + + +bool Sched_affinity_manager_numa::rebalance_group( + const char *cpu_string, const Thread_type thread_type) { + const Lock_guard lock(m_mutex); + if (m_is_fallback) { + LogErr(ERROR_LEVEL, ER_FALLBACK_DELEGATE_SCHED_AFFINITY_MANAGER_IS_CALLED); + return m_fallback_delegate->rebalance_group(cpu_string, thread_type); + } + const bool is_previous_sched_enabled = is_thread_sched_enabled(thread_type); + std::vector> group_thread; + if (!reset_sched_affinity_info(cpu_string, thread_type, group_thread)) { + fallback(); + return false; + } + if (!is_thread_sched_enabled(thread_type) && !is_previous_sched_enabled) { + return true; + } + if (!is_thread_sched_enabled(thread_type) && is_previous_sched_enabled) { + Bitmask_ptr root_process_bitmask(numa_allocate_cpumask()); + if (numa_sched_getaffinity(m_root_pid, root_process_bitmask.get()) < 0) { + fallback(); + return false; + } + for (const auto tid : m_thread_pid[thread_type]) { + m_pid_group_id.erase(tid); + if (numa_sched_setaffinity(tid, root_process_bitmask.get()) < 0) { + fallback(); + return false; + } + } + return true; + } + if (is_thread_sched_enabled(thread_type) && !is_previous_sched_enabled) { + for (const auto tid : m_thread_pid[thread_type]) { + if (!bind_to_group(tid)) { + fallback(); + return false; + } + } + return true; + } + auto &sched_affinity_group = m_sched_affinity_groups[thread_type]; + std::vector migrate_thread_num; + migrate_thread_num.resize(sched_affinity_group.size()); + count_migrate_thread_num(group_thread, sched_affinity_group, + migrate_thread_num); + if (!migrate_thread_and_setaffinity(group_thread, sched_affinity_group, + migrate_thread_num)) { + fallback(); + return false; + } + return true; +} + +bool Sched_affinity_manager_numa::reset_sched_affinity_info( + const char *cpu_string, const Thread_type &thread_type, + std::vector> &group_thread) { + bool numa_aware = m_numa_aware && thread_type == Thread_type::FOREGROUND; + group_thread.resize(numa_aware ? m_total_node_num : 1, std::set()); + for (const auto tid : m_thread_pid[thread_type]) { + const auto group_index = m_pid_group_id[tid]; + group_thread[group_index].insert(tid); + } + if (!init_sched_affinity_info( + cpu_string == nullptr ? std::string("") : std::string(cpu_string), + m_thread_bitmask[thread_type])) { + return false; + } + if (is_thread_sched_enabled(thread_type) && + !init_sched_affinity_group(m_thread_bitmask[thread_type], numa_aware, + m_sched_affinity_groups[thread_type])) { + return false; + } + return true; +} + +void Sched_affinity_manager_numa::count_migrate_thread_num( + const std::vector> &group_thread, + std::vector &sched_affinity_group, + std::vector &migrate_thread_num) { + int total_thread_num = 0; + int total_avail_cpu_num = 0; + for (auto i = 0u; i < sched_affinity_group.size(); ++i) { + total_thread_num += group_thread[i].size(); + total_avail_cpu_num += sched_affinity_group[i].avail_cpu_num; + } + if (total_avail_cpu_num == 0) { + for (auto i = 0u; i < sched_affinity_group.size(); ++i) { + sched_affinity_group[i].assigned_thread_num = 0; + migrate_thread_num[i] = 0; + } + return; + } + for (auto i = 0u; i < sched_affinity_group.size(); ++i) { + sched_affinity_group[i].assigned_thread_num = + std::ceil(static_cast(total_thread_num * + sched_affinity_group[i].avail_cpu_num) / + total_avail_cpu_num); + migrate_thread_num[i] = + sched_affinity_group[i].assigned_thread_num - group_thread[i].size(); + } +} + +bool Sched_affinity_manager_numa::migrate_thread_and_setaffinity( + const std::vector> &group_thread, + const std::vector &sched_affinity_group, + std::vector &migrate_thread_num) { + for (auto i = 0u; i < group_thread.size(); ++i) { + for (auto tid : group_thread[i]) { + if (sched_affinity_group[i].avail_cpu_num != 0 && + numa_sched_setaffinity( + tid, sched_affinity_group[i].avail_cpu_mask.get()) < 0) { + return false; + } + } + } + for (auto i = 0u; i < group_thread.size(); ++i) { + if (migrate_thread_num[i] >= 0) { + continue; + } + std::set::iterator it = group_thread[i].begin(); + for (auto j = 0u; j < group_thread.size(); ++j) { + while (migrate_thread_num[j] > 0 && migrate_thread_num[i] < 0 && + it != group_thread[i].end()) { + m_pid_group_id[*it] = j; + if (numa_sched_setaffinity( + *it, sched_affinity_group[j].avail_cpu_mask.get()) < 0) { + return false; + } + --migrate_thread_num[j]; + ++migrate_thread_num[i]; + ++it; + } + } + } + return true; +} + +bool Sched_affinity_manager_numa::is_thread_sched_enabled( + const Thread_type thread_type) { + auto it = m_thread_bitmask.find(thread_type); + return (it != m_thread_bitmask.end() && it->second) ? true : false; +} + +bool Sched_affinity_manager_numa::register_thread(const Thread_type thread_type, + const pid_t pid) { + const Lock_guard lock(m_mutex); + + if (m_is_fallback) { + LogErr(ERROR_LEVEL, ER_FALLBACK_DELEGATE_SCHED_AFFINITY_MANAGER_IS_CALLED); + return m_fallback_delegate->register_thread(thread_type, pid); + } + + m_thread_pid[thread_type].insert(pid); + if (!bind_to_group(pid)) { + LogErr(ERROR_LEVEL, ER_CANNOT_SET_THREAD_SCHED_AFFINIFY, + thread_type_names.at(thread_type).c_str()); + fallback(); + return false; + } + return true; +} + +bool Sched_affinity_manager_numa::unregister_thread(const pid_t pid) { + const Lock_guard lock(m_mutex); + + if (m_is_fallback) { + LogErr(ERROR_LEVEL, ER_FALLBACK_DELEGATE_SCHED_AFFINITY_MANAGER_IS_CALLED); + return m_fallback_delegate->unregister_thread(pid); + } + + auto thread_type = get_thread_type_by_pid(pid); + if (thread_type == Thread_type::UNDEFINED) { + return false; + } + + if (!unbind_from_group(pid)) { + LogErr(ERROR_LEVEL, ER_CANNOT_UNSET_THREAD_SCHED_AFFINIFY, + thread_type_names.at(thread_type).c_str()); + fallback(); + return false; + } + m_thread_pid[thread_type].erase(pid); + return true; +} + +Thread_type Sched_affinity_manager_numa::get_thread_type_by_pid( + const pid_t pid) { + for (const auto &thread_pid : m_thread_pid) { + if (thread_pid.second.find(pid) != thread_pid.second.end()) { + return thread_pid.first; + } + } + return Thread_type::UNDEFINED; +} + +bool Sched_affinity_manager_numa::bind_to_group(const pid_t pid) { + auto thread_type = get_thread_type_by_pid(pid); + if (thread_type == Thread_type::UNDEFINED) { + return false; + } + if (!is_thread_sched_enabled(thread_type)) { + return true; + } + auto &sched_affinity_group = m_sched_affinity_groups[thread_type]; + const int INVALID_INDEX = -1; + auto best_index = INVALID_INDEX; + for (auto i = 0u; i < sched_affinity_group.size(); ++i) { + if (sched_affinity_group[i].avail_cpu_num == 0) { + continue; + } + if (best_index == INVALID_INDEX || + sched_affinity_group[i].assigned_thread_num * + sched_affinity_group[best_index].avail_cpu_num < + sched_affinity_group[best_index].assigned_thread_num * + sched_affinity_group[i].avail_cpu_num) { + best_index = i; + } + } + + if (best_index == INVALID_INDEX) { + return false; + } + auto ret = numa_sched_setaffinity( + pid, sched_affinity_group[best_index].avail_cpu_mask.get()); + if (ret == 0) { + ++sched_affinity_group[best_index].assigned_thread_num; + m_pid_group_id[pid] = best_index; + return true; + } + return false; +} + + +bool Sched_affinity_manager_numa::unbind_from_group(const pid_t pid) { + auto thread_type = get_thread_type_by_pid(pid); + if (thread_type == Thread_type::UNDEFINED) { + return false; + } + if (!is_thread_sched_enabled(thread_type)) { + return true; + } + auto &sched_affinity_group = m_sched_affinity_groups[thread_type]; + auto index = m_pid_group_id.find(pid); + if (index == m_pid_group_id.end() || + index->second >= static_cast(sched_affinity_group.size())) { + return false; + } + --sched_affinity_group[index->second].assigned_thread_num; + m_pid_group_id.erase(index); + + return copy_affinity(pid, m_root_pid); +} + +bool Sched_affinity_manager_numa::copy_affinity(pid_t from, pid_t to) { + Bitmask_ptr to_bitmask(numa_allocate_cpumask()); + if (numa_sched_getaffinity(to, to_bitmask.get()) < 0) { + return false; + } + if (numa_sched_setaffinity(from, to_bitmask.get()) < 0) { + return false; + } + return true; +} + +std::string Sched_affinity_manager_numa::take_group_snapshot() { + const Lock_guard lock(m_mutex); + + if (m_is_fallback) { + LogErr(ERROR_LEVEL, ER_FALLBACK_DELEGATE_SCHED_AFFINITY_MANAGER_IS_CALLED); + return m_fallback_delegate->take_group_snapshot(); + } + + std::string group_snapshot = ""; + for (const auto &thread_type : thread_types) { + if (!is_thread_sched_enabled(thread_type)) { + continue; + } + group_snapshot += thread_type_names.at(thread_type) + ": "; + for (const auto &sched_affinity_group : + m_sched_affinity_groups[thread_type]) { + group_snapshot += + (std::to_string(sched_affinity_group.assigned_thread_num) + + std::string("/") + + std::to_string(sched_affinity_group.avail_cpu_num) + + std::string("; ")); + } + } + return group_snapshot; +} + +int Sched_affinity_manager_numa::get_total_node_number() { + return m_total_node_num; +} + +int Sched_affinity_manager_numa::get_cpu_number_per_node() { + return m_cpu_num_per_node; +} + +bool Sched_affinity_manager_numa::check_cpu_string( + const std::string &cpu_string) { + auto ret = normalize_cpu_string(cpu_string); + if (!ret.second) { + return false; + } + Bitmask_ptr bitmask(numa_parse_cpustring(ret.first.c_str())); + return bitmask.get() != nullptr; +} + +std::pair Sched_affinity_manager_numa::normalize_cpu_string( + const std::string &cpu_string) { + std::string normalized_cpu_string = ""; + bool invalid_cpu_string = false; + const int INVALID_CORE_ID = -1; + int core_id = INVALID_CORE_ID; + for (auto c : cpu_string) { + switch (c) { + case ' ': + break; + case '-': + case ',': + if (core_id == INVALID_CORE_ID) { + invalid_cpu_string = true; + } else { + normalized_cpu_string += std::to_string(core_id); + normalized_cpu_string += c; + core_id = INVALID_CORE_ID; + } + break; + case '0' ... '9': + if (core_id == INVALID_CORE_ID) { + core_id = (c - '0'); + } else { + core_id = core_id * 10 + (c - '0'); + } + break; + default: + invalid_cpu_string = true; + break; + } + if (invalid_cpu_string) { + break; + } + } + if (core_id != INVALID_CORE_ID) { + normalized_cpu_string += std::to_string(core_id); + } + if (!normalized_cpu_string.empty() && + (*normalized_cpu_string.rbegin() == '-' || + *normalized_cpu_string.rbegin() == ',')) { + invalid_cpu_string = true; + } + if (invalid_cpu_string) { + return std::make_pair(std::string(), false); + } + return std::make_pair(normalized_cpu_string, true); +} + +bool Sched_affinity_manager_numa::update_numa_aware(bool numa_aware) { + const Lock_guard lock(m_mutex); + if (m_is_fallback) { + LogErr(ERROR_LEVEL, ER_FALLBACK_DELEGATE_SCHED_AFFINITY_MANAGER_IS_CALLED); + return m_fallback_delegate->update_numa_aware(numa_aware); + } + if (m_numa_aware == numa_aware) { + return true; + } + std::vector pending_pids; + pending_pids.resize(m_pid_group_id.size()); + std::transform(m_pid_group_id.begin(), m_pid_group_id.end(), + pending_pids.begin(), + [](auto &pid_group_id) { return pid_group_id.first; }); + for (const auto &pending_pid : pending_pids) { + if (!unbind_from_group(pending_pid)) { + LogErr(ERROR_LEVEL, ER_CANNOT_UNSET_THREAD_SCHED_AFFINIFY, + thread_type_names.at(get_thread_type_by_pid(pending_pid)).c_str()); + fallback(); + return false; + } + } + m_numa_aware = numa_aware; + for (const auto &thread_type : thread_types) { + if (is_thread_sched_enabled(thread_type) && + !init_sched_affinity_group( + m_thread_bitmask[thread_type], + m_numa_aware && thread_type == Thread_type::FOREGROUND, + m_sched_affinity_groups[thread_type])) { + fallback(); + return false; + } + } + for (const auto &pending_pid : pending_pids) { + if (!bind_to_group(pending_pid)) { + LogErr(ERROR_LEVEL, ER_CANNOT_SET_THREAD_SCHED_AFFINIFY, + thread_type_names.at(get_thread_type_by_pid(pending_pid)).c_str()); + fallback(); + return false; + } + } + return true; +} +} // namespace sched_affinity +#endif /* HAVE_LIBNUMA */ + +namespace sched_affinity { +static Sched_affinity_manager *sched_affinity_manager = nullptr; +Sched_affinity_manager *Sched_affinity_manager::create_instance( + const std::map &sched_affinity_parameter, + bool numa_aware) { + Sched_affinity_manager::free_instance(); +#ifdef HAVE_LIBNUMA + if (numa_available() == -1) { + LogErr(WARNING_LEVEL, ER_NUMA_AVAILABLE_TEST_FAIL); + LogErr(INFORMATION_LEVEL, ER_USE_DUMMY_SCHED_AFFINITY_MANAGER); + sched_affinity_manager = new Sched_affinity_manager_dummy(); + } else { + sched_affinity_manager = new Sched_affinity_manager_numa(); + } +#else + LogErr(WARNING_LEVEL, ER_LIBNUMA_TEST_FAIL); + LogErr(INFORMATION_LEVEL, ER_USE_DUMMY_SCHED_AFFINITY_MANAGER); + sched_affinity_manager = new Sched_affinity_manager_dummy(); +#endif /* HAVE_LIBNUMA */ + if (!sched_affinity_manager->init(sched_affinity_parameter, numa_aware)) { + return nullptr; + } + return sched_affinity_manager; +} + +Sched_affinity_manager *Sched_affinity_manager::get_instance() { + return sched_affinity_manager; +} + +void Sched_affinity_manager::free_instance() { + if (sched_affinity_manager != nullptr) { + delete sched_affinity_manager; + sched_affinity_manager = nullptr; + } +} + +pid_t gettid() { return static_cast(syscall(SYS_gettid)); } +} // namespace sched_affinity + diff --git a/sql/sched_affinity_manager.h b/sql/sched_affinity_manager.h new file mode 100644 index 0000000000000000000000000000000000000000..9c12cd3b441dae8cc901106d3a36a599d36b3299 --- /dev/null +++ b/sql/sched_affinity_manager.h @@ -0,0 +1,217 @@ +/***************************************************************************** +Copyright (c) 2022, Huawei Technologies Co., Ltd. All Rights Reserved. +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License, version 2.0, as published by the +Free Software Foundation. +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, +for more details. +*****************************************************************************/ + +#ifndef SCHED_AFFINITY_MANAGER_H +#define SCHED_AFFINITY_MANAGER_H +#include "my_config.h" +#ifdef HAVE_LIBNUMA +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include + +#ifdef GMOCK_FOUND +#include "gtest/gtest_prod.h" +#endif + +#include "mysql/psi/mysql_mutex.h" + +namespace sched_affinity { +enum class Thread_type { + FOREGROUND, + LOG_WRITER, + LOG_FLUSHER, + LOG_WRITE_NOTIFIER, + LOG_FLUSH_NOTIFIER, + LOG_CHECKPOINTER, + PURGE_COORDINATOR, + UNDEFINED +}; + +extern const std::vector thread_types; +extern const std::map thread_type_names; + +pid_t gettid(); + +class Sched_affinity_manager { + public: + virtual ~Sched_affinity_manager(){}; + static Sched_affinity_manager *create_instance( + const std::map &, bool numa_aware); + static Sched_affinity_manager *get_instance(); + static void free_instance(); + virtual bool register_thread(const Thread_type thread_type, + const pid_t pid) = 0; + virtual bool unregister_thread(const pid_t pid) = 0; + virtual bool rebalance_group(const char *cpu_string, + const Thread_type thread_type) = 0; + virtual bool update_numa_aware(bool numa_aware) = 0; + virtual std::string take_group_snapshot() = 0; + virtual int get_total_node_number() = 0; + virtual int get_cpu_number_per_node() = 0; + virtual bool check_cpu_string(const std::string &cpu_string) = 0; + + protected: + virtual bool init(const std::map &, + bool numa_aware) = 0; +}; + +class Sched_affinity_manager_dummy : public Sched_affinity_manager { + public: + Sched_affinity_manager_dummy(const Sched_affinity_manager_dummy &) = delete; + Sched_affinity_manager_dummy &operator=( + const Sched_affinity_manager_dummy &) = delete; + Sched_affinity_manager_dummy(Sched_affinity_manager_dummy &&) = delete; + Sched_affinity_manager_dummy &operator=(Sched_affinity_manager_dummy &&) = + delete; + bool register_thread(const Thread_type, const pid_t) override { return true; } + bool unregister_thread(const pid_t) override { return true; } + bool rebalance_group(const char *, const Thread_type) override { + return true; + } + bool update_numa_aware(bool) override { return true; } + std::string take_group_snapshot() override { return std::string(); } + int get_total_node_number() override { return -1; } + int get_cpu_number_per_node() override { return -1; } + bool check_cpu_string(const std::string &) override { return true; } + + private: + Sched_affinity_manager_dummy() : Sched_affinity_manager(){}; + ~Sched_affinity_manager_dummy() override{}; + bool init(const std::map &, bool) override { + return true; + } + friend class Sched_affinity_manager; + friend class Sched_affinity_manager_numa; + +#ifdef FRIEND_TEST + FRIEND_TEST(SchedAffinityManagerDummyTest, Implementation); +#endif +}; + +#ifdef HAVE_LIBNUMA + +struct Bitmask_deleter { + void operator()(bitmask *ptr) { + if (ptr != nullptr) { + numa_free_cpumask(ptr); + } + } +}; + +using Bitmask_ptr = std::unique_ptr; + +struct Sched_affinity_group { + Bitmask_ptr avail_cpu_mask; + int avail_cpu_num; + int assigned_thread_num; +}; + +class Sched_affinity_manager_numa : public Sched_affinity_manager { + public: + Sched_affinity_manager_numa(const Sched_affinity_manager_numa &) = delete; + Sched_affinity_manager_numa &operator=(const Sched_affinity_manager_numa &) = + delete; + Sched_affinity_manager_numa(Sched_affinity_manager_numa &&) = delete; + Sched_affinity_manager_numa &operator=(Sched_affinity_manager_numa &&) = + delete; + + bool register_thread(const Thread_type thread_type, const pid_t pid) override; + bool unregister_thread(const pid_t pid) override; + bool rebalance_group(const char *cpu_string, + const Thread_type thread_type) override; + bool update_numa_aware(bool numa_aware) override; + std::string take_group_snapshot() override; + int get_total_node_number() override; + int get_cpu_number_per_node() override; + bool check_cpu_string(const std::string &cpu_string) override; + + private: + Sched_affinity_manager_numa(); + ~Sched_affinity_manager_numa() override; + bool init(const std::map &, bool) override; + bool init_sched_affinity_info(const std::string &cpu_string, + Bitmask_ptr &group_bitmask); + bool init_sched_affinity_group( + const Bitmask_ptr &group_bitmask, const bool numa_aware, + std::vector &sched_affinity_group); + bool is_thread_sched_enabled(const Thread_type thread_type); + bool bind_to_group(const pid_t pid); + bool unbind_from_group(const pid_t pid); + + bool copy_affinity(pid_t from, pid_t to); + bool reset_sched_affinity_info(const char *cpu_string, const Thread_type &, + std::vector> &); + void count_migrate_thread_num(const std::vector> &, + std::vector &, + std::vector &); + bool migrate_thread_and_setaffinity(const std::vector> &, + const std::vector &, + std::vector &); + Thread_type get_thread_type_by_pid(const pid_t pid); + static std::pair normalize_cpu_string( + const std::string &cpu_string); + /** + The sched_affinity_manager_numa instance's internal state may become + inconsistent due to some previous failure, e.g. libnuma return error. Call + fallback() to use a fallback_delegate to serve further request to + sched_affinity_manager_numa instance's public interface. This method should be + called under the protection of m_mutex. + */ + void fallback(); + + private: + int m_total_cpu_num; + int m_total_node_num; + int m_cpu_num_per_node; + bool m_numa_aware; + pid_t m_root_pid; + bool m_is_fallback; + std::unique_ptr m_fallback_delegate; + std::map> + m_sched_affinity_groups; + std::map m_thread_bitmask; + std::map> m_thread_pid; + std::map m_pid_group_id; + mysql_mutex_t m_mutex; + + friend class Sched_affinity_manager; + +#ifdef FRIEND_TEST + FRIEND_TEST(SchedAffinityManagerTest, InitSchedAffinityInfo); + FRIEND_TEST(SchedAffinityManagerTest, InitSchedAffinityGroup); + FRIEND_TEST(SchedAffinityManagerTest, NormalizeCpuString); + FRIEND_TEST(SchedAffinityManagerTest, BindToGroup); + FRIEND_TEST(SchedAffinityManagerTest, UnbindFromGroup); + FRIEND_TEST(SchedAffinityManagerTest, GetThreadTypeByPid); + FRIEND_TEST(SchedAffinityManagerTest, RegisterThread); + FRIEND_TEST(SchedAffinityManagerTest, UnregisterThread); + FRIEND_TEST(SchedAffinityManagerTest, NumaAwareDisabled); + FRIEND_TEST(SchedAffinityManagerTest, NumaAwareEnabled); + FRIEND_TEST(SchedAffinityManagerTest, RebalanceGroup); + FRIEND_TEST(SchedAffinityManagerTest, IsThreadSchedEnabled); + FRIEND_TEST(SchedAffinityManagerTest, UpdateNumaAware); + FRIEND_TEST(SchedAffinityManagerTest, AllNullptrConfig); + FRIEND_TEST(SchedAffinityManagerTest, EmptyStringConfig); + FRIEND_TEST(SchedAffinityManagerTest, EmptyContainerConfig); + FRIEND_TEST(SchedAffinityManagerTest, Fallback); +#endif +}; +#endif /* HAVE_LIBNUMA */ +} // namespace sched_affinity +#endif /* SCHED_AFFINITY_MANAGER_H */ diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 3b8473bd1707b20c606e00b4879d99f283a643d3..5f55b9720068abe3b38206a658614bbd25958bb3 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -119,6 +119,7 @@ #include "sql/rpl_rli.h" // Relay_log_info #include "sql/rpl_slave.h" // SLAVE_THD_TYPE #include "sql/rpl_write_set_handler.h" // transaction_write_set_hashing_algorithms +#include "sql/sched_affinity_manager.h" #include "sql/server_component/log_builtins_filter_imp.h" // until we have pluggable variables #include "sql/server_component/log_builtins_imp.h" #include "sql/session_tracker.h" @@ -1382,6 +1383,174 @@ static bool check_binlog_trx_compression(sys_var *self MY_ATTRIBUTE((unused)), return false; } +bool sched_affinity_numa_aware = false; + +static bool on_sched_affinity_numa_aware_update(sys_var *, THD *, enum_var_type) +{ + if (sched_affinity::Sched_affinity_manager::get_instance() != nullptr && + !sched_affinity::Sched_affinity_manager::get_instance() + ->update_numa_aware(sched_affinity_numa_aware)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_NUMA_AWARE, MYF(0)); + return true; + } + return false; +} + +Sys_var_bool Sys_sched_affinity_numa_aware( + "sched_affinity_numa_aware", + "Schedule threads with numa information", + GLOBAL_VAR(sched_affinity_numa_aware), CMD_LINE(OPT_ARG), + DEFAULT(false), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(nullptr), ON_UPDATE(on_sched_affinity_numa_aware_update)); + +std::map sched_affinity_parameter = { + {sched_affinity::Thread_type::FOREGROUND, nullptr}, + {sched_affinity::Thread_type::LOG_WRITER, nullptr}, + {sched_affinity::Thread_type::LOG_FLUSHER, nullptr}, + {sched_affinity::Thread_type::LOG_WRITE_NOTIFIER, nullptr}, + {sched_affinity::Thread_type::LOG_FLUSH_NOTIFIER, nullptr}, + {sched_affinity::Thread_type::LOG_CHECKPOINTER, nullptr}, + {sched_affinity::Thread_type::PURGE_COORDINATOR, nullptr}}; + +static bool check_sched_affinity_parameter(sys_var *, THD *, set_var *var) { + char *c = var->save_result.string_value.str; + if (sched_affinity::Sched_affinity_manager::get_instance() != nullptr && + c != nullptr && + !sched_affinity::Sched_affinity_manager::get_instance()->check_cpu_string( + std::string(c))) { + my_error(ER_INVALID_CPU_STRING, MYF(0), c); + return true; + } + return false; +} + +static bool on_sched_affinity_foreground_thread_update(sys_var *, THD *, + enum_var_type) { + if (!sched_affinity::Sched_affinity_manager::get_instance()->rebalance_group( + sched_affinity_parameter[sched_affinity::Thread_type::FOREGROUND], + sched_affinity::Thread_type::FOREGROUND)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER, MYF(0), + sched_affinity::thread_type_names.at(sched_affinity::Thread_type::FOREGROUND).c_str()); + return true; + } + return false; +} + +static Sys_var_charptr Sys_sched_affinity_foreground_thread( + "sched_affinity_foreground_thread", + "The set of cpus which foreground threads will run on.", + GLOBAL_VAR(sched_affinity_parameter[sched_affinity::Thread_type::FOREGROUND]), CMD_LINE(REQUIRED_ARG), + IN_FS_CHARSET, DEFAULT(nullptr), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sched_affinity_parameter), + ON_UPDATE(on_sched_affinity_foreground_thread_update)); + +static bool on_sched_affinity_log_writer_update(sys_var *, THD *, + enum_var_type) { + if (!sched_affinity::Sched_affinity_manager::get_instance()->rebalance_group( + sched_affinity_parameter[sched_affinity::Thread_type::LOG_WRITER], + sched_affinity::Thread_type::LOG_WRITER)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER, MYF(0), + sched_affinity::thread_type_names.at(sched_affinity::Thread_type::LOG_WRITER).c_str()); + return true; + } + return false; +} + +static Sys_var_charptr Sys_sched_affinity_log_writer( + "sched_affinity_log_writer", + "The set of cpus which log writer thread will run on.", + GLOBAL_VAR(sched_affinity_parameter[sched_affinity::Thread_type::LOG_WRITER]), CMD_LINE(REQUIRED_ARG), + IN_FS_CHARSET, DEFAULT(nullptr), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sched_affinity_parameter), + ON_UPDATE(on_sched_affinity_log_writer_update)); + +static bool on_sched_affinity_log_flusher_update(sys_var *, THD *, enum_var_type) { + if (!sched_affinity::Sched_affinity_manager::get_instance()->rebalance_group( + sched_affinity_parameter[sched_affinity::Thread_type::LOG_FLUSHER], + sched_affinity::Thread_type::LOG_FLUSHER)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER, MYF(0), + sched_affinity::thread_type_names.at(sched_affinity::Thread_type::LOG_FLUSHER).c_str()); + return true; + } + return false; +} + +static Sys_var_charptr Sys_sched_affinity_log_flusher( + "sched_affinity_log_flusher", + "The set of cpus which log flusher thread will run on.", + GLOBAL_VAR(sched_affinity_parameter[sched_affinity::Thread_type::LOG_FLUSHER]), CMD_LINE(REQUIRED_ARG), + IN_FS_CHARSET, DEFAULT(nullptr), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sched_affinity_parameter), + ON_UPDATE(on_sched_affinity_log_flusher_update)); + +static bool on_sched_affinity_log_write_notifier_update(sys_var *, THD *, enum_var_type) { + if (!sched_affinity::Sched_affinity_manager::get_instance()->rebalance_group( + sched_affinity_parameter[sched_affinity::Thread_type::LOG_WRITE_NOTIFIER], + sched_affinity::Thread_type::LOG_WRITE_NOTIFIER)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER, MYF(0), + sched_affinity::thread_type_names.at(sched_affinity::Thread_type::LOG_WRITE_NOTIFIER).c_str()); + return true; + } + return false; +} + +static Sys_var_charptr Sys_sched_affinity_log_write_notifier( + "sched_affinity_log_write_notifier", + "The set of cpus which log write notifier thread will run on.", + GLOBAL_VAR(sched_affinity_parameter[sched_affinity::Thread_type::LOG_WRITE_NOTIFIER]), CMD_LINE(REQUIRED_ARG), + IN_FS_CHARSET, DEFAULT(nullptr), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sched_affinity_parameter), + ON_UPDATE(on_sched_affinity_log_write_notifier_update)); + +static bool on_sched_affinity_log_flush_notifier_update(sys_var *, THD *, enum_var_type) { + if (!sched_affinity::Sched_affinity_manager::get_instance()->rebalance_group( + sched_affinity_parameter[sched_affinity::Thread_type::LOG_FLUSH_NOTIFIER], + sched_affinity::Thread_type::LOG_FLUSH_NOTIFIER)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER, MYF(0), + sched_affinity::thread_type_names.at(sched_affinity::Thread_type::LOG_FLUSH_NOTIFIER).c_str()); + return true; + } + return false; +} + +static Sys_var_charptr Sys_sched_affinity_log_flush_notifier( + "sched_affinity_log_flush_notifier", + "The set of cpus which log flush notifier thread will run on.", + GLOBAL_VAR(sched_affinity_parameter[sched_affinity::Thread_type::LOG_FLUSH_NOTIFIER]), CMD_LINE(REQUIRED_ARG), + IN_FS_CHARSET, DEFAULT(nullptr), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sched_affinity_parameter), + ON_UPDATE(on_sched_affinity_log_flush_notifier_update)); + +static bool on_sched_affinity_log_checkpointer_update(sys_var *, THD *, enum_var_type) { + if (!sched_affinity::Sched_affinity_manager::get_instance()->rebalance_group( + sched_affinity_parameter[sched_affinity::Thread_type::LOG_CHECKPOINTER], + sched_affinity::Thread_type::LOG_CHECKPOINTER)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER, MYF(0), + sched_affinity::thread_type_names.at(sched_affinity::Thread_type::LOG_CHECKPOINTER).c_str()); + return true; + } + return false; +} + +static Sys_var_charptr Sys_sched_affinity_log_checkpointer( + "sched_affinity_log_checkpointer", + "The set of cpus which log checkpointer thread will run on.", + GLOBAL_VAR(sched_affinity_parameter[sched_affinity::Thread_type::LOG_CHECKPOINTER]), CMD_LINE(REQUIRED_ARG), + IN_FS_CHARSET, DEFAULT(nullptr), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sched_affinity_parameter), + ON_UPDATE(on_sched_affinity_log_checkpointer_update)); + +static bool on_sched_affinity_purge_coordinator_update(sys_var *, THD *, enum_var_type) { + if (!sched_affinity::Sched_affinity_manager::get_instance()->rebalance_group( + sched_affinity_parameter[sched_affinity::Thread_type::PURGE_COORDINATOR], + sched_affinity::Thread_type::PURGE_COORDINATOR)) { + my_error(ER_CANNOT_UPDATE_SCHED_AFFINITY_PARAMETER, MYF(0), + sched_affinity::thread_type_names.at(sched_affinity::Thread_type::PURGE_COORDINATOR).c_str()); + return true; + } + return false; +} + +static Sys_var_charptr Sys_sched_affinity_purge_coordinator( + "sched_affinity_purge_coordinator", + "The set of cpus which purge coordinator thread will run on.", + GLOBAL_VAR(sched_affinity_parameter[sched_affinity::Thread_type::PURGE_COORDINATOR]), CMD_LINE(REQUIRED_ARG), + IN_FS_CHARSET, DEFAULT(nullptr), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sched_affinity_parameter), + ON_UPDATE(on_sched_affinity_purge_coordinator_update)); + static Sys_var_bool Sys_binlog_trx_compression( "binlog_transaction_compression", "Whether to compress transactions or not. Transactions are compressed " diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index fe8b6a78765f63f0f8c8ea260d0aaaddf2a25dd7..77ec80ab9285f423b7f8308f817a4b4492acc744 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -33,8 +33,11 @@ ADD_DEFINITIONS(-DPFS_DIRECT_CALL) INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/sql/auth + ${GMOCK_INCLUDE_DIRS} ) +INCLUDE_DIRECTORIES(${GMOCK_INCLUDE_DIRS}) + # Conflicting YYSTYPE, because we have multiple Bison grammars. # WL#11100 Migrate to Bison 3.x should fix this. # diff --git a/storage/innobase/log/log0chkp.cc b/storage/innobase/log/log0chkp.cc index b4b8f12f2c05908208bb75e02233755c8a7694da..082f79802446462531dc68346dbf56688b0ea582 100644 --- a/storage/innobase/log/log0chkp.cc +++ b/storage/innobase/log/log0chkp.cc @@ -50,6 +50,8 @@ the file COPYING.Google. #include #endif /* !UNIV_HOTBACKUP */ +#include + #include "arch0arch.h" #include "buf0buf.h" #include "buf0flu.h" @@ -59,6 +61,7 @@ the file COPYING.Google. #include "log0log.h" #include "log0recv.h" #include "mem0mem.h" +#include "sql/sched_affinity_manager.h" #include "srv0mon.h" #include "srv0srv.h" #include "srv0start.h" @@ -1026,6 +1029,17 @@ static void log_consider_checkpoint(log_t &log) { } void log_checkpointer(log_t *log_ptr) { + auto sched_affinity_manager = sched_affinity::Sched_affinity_manager::get_instance(); + bool is_registered_to_sched_affinity = false; + auto pid = sched_affinity::gettid(); + if (sched_affinity_manager != nullptr && + !(is_registered_to_sched_affinity = + sched_affinity_manager->register_thread( + sched_affinity::Thread_type::LOG_CHECKPOINTER, pid))) { + ib::error(ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER) + << "log_checkpointer"; + } + ut_a(log_ptr != nullptr); log_t &log = *log_ptr; @@ -1117,6 +1131,11 @@ void log_checkpointer(log_t *log_ptr) { /* We prefer to wait until all writing is done. */ } } + if (is_registered_to_sched_affinity && + !sched_affinity_manager->unregister_thread(pid)) { + ib::error(ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER) + << "log_checkpointer"; + } } /** @} */ diff --git a/storage/innobase/log/log0write.cc b/storage/innobase/log/log0write.cc index 37e5b0f256b8b0a4364545c50edd17487b639081..6b4572b330b1926c54d573c7ad05c99969125454 100644 --- a/storage/innobase/log/log0write.cc +++ b/storage/innobase/log/log0write.cc @@ -49,6 +49,8 @@ the file COPYING.Google. #include +#include + #include "arch0arch.h" #include "buf0buf.h" #include "buf0flu.h" @@ -62,6 +64,7 @@ the file COPYING.Google. #include "log0recv.h" #include "mem0mem.h" #include "mysqld.h" /* server_uuid */ +#include "sql/sched_affinity_manager.h" #include "srv0mon.h" #include "srv0srv.h" #include "srv0start.h" @@ -2142,6 +2145,17 @@ static void log_writer_write_buffer(log_t &log, lsn_t next_write_lsn) { } void log_writer(log_t *log_ptr) { + auto sched_affinity_manager = sched_affinity::Sched_affinity_manager::get_instance(); + auto pid = sched_affinity::gettid(); + bool is_registered_to_sched_affinity = false; + if (sched_affinity_manager != nullptr && + !(is_registered_to_sched_affinity = + sched_affinity_manager->register_thread( + sched_affinity::Thread_type::LOG_WRITER, pid))) { + ib::error(ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER) + << "log_writer"; + } + ut_a(log_ptr != nullptr); log_t &log = *log_ptr; @@ -2239,6 +2253,13 @@ void log_writer(log_t *log_ptr) { } log_writer_mutex_exit(log); + + if (is_registered_to_sched_affinity && + !sched_affinity_manager->unregister_thread(pid)) { + ib::error(ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER) + << "log_writer"; + } + } /** @} */ @@ -2412,6 +2433,17 @@ static void log_flush_low(log_t &log) { } void log_flusher(log_t *log_ptr) { + auto sched_affinity_manager = sched_affinity::Sched_affinity_manager::get_instance(); + bool is_registered_to_sched_affinity = false; + auto pid = sched_affinity::gettid(); + if (sched_affinity_manager != nullptr && + !(is_registered_to_sched_affinity = + sched_affinity_manager->register_thread( + sched_affinity::Thread_type::LOG_FLUSHER, pid))) { + ib::error(ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER) + << "log_flusher"; + } + ut_a(log_ptr != nullptr); log_t &log = *log_ptr; @@ -2541,6 +2573,13 @@ void log_flusher(log_t *log_ptr) { ut_a(log.write_lsn.load() == log.flushed_to_disk_lsn.load()); log_flusher_mutex_exit(log); + + if (is_registered_to_sched_affinity && + !sched_affinity_manager->unregister_thread(pid)) { + ib::error(ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER) + << "log_flusher"; + } + } /** @} */ @@ -2554,6 +2593,17 @@ void log_flusher(log_t *log_ptr) { /** @{ */ void log_write_notifier(log_t *log_ptr) { + auto sched_affinity_manager = sched_affinity::Sched_affinity_manager::get_instance(); + bool is_registered_to_sched_affinity = false; + auto pid = sched_affinity::gettid(); + if (sched_affinity_manager != nullptr && + !(is_registered_to_sched_affinity = + sched_affinity_manager->register_thread( + sched_affinity::Thread_type::LOG_WRITE_NOTIFIER, pid))) { + ib::error(ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER) + << "log_write_notifier"; + } + ut_a(log_ptr != nullptr); log_t &log = *log_ptr; @@ -2659,6 +2709,13 @@ void log_write_notifier(log_t *log_ptr) { } log_write_notifier_mutex_exit(log); + + if (is_registered_to_sched_affinity && + !sched_affinity_manager->unregister_thread(pid)) { + ib::error(ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER) + << "log_write_notifier"; + } + } /** @} */ @@ -2672,6 +2729,17 @@ void log_write_notifier(log_t *log_ptr) { /** @{ */ void log_flush_notifier(log_t *log_ptr) { + auto sched_affinity_manager = sched_affinity::Sched_affinity_manager::get_instance(); + bool is_registered_to_sched_affinity = false; + auto pid = sched_affinity::gettid(); + if (sched_affinity_manager != nullptr && + !(is_registered_to_sched_affinity = + sched_affinity_manager->register_thread( + sched_affinity::Thread_type::LOG_FLUSH_NOTIFIER, pid))) { + ib::error(ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER) + << "log_flush_notifier"; + } + ut_a(log_ptr != nullptr); log_t &log = *log_ptr; @@ -2777,6 +2845,13 @@ void log_flush_notifier(log_t *log_ptr) { } log_flush_notifier_mutex_exit(log); + + if (is_registered_to_sched_affinity && + !sched_affinity_manager->unregister_thread(pid)) { + ib::error(ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER) + << "log_flush_notifier"; + } + } /** @} */ diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 40cea6d84143a1be14ac5b2d6893708d72ac6b32..2f5071cd44fd1f7a0d04fb9a6a05583bd9f68f08 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -49,6 +49,7 @@ this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include #include @@ -72,6 +73,7 @@ this program; if not, write to the Free Software Foundation, Inc., #include "pars0pars.h" #include "que0que.h" #include "row0mysql.h" +#include "sql/sched_affinity_manager.h" #include "sql_thd_internal_api.h" #include "srv0mon.h" @@ -3154,6 +3156,17 @@ static void srv_purge_coordinator_suspend( /** Purge coordinator thread that schedules the purge tasks. */ void srv_purge_coordinator_thread() { + auto sched_affinity_manager = sched_affinity::Sched_affinity_manager::get_instance(); + bool is_registered_to_sched_affinity = false; + auto pid = sched_affinity::gettid(); + if (sched_affinity_manager != nullptr && + !(is_registered_to_sched_affinity = + sched_affinity_manager->register_thread( + sched_affinity::Thread_type::PURGE_COORDINATOR, pid))) { + ib::error(ER_CANNOT_REGISTER_THREAD_TO_SCHED_AFFINIFY_MANAGER) + << "purge_coordinator"; + } + srv_slot_t *slot; #ifdef UNIV_PFS_THREAD @@ -3272,6 +3285,12 @@ void srv_purge_coordinator_thread() { srv_thread_delay_cleanup_if_needed(false); destroy_thd(thd); + + if (is_registered_to_sched_affinity && + !sched_affinity_manager->unregister_thread(pid)) { + ib::error(ER_CANNOT_UNREGISTER_THREAD_FROM_SCHED_AFFINIFY_MANAGER) + << "purge_coordinator"; + } } /** Enqueues a task to server task queue and releases a worker thread, if there