tst-malloc-thread-exit: Use fewer system resources

Message ID 56B8A916.6090309@redhat.com
State Committed
Headers

Commit Message

Florian Weimer Feb. 8, 2016, 2:41 p.m. UTC
  As discussed with Chris Metcalf:

  https://sourceware.org/ml/libc-alpha/2016-01/msg00636.html

Thanks,
Florian
  

Comments

Tulio Magno Quites Machado Filho Feb. 9, 2016, 4:29 p.m. UTC | #1
Florian Weimer <fweimer@redhat.com> writes:

> 2016-02-08  Florian Weimer  <fweimer@redhat.com>
>
> 	* malloc/tst-malloc-thread-exit.c: Include test-skeleton.c early.
> 	(do_test): Limit the number of arenas, so that we can use fewer
> 	outer threads.  Limit timeout to 3 seconds, in preparation for a
> 	larger TIMEOUT value.

It also fixes the issues I've seen on POWER.
LGTM.
  
Florian Weimer Feb. 19, 2016, 1:20 p.m. UTC | #2
On 02/09/2016 05:29 PM, Tulio Magno Quites Machado Filho wrote:
> Florian Weimer <fweimer@redhat.com> writes:
> 
>> 2016-02-08  Florian Weimer  <fweimer@redhat.com>
>>
>> 	* malloc/tst-malloc-thread-exit.c: Include test-skeleton.c early.
>> 	(do_test): Limit the number of arenas, so that we can use fewer
>> 	outer threads.  Limit timeout to 3 seconds, in preparation for a
>> 	larger TIMEOUT value.
> 
> It also fixes the issues I've seen on POWER.
> LGTM.

Thanks, commit.

Florian
  

Patch

2016-02-08  Florian Weimer  <fweimer@redhat.com>

	* malloc/tst-malloc-thread-exit.c: Include test-skeleton.c early.
	(do_test): Limit the number of arenas, so that we can use fewer
	outer threads.  Limit timeout to 3 seconds, in preparation for a
	larger TIMEOUT value.

diff --git a/malloc/tst-malloc-thread-exit.c b/malloc/tst-malloc-thread-exit.c
index f4aa21a..c392051 100644
--- a/malloc/tst-malloc-thread-exit.c
+++ b/malloc/tst-malloc-thread-exit.c
@@ -26,13 +26,17 @@ 
    particularly related to the arena free list.  */
 
 #include <errno.h>
+#include <malloc.h>
 #include <pthread.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
-#define TIMEOUT 7
+static int do_test (void);
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
 
 static bool termination_requested;
 static int inner_thread_count = 4;
@@ -153,23 +157,24 @@  outer_thread (void *closure)
   return NULL;
 }
 
+
 static int
 do_test (void)
 {
-  /* The number of top-level threads should be equal to the number of
-     arenas.  See arena_get2.  */
-  long outer_thread_count = sysconf (_SC_NPROCESSORS_ONLN);
-  if (outer_thread_count >= 1)
+  /* The number of threads should be smaller than the number of
+     arenas, so that there will be some free arenas to add to the
+     arena free list.  */
+  enum { outer_thread_count = 2 };
+  if (mallopt (M_ARENA_MAX, 8) == 0)
     {
-      /* See NARENAS_FROM_NCORES in malloc.c.  */
-      if (sizeof (long) == 4)
-        outer_thread_count *= 2;
-      else
-        outer_thread_count *= 8;
+      printf ("error: mallopt (M_ARENA_MAX) failed\n");
+      return 1;
     }
 
   /* Leave some room for shutting down all threads gracefully.  */
-  int timeout = TIMEOUT - 2;
+  int timeout = 3;
+  if (timeout > TIMEOUT)
+    timeout = TIMEOUT - 1;
 
   pthread_t *threads = calloc (sizeof (*threads), outer_thread_count);
   if (threads == NULL)
@@ -212,6 +217,3 @@  do_test (void)
 
   return 0;
 }
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"