summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Jacke <bj@sernet.de>2010-09-14 22:40:51 +0200
committerBjörn Jacke <bj@sernet.de>2010-09-14 22:45:07 +0200
commit4e8d6a779c9aa9b9418b4f835d831ad4492c3f6c (patch)
tree725e0c44d84840787a4f3707e8cf97da7a5e1810
parent5f6a145800a9e67c638f3ee05e43bb12fafffb48 (diff)
downloadsamba-4e8d6a779c9aa9b9418b4f835d831ad4492c3f6c.tar.gz
samba-4e8d6a779c9aa9b9418b4f835d831ad4492c3f6c.tar.bz2
samba-4e8d6a779c9aa9b9418b4f835d831ad4492c3f6c.zip
s3/profile: remove the magical clock initialization from the profile code
there's no point in not profiling times if no monotonic clock is found - monotonic and realtime clock are equally fast. Just use clock_gettime_mono instead.
-rw-r--r--source3/include/smbprofile.h11
-rw-r--r--source3/profile/profile.c56
2 files changed, 3 insertions, 64 deletions
diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h
index 60764794fc..5015d2a9e4 100644
--- a/source3/include/smbprofile.h
+++ b/source3/include/smbprofile.h
@@ -894,18 +894,13 @@ extern bool do_profile_times;
#define DEC_PROFILE_COUNT(x) profile_p->x--
#define ADD_PROFILE_COUNT(x,y) profile_p->x += (y)
-extern clockid_t __profile_clock;
-
static inline uint64_t profile_timestamp(void)
{
struct timespec ts;
- /* FIXME: On a single-CPU system, or a system where we have bound
- * daemon threads to single CPUs (eg. using cpusets or processor
- * affinity), it might be preferable to use CLOCK_PROCESS_CPUTIME_ID.
- */
-
- clock_gettime(__profile_clock, &ts);
+ /* we might prefer to use the _COARSE clock variant of CLOCK_MONOTONIC
+ that one is faster but cached and "just" tick-wise precise */
+ clock_gettime_mono(&ts);
return (ts.tv_sec * 1000000) + (ts.tv_nsec / 1000); /* usec */
}
diff --git a/source3/profile/profile.c b/source3/profile/profile.c
index 3e0df15f65..59b409d8da 100644
--- a/source3/profile/profile.c
+++ b/source3/profile/profile.c
@@ -29,8 +29,6 @@
#ifdef WITH_PROFILE
static int shm_id;
static bool read_only;
-clockid_t __profile_clock;
-bool have_profiling_clock = False;
#endif
struct profile_header *profile_h;
@@ -59,19 +57,6 @@ void set_profile_level(int level, struct server_id src)
(int)procid_to_pid(&src)));
break;
case 2: /* turn on complete profiling */
-
-#if defined(HAVE_CLOCK_GETTIME)
- if (!have_profiling_clock) {
- do_profile_flag = True;
- do_profile_times = False;
- DEBUG(1,("INFO: Profiling counts turned ON from "
- "pid %d\n", (int)procid_to_pid(&src)));
- DEBUGADD(1,("INFO: Profiling times disabled "
- "due to lack of a suitable clock\n"));
- break;
- }
-#endif
-
do_profile_flag = True;
do_profile_times = True;
DEBUG(1,("INFO: Full profiling turned ON from pid %d\n",
@@ -135,53 +120,12 @@ static void reqprofile_message(struct messaging_context *msg_ctx,
/*******************************************************************
open the profiling shared memory area
******************************************************************/
-
-/* Find a clock. Just because the definition for a particular clock ID is
- * present doesn't mean the system actually supports it.
- */
-static void init_clock_gettime(void)
-{
- struct timespec ts;
-
- have_profiling_clock = False;
-
-#ifdef HAVE_CLOCK_MONOTONIC
- if (!have_profiling_clock &&
- clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
- DEBUG(10, ("Using CLOCK_MONOTONIC for profile_clock\n"));
- __profile_clock = CLOCK_MONOTONIC;
- have_profiling_clock = True;
- }
-#endif
-
-#ifdef HAVE_CLOCK_REALTIME
- /* POSIX says that CLOCK_REALTIME should be defined everywhere
- * where we have clock_gettime...
- */
- if (!have_profiling_clock &&
- clock_gettime(CLOCK_REALTIME, &ts) == 0) {
- __profile_clock = CLOCK_REALTIME;
- have_profiling_clock = True;
-
- SMB_WARN(__profile_clock != CLOCK_REALTIME,
- ("forced to use a slow profiling clock"));
- }
-
-#endif
-
- SMB_WARN(have_profiling_clock == True,
- ("could not find a working clock for profiling"));
- return;
-}
-
bool profile_setup(struct messaging_context *msg_ctx, bool rdonly)
{
struct shmid_ds shm_ds;
read_only = rdonly;
- init_clock_gettime();
-
again:
/* try to use an existing key */
shm_id = shmget(PROF_SHMEM_KEY, 0, 0);