tst-malloc-thread-exit: Use fewer system resources
Commit Message
As discussed with Chris Metcalf:
https://sourceware.org/ml/libc-alpha/2016-01/msg00636.html
Thanks,
Florian
Comments
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.
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
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.
@@ -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"