mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
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.
This commit is contained in:
parent
5f6a145800
commit
4e8d6a779c
@ -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 */
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user