This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.26-348-g503c92c


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  503c92c37a95f769762e65aff9383b302178c2bc (commit)
       via  29c933fb35b7bf872f57dc6977c879832983ab6c (commit)
      from  799c8d6905433ad56f26ccab4855b36f1d1ddbfc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=503c92c37a95f769762e65aff9383b302178c2bc

commit 503c92c37a95f769762e65aff9383b302178c2bc
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
Date:   Thu Sep 14 22:39:49 2017 +0530

    benchtests: Reallocate buffers for memset
    
    Keeping the same buffers along with copying the same size of data into
    the same location means that the first routine is typically the
    slowest since it has to bear the cost of fetching data into to cache.
    Reallocating buffers stabilizes numbers by a bit.
    
    	* benchtests/bench-string.h (realloc_bufs): New function.
    	(test_init): Call it.
    	* benchtests/bench-memset-large.c (do_test): Likewise.
    	* benchtests/bench-memset.c (do_test): Likewise.

diff --git a/ChangeLog b/ChangeLog
index 88b0d4e..15daa37 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2017-09-14  Siddhesh Poyarekar  <siddhesh@sourceware.org>
 
+	* benchtests/bench-string.h (realloc_bufs): New function.
+	(test_init): Call it.
+	* benchtests/bench-memset-large.c (do_test): Likewise.
+	* benchtests/bench-memset.c (do_test): Likewise.
+
 	* benchtests/bench-memset-large.c: Print output in JSON
 	format.
 	* benchtests/bench-memset.c: Likewise.
diff --git a/benchtests/bench-memset-large.c b/benchtests/bench-memset-large.c
index c0f1974..6cd48c9 100644
--- a/benchtests/bench-memset-large.c
+++ b/benchtests/bench-memset-large.c
@@ -90,7 +90,10 @@ do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
   json_array_begin (json_ctx, "timings");
 
   FOR_EACH_IMPL (impl, 0)
-    do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
+    {
+      do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
+      realloc_bufs ();
+    }
 
   json_array_end (json_ctx);
   json_element_object_end (json_ctx);
diff --git a/benchtests/bench-memset.c b/benchtests/bench-memset.c
index 107e2b7..724c105 100644
--- a/benchtests/bench-memset.c
+++ b/benchtests/bench-memset.c
@@ -132,7 +132,10 @@ do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
   json_array_begin (json_ctx, "timings");
 
   FOR_EACH_IMPL (impl, 0)
-    do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
+    {
+      do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
+      realloc_bufs ();
+    }
 
   json_array_end (json_ctx);
   json_element_object_end (json_ctx);
diff --git a/benchtests/bench-string.h b/benchtests/bench-string.h
index 3aacfdf..40c735c 100644
--- a/benchtests/bench-string.h
+++ b/benchtests/bench-string.h
@@ -173,14 +173,8 @@ static impl_t *impl_array;
 # endif
 
 static void
