This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.14-37-g852eb34
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 22 Jun 2011 13:52:45 -0000
- Subject: 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