[Commits] Rev 2974: MBug#643463: Slow XtraDB shutdown: Fix more sleeps delaying shutdown. in http://bazaar.launchpad.net/~maria-captains/maria/5.1

knielsen at knielsen-hq.org knielsen at knielsen-hq.org
Wed Nov 17 13:51:36 EET 2010


At http://bazaar.launchpad.net/~maria-captains/maria/5.1

------------------------------------------------------------
revno: 2974
revision-id: knielsen at knielsen-hq.org-20101109140357-zsbxv2vismv3r56k
parent: sanja at askmonty.org-20101116121619-dpt44b1vfnc9ftfm
committer: knielsen at knielsen-hq.org
branch nick: mariadb-5.1
timestamp: Tue 2010-11-09 15:03:57 +0100
message:
  MBug#643463: Slow XtraDB shutdown: Fix more sleeps delaying shutdown.
  
  This patch removes most remaining delays due to uninteruptible sleep()
  during shutdown, as found using PMP. This makes standard test run very
  close in speed to with --loose-innodb-fast-shutdown=2, and greatly
  speeds up running the test suite.
=== modified file 'sql/mysqld.cc'
--- a/sql/mysqld.cc	2010-11-07 12:25:29 +0000
+++ b/sql/mysqld.cc	2010-11-09 14:03:57 +0000
@@ -1032,8 +1032,9 @@ static void close_connections(void)
   Events::deinit();
   end_slave();
 
-  if (thread_count)
-    sleep(2);                                   // Give threads time to die
+  /* Give threads time to die. */
+  for (int i= 0; thread_count && i < 100; i++)
+    my_sleep(20000);
 
   /*
     Force remaining threads to die by closing the connection to the client

=== modified file 'storage/xtradb/include/srv0srv.h'
--- a/storage/xtradb/include/srv0srv.h	2010-11-03 21:40:53 +0000
+++ b/storage/xtradb/include/srv0srv.h	2010-11-09 14:03:57 +0000
@@ -57,8 +57,8 @@ extern const char	srv_mysql50_table_name
 thread starts running */
 extern os_event_t       srv_lock_timeout_thread_event;
 
-/* This event is set to tell the purge thread to shut down */
-extern os_event_t       srv_purge_thread_event;
+/* This event is set at shutdown to wakeup threads from sleep */
+extern os_event_t       srv_shutdown_event;
 
 /* If the last data file is auto-extended, we add this many pages to it
 at a time */

=== modified file 'storage/xtradb/log/log0log.c'
--- a/storage/xtradb/log/log0log.c	2010-11-03 21:40:53 +0000
+++ b/storage/xtradb/log/log0log.c	2010-11-09 14:03:57 +0000
@@ -3102,7 +3102,7 @@ logs_empty_and_mark_files_at_shutdown(vo
         algorithm only works if the server is idle at shutdown */
 
         srv_shutdown_state = SRV_SHUTDOWN_CLEANUP;
-        os_event_set(srv_purge_thread_event);
+        os_event_set(srv_shutdown_event);
 loop:
         os_thread_sleep(100000);
 

=== modified file 'storage/xtradb/srv/srv0srv.c'
--- a/storage/xtradb/srv/srv0srv.c	2010-11-03 21:40:53 +0000
+++ b/storage/xtradb/srv/srv0srv.c	2010-11-09 14:03:57 +0000
@@ -704,7 +704,7 @@ UNIV_INTERN srv_slot_t*	srv_mysql_table 
 
 UNIV_INTERN os_event_t  srv_lock_timeout_thread_event;
 
-UNIV_INTERN os_event_t  srv_purge_thread_event;
+UNIV_INTERN os_event_t  srv_shutdown_event;
 
 UNIV_INTERN srv_sys_t*  srv_sys = NULL;
 
@@ -1011,7 +1011,7 @@ srv_init(void)
         }
 
         srv_lock_timeout_thread_event = os_event_create(NULL);
-        srv_purge_thread_event = os_event_create(NULL);
+        srv_shutdown_event = os_event_create(NULL);
 
         for (i = 0; i < SRV_MASTER + 1; i++) {
                 srv_n_threads_active[i] = 0;
@@ -2239,7 +2239,7 @@ loop:
         /* Wake up every 5 seconds to see if we need to print
         monitor information. */
 
-        os_thread_sleep(5000000);
+        os_event_wait_time(srv_shutdown_event, 5000000);
 
         current_time = time(NULL);
 
@@ -2381,7 +2381,7 @@ loop:
         /* When someone is waiting for a lock, we wake up every second
         and check if a timeout has passed for a lock wait */
 
-        os_thread_sleep(1000000);
+        os_event_wait_time(srv_shutdown_event, 1000000);
 
         srv_lock_timeout_active = TRUE;
 
@@ -2546,7 +2546,7 @@ loop:
 
         fflush(stderr);
 
-        os_thread_sleep(1000000);
+        os_event_wait_time(srv_shutdown_event, 1000000);
 
         if (srv_shutdown_state < SRV_SHUTDOWN_CLEANUP) {
 
@@ -2590,7 +2590,7 @@ srv_LRU_dump_restore_thread(
         last_dump_time = time(NULL);
 
 loop:
-        os_thread_sleep(5000000);
+        os_event_wait_time(srv_shutdown_event, 5000000);
 
         if (srv_shutdown_state >= SRV_SHUTDOWN_CLEANUP) {
                 goto exit_func;
@@ -2754,7 +2754,7 @@ loop:
 
                 if (!skip_sleep) {
 
-                        os_thread_sleep(1000000);
+                        os_event_wait_time(srv_shutdown_event, 1000000);
                         srv_main_sleeps++;
 
                         /*
@@ -3340,10 +3340,10 @@ loop:
                 mutex_exit(&kernel_mutex);
 
                 sleep_ms = 10;
-                os_event_reset(srv_purge_thread_event);
+                os_event_reset(srv_shutdown_event);
         }
 
-        os_event_wait_time(srv_purge_thread_event, sleep_ms * 1000);
+        os_event_wait_time(srv_shutdown_event, sleep_ms * 1000);
 
         history_len = trx_sys->rseg_history_len;
         if (history_len > 1000)



More information about the commits mailing list