-test_init (void)
+alloc_bufs (void)
 {
-# ifdef TEST_NAME
-  func_count = __libc_ifunc_impl_list (TEST_NAME, func_list,
-				       (sizeof func_list
-					/ sizeof func_list[0]));
-# endif
-
   page_size = 2 * getpagesize ();
 # ifdef MIN_PAGE_SIZE
   if (page_size < MIN_PAGE_SIZE)
@@ -189,15 +183,49 @@ test_init (void)
   buf1 = mmap (0, (BUF1PAGES + 1) * page_size, PROT_READ | PROT_WRITE,
 	       MAP_PRIVATE | MAP_ANON, -1, 0);
   if (buf1 == MAP_FAILED)
-    error (EXIT_FAILURE, errno, "mmap failed");
+    error (EXIT_FAILURE, errno, "mmap failed for buf1");
   if (mprotect (buf1 + BUF1PAGES * page_size, page_size, PROT_NONE))
-    error (EXIT_FAILURE, errno, "mprotect failed");
+    error (EXIT_FAILURE, errno, "mprotect failed for buf1");
   buf2 = mmap (0, 2 * page_size, PROT_READ | PROT_WRITE,
 	       MAP_PRIVATE | MAP_ANON, -1, 0);
   if (buf2 == MAP_FAILED)
-    error (EXIT_FAILURE, errno, "mmap failed");
+    error (EXIT_FAILURE, errno, "mmap failed for buf2");
   if (mprotect (buf2 + page_size, page_size, PROT_NONE))
-    error (EXIT_FAILURE, errno, "mprotect failed");
+    error (EXIT_FAILURE, errno, "mprotect failed for buf2");
+}
+
+static void
+__attribute__ ((unused))
+realloc_bufs (void)
+{
+  int ret = 0;
+
+  if (buf1)
+    ret = munmap (buf1, (BUF1PAGES + 1) * page_size);
+
+  if (ret != 0)
+    error (EXIT_FAILURE, errno, "munmap failed for buf1");
+
+  if (buf2)
+    ret = munmap (buf2, 2 * page_size);
+
+  if (ret != 0)
+    error (EXIT_FAILURE, errno, "munmap failed for buf2");
+
+  alloc_bufs ();
+}
+
+static void
+test_init (void)
+{
+# ifdef TEST_NAME
+  func_count = __libc_ifunc_impl_list (TEST_NAME, func_list,
+				       (sizeof func_list
+					/ sizeof func_list[0]));
+# endif
+
+  alloc_bufs ();
+
   if (do_srandom)
     {
       printf ("Setting seed to 0x%x\n", seed);

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=29c933fb35b7bf872f57dc6977c879832983ab6c

commit 29c933fb35b7bf872f57dc6977c879832983ab6c
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
Date:   Thu Sep 14 22:37:33 2017 +0530

    benchtests: Make memset benchmarks print json
    
    Make the memset benchmarks (bench-memset and bench-memset-large) print
    their output in JSON so that they can be evaluated using the
    compare_strings.py script.
    
    	* benchtests/bench-memset-large.c: Print output in JSON
    	format.
    	* benchtests/bench-memset.c: Likewise.

diff --git a/ChangeLog b/ChangeLog
index 9950c2e..88b0d4e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2017-09-14  Siddhesh Poyarekar  <siddhesh@sourceware.org>
+
+	* benchtests/bench-memset-large.c: Print output in JSON
+	format.
+	* benchtests/bench-memset.c: Likewise.
+
 2017-09-14  Mike FABIAN  <mfabian@redhat.com>
 
 	[BZ #21084]
diff --git a/benchtests/bench-memset-large.c b/benchtests/bench-memset-large.c
index d18a05e..c0f1974 100644
--- a/benchtests/bench-memset-large.c
+++ b/benchtests/bench-memset-large.c
@@ -41,6 +41,7 @@
 #endif /* WIDE */
 
 #include <assert.h>
+#include "json-lib.h"
 
 IMPL (MEMSET, 1)
 
@@ -57,7 +58,8 @@ SIMPLE_MEMSET (CHAR *s, int c, size_t n)
 }
 
 static void
-do_one_test (impl_t *impl, CHAR *s, int c __attribute ((unused)), size_t n)
+do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s,
+	     int c __attribute ((unused)), size_t n)
 {
   size_t i, iters = 16;
   timing_t start, stop, cur;
@@ -71,44 +73,66 @@ do_one_test (impl_t *impl, CHAR *s, int c __attribute ((unused)), size_t n)
 
   TIMING_DIFF (cur, start, stop);
 
-  TIMING_PRINT_MEAN ((double) cur, (double) iters);
+  json_element_double (json_ctx, (double) cur / (double) iters);
 }
 
 static void
-do_test (size_t align, int c, size_t len)
+do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
 {
   align &= 63;
   if ((align + len) * sizeof (CHAR) > page_size)
     return;
 
-  printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
+  json_element_object_begin (json_ctx);
+  json_attr_uint (json_ctx, "length", len);
+  json_attr_uint (json_ctx, "alignment", align);
+  json_attr_int (json_ctx, "char", c);
+  json_array_begin (json_ctx, "timings");
 
   FOR_EACH_IMPL (impl, 0)
-    do_one_test (impl, (CHAR *) (buf1) + align, c, len);
+    do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
 
-  putchar ('\n');
+  json_array_end (json_ctx);
+  json_element_object_end (json_ctx);
 }
 
 int
 test_main (void)
 {
+  json_ctx_t json_ctx;
   size_t i;
   int c;
 
   test_init ();
 
-  printf ("%24s", "");
+  json_init (&json_ctx, 0, stdout);
+
+  json_document_begin (&json_ctx);
+  json_attr_string (&json_ctx, "timing_type", TIMING_TYPE);
+
+  json_attr_object_begin (&json_ctx, "functions");
+  json_attr_object_begin (&json_ctx, TEST_NAME);
+  json_attr_string (&json_ctx, "bench-variant", "large");
+
+  json_array_begin (&json_ctx, "ifuncs");
   FOR_EACH_IMPL (impl, 0)
-    printf ("\t%s", impl->name);
-  putchar ('\n');
+    json_element_string (&json_ctx, impl->name);
+  json_array_end (&json_ctx);
+
+  json_array_begin (&json_ctx, "results");
 
   c = 65;
   for (i = START_SIZE; i <= MIN_PAGE_SIZE; i <<= 1)
     {
-      do_test (0, c, i);
-      do_test (3, c, i);
+      do_test (&json_ctx, 0, c, i);
+      do_test (&json_ctx, 3, c, i);
     }
 
+  json_array_end (&json_ctx);
+  json_attr_object_end (&json_ctx);
+  json_attr_object_end (&json_ctx);
+  json_document_end (&json_ctx);
+
   return ret;
 }
 
diff --git a/benchtests/bench-memset.c b/benchtests/bench-memset.c
index 6b5c57f..107e2b7 100644
--- a/benchtests/bench-memset.c
+++ b/benchtests/bench-memset.c
@@ -42,6 +42,8 @@
 # define MEMCMP wmemcmp
 #endif /* WIDE */
 
+#include "json-lib.h"
+
 CHAR *SIMPLE_MEMSET (CHAR *, int, size_t);
 
 #ifdef TEST_BZERO
@@ -94,7 +96,8 @@ SIMPLE_MEMSET (CHAR *s, int c, size_t n)
 }
 
 static void
