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.14-37-g852eb34


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  852eb34d5c56bc75bdd82327fcf310d98655f6b0 (commit)
      from  6e502e19455c6110dd4487d91b7b7d6d8121f9ba (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://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=852eb34d5c56bc75bdd82327fcf310d98655f6b0

commit 852eb34d5c56bc75bdd82327fcf310d98655f6b0
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Wed Jun 22 09:50:39 2011 -0400

    Rate limit expensive _SC_NPROCESSORS_ONLN computation

diff --git a/ChangeLog b/ChangeLog
index 2901e2e..9cef65a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-06-22  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Rate limit
+	reading the information from the /proc filesystem to once a second.
+
 2011-06-21  Andreas Jaeger  <aj@suse.de>
 
 	* sysdeps/unix/sysv/linux/bits/sigcontext.h: Fix definition of
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index af454b6..a13b6e3 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -1,5 +1,5 @@
 /* Determine various system internal values, Linux version.
-   Copyright (C) 1996-2003,2006,2007,2009,2010 Free Software Foundation, Inc.
+   Copyright (C) 1996-2003,2006,2007,2009,2010,2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -35,6 +35,16 @@
 
 #include <atomic.h>
 #include <not-cancel.h>
+#include <kernel-features.h>
+
+#ifndef HAVE_CLOCK_GETTIME_VSYSCALL
+# undef INTERNAL_VSYSCALL
+# define INTERNAL_VSYSCALL INTERNAL_SYSCALL
+# undef INLINE_VSYSCALL
+# define INLINE_VSYSCALL INLINE_SYSCALL
+#else
+# include <bits/libc-vdso.h>
+#endif
 
 
 /* How we can determine the number of available processors depends on
@@ -128,6 +138,22 @@ next_line (int fd, char *const buffer, char **cp, char **re,
 int
 __get_nprocs ()
 {
+  static int cached_result;
+  static time_t timestamp;
+
+#ifdef __ASSUME_POSIX_TIMERS
+  struct timespec ts;
+  INTERNAL_SYSCALL_DECL (err);
+  INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, &ts);
+#else
+  struct timeval ts;
+  gettimeofday (&ts, NULL);
+#endif
+  time_t prev = timestamp;
+  atomic_read_barrier ();
+  if (ts.tv_sec == prev)
+    return cached_result;
+
   /* XXX Here will come a test for the new system call.  */
 
   const size_t buffer_size = __libc_use_alloca (8192) ? 8192 : 512;
@@ -169,6 +195,10 @@ __get_nprocs ()
 	}
     }
 
+  cached_result = result;
+  atomic_write_barrier ();
+  timestamp = ts.tv_sec;
+
   return result;
 }
 weak_alias (__get_nprocs, get_nprocs)

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

Summary of changes:
 ChangeLog                             |    5 +++++
 sysdeps/unix/sysv/linux/getsysstats.c |   32 +++++++++++++++++++++++++++++++-
 2 files changed, 36 insertions(+), 1 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]