[PATCH] Faster process initialization

Magnus Holmgren magnushol@gmail.com
Wed Sep 1 18:18:00 GMT 2010


This patch speeds up process initialization on 64-bit systems. Maybe
the comment "Initialize signal processing here ..." should be re-worded
or removed completely.

The speed difference can be noticeable.
"while (true); do date; done | uniq -c" manages more than 3 times more
"date" executions per second on my system.


2010-09-01  Magnus Holmgren  <magnushol@gmail.com>

	* dcrt0.cc (dll_crt0_0): Remove call to sigproc_init. It creates
	a thread, and execution of that thread can be delayed during
	DLL init, slowing things down (seen on 64-bit systems).
	(dll_crt0_1): Always call sigproc_init.


Index: src/winsup/cygwin/dcrt0.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/dcrt0.cc,v
retrieving revision 1.382
diff -u -p -r1.382 dcrt0.cc
--- src/winsup/cygwin/dcrt0.cc  30 Aug 2010 23:23:28 -0000      1.382
+++ src/winsup/cygwin/dcrt0.cc  1 Sep 2010 17:49:26 -0000
@@ -740,11 +740,9 @@ dll_crt0_0 ()
         }
      }

-  /* Initialize signal processing here, early, in the hopes that the creation
-     of a thread early in the process will cause more predictability in memory
-     layout for the main thread. */
-  if (!dynamically_loaded)
-    sigproc_init ();
+  /* Don't initialize signal processing here. It creates a thread, and
+     execution of threads created during DLL initialization can be
+     delayed (e.g., on 64-bit Windows Vista and Windows 7) */

    user_data->threadinterface->Init ();

@@ -789,8 +787,10 @@ dll_crt0_1 (void *)
  {
    extern void initial_setlocale ();

-  if (dynamically_loaded)
-    sigproc_init ();
+  /* Initialize signal processing here, early, in the hopes that the creation
+     of a thread early in the process will cause more predictability in memory
+     layout for the main thread. */
+  sigproc_init ();
    check_sanity_and_sync (user_data);

    /* Initialize malloc and then call user_shared_initialize since it relies

-- 
   Magnus



More information about the Cygwin-patches mailing list