-do_one_test (impl_t *impl, CHAR *s, int c __attribute ((unused)), size_t n)
+do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s,
+	     int c __attribute ((unused)), size_t n)
 {
   size_t i, iters = INNER_LOOP_ITERS;
   timing_t start, stop, cur;
@@ -112,65 +115,87 @@ do_one_test (impl_t *impl, CHAR *s, int c __attribute ((unused)), size_t n)
 
   TIMING_DIFF (cur, start, stop);
 
-  TIMING_PRINT_MEAN ((double) cur, (double) iters);
+  json_element_double (json_ctx, (double) cur / (double) iters);
 }
 
 static void
-do_test (size_t align, int c, size_t len)
+do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
 {
   align &= 63;
   if ((align + len) * sizeof (CHAR) > page_size)
     return;
 
-  printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
+  json_element_object_begin (json_ctx);
+  json_attr_uint (json_ctx, "length", len);
+  json_attr_uint (json_ctx, "alignment", align);
+  json_attr_int (json_ctx, "char", c);
+  json_array_begin (json_ctx, "timings");
 
   FOR_EACH_IMPL (impl, 0)
-    do_one_test (impl, (CHAR *) (buf1) + align, c, len);
+    do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
 
-  putchar ('\n');
+  json_array_end (json_ctx);
+  json_element_object_end (json_ctx);
 }
 
 int
 test_main (void)
 {
+  json_ctx_t json_ctx;
   size_t i;
   int c = 0;
 
   test_init ();
 
-  printf ("%24s", "");
+  json_init (&json_ctx, 0, stdout);
+
+  json_document_begin (&json_ctx);
+  json_attr_string (&json_ctx, "timing_type", TIMING_TYPE);
+
+  json_attr_object_begin (&json_ctx, "functions");
+  json_attr_object_begin (&json_ctx, TEST_NAME);
+  json_attr_string (&json_ctx, "bench-variant", "");
+
+  json_array_begin (&json_ctx, "ifuncs");
   FOR_EACH_IMPL (impl, 0)
-    printf ("\t%s", impl->name);
-  putchar ('\n');
+    json_element_string (&json_ctx, impl->name);
+  json_array_end (&json_ctx);
+
+  json_array_begin (&json_ctx, "results");
 
 #ifndef TEST_BZERO
   for (c = -65; c <= 130; c += 65)
 #endif
     {
       for (i = 0; i < 18; ++i)
-	do_test (0, c, 1 << i);
+	do_test (&json_ctx, 0, c, 1 << i);
       for (i = 1; i < 32; ++i)
 	{
-	  do_test (i, c, i);
+	  do_test (&json_ctx, i, c, i);
 	  if (i & (i - 1))
-	    do_test (0, c, i);
+	    do_test (&json_ctx, 0, c, i);
 	}
       for (i = 32; i < 512; i+=32)
 	{
-	  do_test (0, c, i);
-	  do_test (i, c, i);
+	  do_test (&json_ctx, 0, c, i);
+	  do_test (&json_ctx, i, c, i);
 	}
-      do_test (1, c, 14);
-      do_test (3, c, 1024);
-      do_test (4, c, 64);
-      do_test (2, c, 25);
+      do_test (&json_ctx, 1, c, 14);
+      do_test (&json_ctx, 3, c, 1024);
+      do_test (&json_ctx, 4, c, 64);
+      do_test (&json_ctx, 2, c, 25);
     }
   for (i = 33; i <= 256; i += 4)
     {
-      do_test (0, c, 32 * i);
-      do_test (i, c, 32 * i);
+      do_test (&json_ctx, 0, c, 32 * i);
+      do_test (&json_ctx, i, c, 32 * i);
     }
 
+  json_array_end (&json_ctx);
+  json_attr_object_end (&json_ctx);
+  json_attr_object_end (&json_ctx);
+  json_document_end (&json_ctx);
+
   return ret;
 }
 

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                       |   11 ++++++
 benchtests/bench-memset-large.c |   49 +++++++++++++++++++++------
 benchtests/bench-memset.c       |   68 +++++++++++++++++++++++++++-----------
 benchtests/bench-string.h       |   50 ++++++++++++++++++++++------
 4 files changed, 136 insertions(+), 42 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]