Skip to content

Commit

Permalink
MDEV-14154: Remove ut_time_us()
Browse files Browse the repository at this point in the history
Use microsecond_interval_timer()
or my_interval_timer() [in nanoseconds] instead.
  • Loading branch information
dr-m committed Jul 24, 2019
1 parent 86767f4 commit ab6dd77
Show file tree
Hide file tree
Showing 20 changed files with 94 additions and 231 deletions.
7 changes: 2 additions & 5 deletions storage/innobase/buf/buf0buddy.cc
Expand Up @@ -594,7 +594,7 @@ buf_buddy_relocate(

if (buf_page_can_relocate(bpage)) {
/* Relocate the compressed page. */
ullint usec = ut_time_us(NULL);
const ulonglong ns = my_interval_timer();

ut_a(bpage->zip.data == src);

Expand All @@ -612,11 +612,8 @@ buf_buddy_relocate(
reinterpret_cast<buf_buddy_free_t*>(src), i);

buf_buddy_stat_t* buddy_stat = &buf_pool->buddy_stat[i];

++buddy_stat->relocated;

buddy_stat->relocated_usec += ut_time_us(NULL) - usec;

buddy_stat->relocated_usec+= (my_interval_timer() - ns) / 1000;
return(true);
}

Expand Down
21 changes: 10 additions & 11 deletions storage/innobase/fil/fil0crypt.cc
@@ -1,6 +1,6 @@
/*****************************************************************************
Copyright (C) 2013, 2015, Google Inc. All Rights Reserved.
Copyright (c) 2014, 2018, MariaDB Corporation. All Rights Reserved.
Copyright (c) 2014, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Expand Down Expand Up @@ -1698,19 +1698,18 @@ fil_crypt_get_page_throttle_func(

state->crypt_stat.pages_read_from_disk++;

ullint start = ut_time_us(NULL);
const ulonglong start = my_interval_timer();
block = buf_page_get_gen(space->id, zip_size, offset,
RW_X_LATCH,
NULL, BUF_GET_POSSIBLY_FREED,
file, line, mtr);
ullint end = ut_time_us(NULL);

if (end < start) {
end = start; // safety...
}
const ulonglong end = my_interval_timer();

state->cnt_waited++;
state->sum_waited_us += (end - start);

if (end > start) {
state->sum_waited_us += (end - start) / 1000;
}

/* average page load */
ulint add_sleeptime_ms = 0;
Expand Down Expand Up @@ -2032,19 +2031,19 @@ fil_crypt_flush_space(
bool success = false;
ulint n_pages = 0;
ulint sum_pages = 0;
ullint start = ut_time_us(NULL);
const ulonglong start = my_interval_timer();

do {
success = buf_flush_list(ULINT_MAX, end_lsn, &n_pages);
buf_flush_wait_batch_end(NULL, BUF_FLUSH_LIST);
sum_pages += n_pages;
} while (!success && !space->is_stopping());

ullint end = ut_time_us(NULL);
const ulonglong end = my_interval_timer();

if (sum_pages && end > start) {
state->cnt_waited += sum_pages;
state->sum_waited_us += (end - start);
state->sum_waited_us += (end - start) / 1000;

/* statistics */
state->crypt_stat.pages_flushed += sum_pages;
Expand Down
15 changes: 8 additions & 7 deletions storage/innobase/handler/ha_innodb.cc
Expand Up @@ -1685,13 +1685,14 @@ innobase_srv_conc_enter_innodb(

} else if (trx->mysql_thd != NULL
&& thd_is_replication_slave_thread(trx->mysql_thd)) {

UT_WAIT_FOR(
srv_conc_get_active_threads()
< srv_thread_concurrency,
srv_replication_delay * 1000);

} else {
const ulonglong end = my_interval_timer()
+ ulonglong(srv_replication_delay) * 1000000;
while (srv_conc_get_active_threads()
>= srv_thread_concurrency
|| my_interval_timer() >= end) {
os_thread_sleep(2000 /* 2 ms */);
}
} else {
srv_conc_enter_innodb(trx);
}
}
Expand Down
4 changes: 2 additions & 2 deletions storage/innobase/include/srv0mon.h
Expand Up @@ -2,7 +2,7 @@
Copyright (c) 2010, 2013, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc.
Copyright (c) 2013, 2017, MariaDB Corporation.
Copyright (c) 2013, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Expand Down Expand Up @@ -761,7 +761,7 @@ monitor counter
MONITOR_CHECK_DEFINED(value); \
if (MONITOR_IS_ON(monitor)) { \
ullint old_time = (value); \
value = ut_time_us(NULL); \
value = microsecond_interval_timer(); \
MONITOR_VALUE(monitor) += (mon_type_t) (value - old_time);\
}

Expand Down
26 changes: 0 additions & 26 deletions storage/innobase/include/ut0ut.h
Expand Up @@ -112,22 +112,6 @@ struct ut_when_dtor {
# define UT_LOW_PRIORITY_CPU() ((void)0)
# define UT_RESUME_PRIORITY_CPU() ((void)0)
# endif

/*********************************************************************//**
Delays execution for at most max_wait_us microseconds or returns earlier
if cond becomes true.
@param cond in: condition to wait for; evaluated every 2 ms
@param max_wait_us in: maximum delay to wait, in microseconds */
#define UT_WAIT_FOR(cond, max_wait_us) \
do { \
ullint start_us; \
start_us = ut_time_us(NULL); \
while (!(cond) \
&& ut_time_us(NULL) - start_us < (max_wait_us)) {\
\
os_thread_sleep(2000 /* 2 ms */); \
} \
} while (0)
#endif /* !UNIV_HOTBACKUP */

template <class T> T ut_min(T a, T b) { return(a < b ? a : b); }
Expand Down Expand Up @@ -274,16 +258,6 @@ ut_usectime(
ulint* ms); /*!< out: microseconds since the Epoch+*sec */

/**********************************************************//**
Returns the number of microseconds since epoch. Similar to
time(3), the return value is also stored in *tloc, provided
that tloc is non-NULL.
@return us since epoch */
UNIV_INTERN
ullint
ut_time_us(
/*=======*/
ullint* tloc); /*!< out: us since epoch, if non-NULL */
/**********************************************************//**
Returns the number of milliseconds since some epoch. The
value may wrap around. It should only be used for heuristic
purposes.
Expand Down
10 changes: 4 additions & 6 deletions storage/innobase/page/page0cur.cc
Expand Up @@ -48,7 +48,7 @@ number between 0 and 2^64-1 inclusive. The formula and the constants
being used are:
X[n+1] = (a * X[n] + c) mod m
where:
X[0] = ut_time_us(NULL)
X[0] = my_interval_timer()
a = 1103515245 (3^5 * 5 * 7 * 129749)
c = 12345 (3 * 5 * 823)
m = 18446744073709551616 (2^64)
Expand All @@ -61,12 +61,10 @@ page_cur_lcg_prng(void)
{
#define LCG_a 1103515245
#define LCG_c 12345
static ib_uint64_t lcg_current = 0;
static ibool initialized = FALSE;
static uint64_t lcg_current;

if (!initialized) {
lcg_current = (ib_uint64_t) ut_time_us(NULL);
initialized = TRUE;
if (!lcg_current) {
lcg_current = my_interval_timer();
}

/* no need to "% 2^64" explicitly because lcg_current is
Expand Down
12 changes: 6 additions & 6 deletions storage/innobase/page/page0zip.cc
Expand Up @@ -2,7 +2,7 @@
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc.
Copyright (c) 2014, 2018, MariaDB Corporation.
Copyright (c) 2014, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Expand Down Expand Up @@ -1234,7 +1234,7 @@ page_zip_compress(
ulint n_blobs = 0;
byte* storage;/* storage of uncompressed columns */
#ifndef UNIV_HOTBACKUP
ullint usec = ut_time_us(NULL);
const ulonglong ns = my_interval_timer();
#endif /* !UNIV_HOTBACKUP */
#ifdef PAGE_ZIP_COMPRESS_DBG
FILE* logfile = NULL;
Expand Down Expand Up @@ -1483,7 +1483,7 @@ page_zip_compress(
dict_index_zip_failure(index);
}

ullint time_diff = ut_time_us(NULL) - usec;
const ullint time_diff = (my_interval_timer() - ns) / 1000;
page_zip_stat[page_zip->ssize - 1].compressed_usec
+= time_diff;
if (cmp_per_index_enabled) {
Expand Down Expand Up @@ -1551,7 +1551,7 @@ page_zip_compress(
}
#endif /* PAGE_ZIP_COMPRESS_DBG */
#ifndef UNIV_HOTBACKUP
ullint time_diff = ut_time_us(NULL) - usec;
const ullint time_diff = (my_interval_timer() - ns) / 1000;
page_zip_stat[page_zip->ssize - 1].compressed_ok++;
page_zip_stat[page_zip->ssize - 1].compressed_usec += time_diff;
if (cmp_per_index_enabled) {
Expand Down Expand Up @@ -3000,7 +3000,7 @@ page_zip_decompress(
mem_heap_t* heap;
ulint* offsets;
#ifndef UNIV_HOTBACKUP
ullint usec = ut_time_us(NULL);
const ulonglong ns = my_interval_timer();
#endif /* !UNIV_HOTBACKUP */

ut_ad(page_zip_simple_validate(page_zip));
Expand Down Expand Up @@ -3186,7 +3186,7 @@ page_zip_decompress(
page_zip_fields_free(index);
mem_heap_free(heap);
#ifndef UNIV_HOTBACKUP
ullint time_diff = ut_time_us(NULL) - usec;
const uint64_t time_diff = (my_interval_timer() - ns) / 1000;
page_zip_stat[page_zip->ssize - 1].decompressed++;
page_zip_stat[page_zip->ssize - 1].decompressed_usec += time_diff;

Expand Down
10 changes: 4 additions & 6 deletions storage/innobase/srv/srv0srv.cc
Expand Up @@ -2232,7 +2232,7 @@ srv_master_do_active_tasks(void)
/*============================*/
{
ib_time_t cur_time = ut_time();
ullint counter_time = ut_time_us(NULL);
ulonglong counter_time = microsecond_interval_timer();
ulint n_evicted = 0;

/* First do the tasks that we are suppose to do at each
Expand Down Expand Up @@ -2261,7 +2261,7 @@ srv_master_do_active_tasks(void)

/* Do an ibuf merge */
srv_main_thread_op_info = "doing insert buffer merge";
counter_time = ut_time_us(NULL);
counter_time = microsecond_interval_timer();
ibuf_merge_in_background(false);
MONITOR_INC_TIME_IN_MICRO_SECS(
MONITOR_SRV_IBUF_MERGE_MICROSECOND, counter_time);
Expand Down Expand Up @@ -2323,9 +2323,7 @@ void
srv_master_do_idle_tasks(void)
/*==========================*/
{
ullint counter_time;
ulint n_evicted = 0;

++srv_main_idle_loops;

MONITOR_INC(MONITOR_MASTER_IDLE_LOOPS);
Expand All @@ -2334,7 +2332,7 @@ srv_master_do_idle_tasks(void)
/* ALTER TABLE in MySQL requires on Unix that the table handler
can drop tables lazily after there no longer are SELECT
queries to them. */
counter_time = ut_time_us(NULL);
ulonglong counter_time = microsecond_interval_timer();
srv_main_thread_op_info = "doing background drop tables";
row_drop_tables_for_mysql_in_background();
MONITOR_INC_TIME_IN_MICRO_SECS(
Expand All @@ -2351,7 +2349,7 @@ srv_master_do_idle_tasks(void)
log_free_check();

/* Do an ibuf merge */
counter_time = ut_time_us(NULL);
counter_time = microsecond_interval_timer();
srv_main_thread_op_info = "doing insert buffer merge";
ibuf_merge_in_background(true);
MONITOR_INC_TIME_IN_MICRO_SECS(
Expand Down
38 changes: 11 additions & 27 deletions storage/innobase/trx/trx0i_s.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 2007, 2012, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Expand Down Expand Up @@ -152,9 +153,8 @@ struct i_s_table_cache_t {
struct trx_i_s_cache_t {
rw_lock_t rw_lock; /*!< read-write lock protecting
the rest of this structure */
ullint last_read; /*!< last time the cache was read;
measured in microseconds since
epoch */
ulonglong last_read; /*!< last time the cache was read;
measured in nanoseconds */
i_s_table_cache_t innodb_trx; /*!< innodb_trx table */
i_s_table_cache_t innodb_locks; /*!< innodb_locks table */
i_s_table_cache_t innodb_lock_waits;/*!< innodb_lock_waits table */
Expand Down Expand Up @@ -475,7 +475,7 @@ fill_trx_row(
ut_ad(lock_mutex_own());

row->trx_id = trx->id;
row->trx_started = (ib_time_t) trx->start_time;
row->trx_started = trx->start_time;
row->trx_state = trx_get_que_state_str(trx);
row->requested_lock_row = requested_lock_row;
ut_ad(requested_lock_row == NULL
Expand All @@ -484,7 +484,7 @@ fill_trx_row(
if (trx->lock.wait_lock != NULL) {

ut_a(requested_lock_row != NULL);
row->trx_wait_started = (ib_time_t) trx->lock.wait_started;
row->trx_wait_started = trx->lock.wait_started;
} else {
ut_a(requested_lock_row == NULL);
row->trx_wait_started = 0;
Expand Down Expand Up @@ -1217,33 +1217,20 @@ add_trx_relevant_locks_to_cache(
}

/** The minimum time that a cache must not be updated after it has been
read for the last time; measured in microseconds. We use this technique
read for the last time; measured in nanoseconds. We use this technique
to ensure that SELECTs which join several INFORMATION SCHEMA tables read
the same version of the cache. */
#define CACHE_MIN_IDLE_TIME_US 100000 /* 0.1 sec */
#define CACHE_MIN_IDLE_TIME_NS 100000000 /* 0.1 sec */

/*******************************************************************//**
Checks if the cache can safely be updated.
@return TRUE if can be updated */
static
ibool
can_cache_be_updated(
/*=================*/
trx_i_s_cache_t* cache) /*!< in: cache */
@return whether the cache can be updated */
static bool can_cache_be_updated(trx_i_s_cache_t* cache)
{
ullint now;

#ifdef UNIV_SYNC_DEBUG
ut_a(rw_lock_own(&cache->rw_lock, RW_LOCK_EX));
#endif

now = ut_time_us(NULL);
if (now - cache->last_read > CACHE_MIN_IDLE_TIME_US) {

return(TRUE);
}

return(FALSE);
return my_interval_timer() - cache->last_read > CACHE_MIN_IDLE_TIME_NS;
}

/*******************************************************************//**
Expand Down Expand Up @@ -1375,8 +1362,6 @@ trx_i_s_possibly_fetch_data_into_cache(
/*===================================*/
trx_i_s_cache_t* cache) /*!< in/out: cache */
{
ullint now;

#ifdef UNIV_SYNC_DEBUG
ut_a(rw_lock_own(&cache->rw_lock, RW_LOCK_EX));
#endif
Expand All @@ -1399,8 +1384,7 @@ trx_i_s_possibly_fetch_data_into_cache(
lock_mutex_exit();

/* update cache last read time */
now = ut_time_us(NULL);
cache->last_read = now;
cache->last_read = my_interval_timer();

return(0);
}
Expand Down

0 comments on commit ab6dd77

Please sign in to comment.