mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			825 lines
		
	
	
	
		
			28 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			825 lines
		
	
	
	
		
			28 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/***********************************************************************
 | 
						|
 | 
						|
Copyright (c) 2010, 2015, Oracle and/or its affiliates. All Rights Reserved.
 | 
						|
Copyright (c) 2012, Facebook Inc.
 | 
						|
Copyright (c) 2013, 2023, 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 Foundation; version 2 of the License.
 | 
						|
 | 
						|
This program is distributed in the hope that it will be useful, but
 | 
						|
WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 | 
						|
Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License along with
 | 
						|
this program; if not, write to the Free Software Foundation, Inc.,
 | 
						|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
 | 
						|
 | 
						|
***********************************************************************/
 | 
						|
 | 
						|
/**************************************************//**
 | 
						|
@file include/srv0mon.h
 | 
						|
Server monitor counter related defines
 | 
						|
 | 
						|
Created 12/15/2009	Jimmy Yang
 | 
						|
*******************************************************/
 | 
						|
 | 
						|
#ifndef srv0mon_h
 | 
						|
#define srv0mon_h
 | 
						|
 | 
						|
#include "univ.i"
 | 
						|
 | 
						|
#ifndef __STDC_LIMIT_MACROS
 | 
						|
/* Required for FreeBSD so that INT64_MAX is defined. */
 | 
						|
#define __STDC_LIMIT_MACROS
 | 
						|
#endif /* __STDC_LIMIT_MACROS */
 | 
						|
 | 
						|
#include <cstdint>
 | 
						|
#include "my_atomic.h"
 | 
						|
#include "my_atomic_wrapper.h"
 | 
						|
 | 
						|
/** Possible status values for "mon_status" in "struct monitor_value" */
 | 
						|
enum monitor_running_status {
 | 
						|
	MONITOR_STARTED = 1,	/*!< Monitor has been turned on */
 | 
						|
	MONITOR_STOPPED = 2	/*!< Monitor has been turned off */
 | 
						|
};
 | 
						|
 | 
						|
typedef enum monitor_running_status	monitor_running_t;
 | 
						|
 | 
						|
/** Monitor counter value type */
 | 
						|
typedef	int64_t				mon_type_t;
 | 
						|
 | 
						|
/** Two monitor structures are defined in this file. One is
 | 
						|
"monitor_value_t" which contains dynamic counter values for each
 | 
						|
counter. The other is "monitor_info_t", which contains
 | 
						|
static information (counter name, desc etc.) for each counter.
 | 
						|
In addition, an enum datatype "monitor_id_t" is also defined,
 | 
						|
it identifies each monitor with an internally used symbol, whose
 | 
						|
integer value indexes into above two structure for its dynamic
 | 
						|
and static information.
 | 
						|
Developer who intend to add new counters would require to
 | 
						|
fill in counter information as described in "monitor_info_t" and
 | 
						|
create the internal counter ID in "monitor_id_t". */
 | 
						|
 | 
						|
/** Structure containing the actual values of a monitor counter. */
 | 
						|
struct monitor_value_t {
 | 
						|
	time_t	mon_start_time;	/*!< Start time of monitoring  */
 | 
						|
	time_t	mon_stop_time;	/*!< Stop time of monitoring */
 | 
						|
	time_t	mon_reset_time;	/*!< Time of resetting the counter */
 | 
						|
	mon_type_t	mon_value;	/*!< Current counter Value */
 | 
						|
	mon_type_t	mon_max_value;	/*!< Current Max value */
 | 
						|
	mon_type_t	mon_min_value;	/*!< Current Min value */
 | 
						|
	mon_type_t	mon_value_reset;/*!< value at last reset */
 | 
						|
	mon_type_t	mon_max_value_start; /*!< Max value since start */
 | 
						|
	mon_type_t	mon_min_value_start; /*!< Min value since start */
 | 
						|
	mon_type_t	mon_start_value;/*!< Value at the start time */
 | 
						|
	mon_type_t	mon_last_value;	/*!< Last set of values */
 | 
						|
	monitor_running_t mon_status;	/* whether monitor still running */
 | 
						|
};
 | 
						|
 | 
						|
/** Following defines are possible values for "monitor_type" field in
 | 
						|
"struct monitor_info" */
 | 
						|
enum monitor_type_t {
 | 
						|
	MONITOR_NONE = 0,	/*!< No monitoring */
 | 
						|
	MONITOR_MODULE = 1,	/*!< This is a monitor module type,
 | 
						|
				not a counter */
 | 
						|
	MONITOR_EXISTING = 2,	/*!< The monitor carries information from
 | 
						|
				an existing system status variable */
 | 
						|
	MONITOR_NO_AVERAGE = 4,	/*!< Set this status if we don't want to
 | 
						|
				calculate the average value for the counter */
 | 
						|
	MONITOR_DISPLAY_CURRENT = 8, /*!< Display current value of the
 | 
						|
				counter, rather than incremental value
 | 
						|
				over the period. Mostly for counters
 | 
						|
				displaying current resource usage */
 | 
						|
	MONITOR_GROUP_MODULE = 16, /*!< Monitor can be turned on/off
 | 
						|
				only as a module, but not individually */
 | 
						|
	MONITOR_DEFAULT_ON = 32,/*!< Monitor will be turned on by default at
 | 
						|
				server start up */
 | 
						|
	MONITOR_SET_OWNER = 64,	/*!< Owner of "monitor set", a set of
 | 
						|
				monitor counters */
 | 
						|
	MONITOR_SET_MEMBER = 128,/*!< Being part of a "monitor set" */
 | 
						|
	MONITOR_HIDDEN = 256	/*!< Do not display this monitor in the
 | 
						|
				metrics table */
 | 
						|
};
 | 
						|
 | 
						|
/** Counter minimum value is initialized to be max value of
 | 
						|
 mon_type_t (int64_t) */
 | 
						|
#ifndef INT64_MAX
 | 
						|
#define INT64_MAX		(9223372036854775807LL)
 | 
						|
#endif
 | 
						|
#ifndef INT64_MIN
 | 
						|
#define INT64_MIN		(-9223372036854775807LL-1)
 | 
						|
#endif
 | 
						|
#define	MIN_RESERVED		INT64_MAX
 | 
						|
#define	MAX_RESERVED		INT64_MIN
 | 
						|
 | 
						|
/** This enumeration defines internal monitor identifier used internally
 | 
						|
to identify each particular counter. Its value indexes into two arrays,
 | 
						|
one is the "innodb_counter_value" array which records actual monitor
 | 
						|
counter values, the other is "innodb_counter_info" array which describes
 | 
						|
each counter's basic information (name, desc etc.). A couple of
 | 
						|
naming rules here:
 | 
						|
1) If the monitor defines a module, it starts with MONITOR_MODULE
 | 
						|
2) If the monitor uses exisitng counters from "status variable", its ID
 | 
						|
name shall start with MONITOR_OVLD
 | 
						|
 | 
						|
Please refer to "innodb_counter_info" in srv/srv0mon.cc for detail
 | 
						|
information for each monitor counter */
 | 
						|
 | 
						|
enum monitor_id_t {
 | 
						|
	/* This is to identify the default value set by the metrics
 | 
						|
	control global variables */
 | 
						|
	MONITOR_DEFAULT_START = 0,
 | 
						|
 | 
						|
	/* Start of Metadata counter */
 | 
						|
	MONITOR_MODULE_METADATA,
 | 
						|
	MONITOR_TABLE_OPEN,
 | 
						|
 | 
						|
	/* Lock manager related counters */
 | 
						|
	MONITOR_MODULE_LOCK,
 | 
						|
	MONITOR_DEADLOCK,
 | 
						|
	MONITOR_TIMEOUT,
 | 
						|
	MONITOR_LOCKREC_WAIT,
 | 
						|
	MONITOR_TABLELOCK_WAIT,
 | 
						|
	MONITOR_NUM_RECLOCK_REQ,
 | 
						|
	MONITOR_RECLOCK_CREATED,
 | 
						|
	MONITOR_RECLOCK_REMOVED,
 | 
						|
	MONITOR_NUM_RECLOCK,
 | 
						|
	MONITOR_TABLELOCK_CREATED,
 | 
						|
	MONITOR_TABLELOCK_REMOVED,
 | 
						|
	MONITOR_NUM_TABLELOCK,
 | 
						|
	MONITOR_OVLD_ROW_LOCK_CURRENT_WAIT,
 | 
						|
	MONITOR_OVLD_LOCK_WAIT_TIME,
 | 
						|
	MONITOR_OVLD_LOCK_MAX_WAIT_TIME,
 | 
						|
	MONITOR_OVLD_ROW_LOCK_WAIT,
 | 
						|
	MONITOR_OVLD_LOCK_AVG_WAIT_TIME,
 | 
						|
 | 
						|
	/* Buffer and I/O related counters. */
 | 
						|
	MONITOR_MODULE_BUFFER,
 | 
						|
	MONITOR_OVLD_BUFFER_POOL_SIZE,
 | 
						|
	MONITOR_OVLD_BUF_POOL_READS,
 | 
						|
	MONITOR_OVLD_BUF_POOL_READ_REQUESTS,
 | 
						|
	MONITOR_OVLD_BUF_POOL_WRITE_REQUEST,
 | 
						|
	MONITOR_OVLD_BUF_POOL_WAIT_FREE,
 | 
						|
	MONITOR_OVLD_BUF_POOL_READ_AHEAD,
 | 
						|
	MONITOR_OVLD_BUF_POOL_READ_AHEAD_EVICTED,
 | 
						|
	MONITOR_OVLD_BUF_POOL_PAGE_TOTAL,
 | 
						|
	MONITOR_OVLD_BUF_POOL_PAGE_MISC,
 | 
						|
	MONITOR_OVLD_BUF_POOL_PAGES_DATA,
 | 
						|
	MONITOR_OVLD_BUF_POOL_BYTES_DATA,
 | 
						|
	MONITOR_OVLD_BUF_POOL_PAGES_DIRTY,
 | 
						|
	MONITOR_OVLD_BUF_POOL_BYTES_DIRTY,
 | 
						|
	MONITOR_OVLD_BUF_POOL_PAGES_FREE,
 | 
						|
	MONITOR_OVLD_PAGE_CREATED,
 | 
						|
	MONITOR_OVLD_PAGES_WRITTEN,
 | 
						|
	MONITOR_OVLD_PAGES_READ,
 | 
						|
	MONITOR_OVLD_BYTE_READ,
 | 
						|
	MONITOR_OVLD_BYTE_WRITTEN,
 | 
						|
	MONITOR_FLUSH_BATCH_SCANNED,
 | 
						|
	MONITOR_FLUSH_BATCH_SCANNED_NUM_CALL,
 | 
						|
	MONITOR_FLUSH_BATCH_SCANNED_PER_CALL,
 | 
						|
	MONITOR_FLUSH_BATCH_TOTAL_PAGE,
 | 
						|
	MONITOR_FLUSH_BATCH_COUNT,
 | 
						|
	MONITOR_FLUSH_BATCH_PAGES,
 | 
						|
	MONITOR_FLUSH_NEIGHBOR_TOTAL_PAGE,
 | 
						|
	MONITOR_FLUSH_NEIGHBOR_COUNT,
 | 
						|
	MONITOR_FLUSH_NEIGHBOR_PAGES,
 | 
						|
	MONITOR_FLUSH_N_TO_FLUSH_REQUESTED,
 | 
						|
 | 
						|
	MONITOR_FLUSH_N_TO_FLUSH_BY_AGE,
 | 
						|
	MONITOR_FLUSH_ADAPTIVE_AVG_TIME,
 | 
						|
 | 
						|
	MONITOR_FLUSH_ADAPTIVE_AVG_PASS,
 | 
						|
 | 
						|
	MONITOR_LRU_GET_FREE_LOOPS,
 | 
						|
 | 
						|
	MONITOR_FLUSH_AVG_PAGE_RATE,
 | 
						|
	MONITOR_FLUSH_LSN_AVG_RATE,
 | 
						|
	MONITOR_FLUSH_PCT_FOR_DIRTY,
 | 
						|
	MONITOR_FLUSH_PCT_FOR_LSN,
 | 
						|
	MONITOR_FLUSH_SYNC_WAITS,
 | 
						|
	MONITOR_FLUSH_ADAPTIVE_TOTAL_PAGE,
 | 
						|
	MONITOR_FLUSH_ADAPTIVE_COUNT,
 | 
						|
	MONITOR_FLUSH_ADAPTIVE_PAGES,
 | 
						|
	MONITOR_FLUSH_SYNC_TOTAL_PAGE,
 | 
						|
	MONITOR_FLUSH_SYNC_COUNT,
 | 
						|
	MONITOR_FLUSH_SYNC_PAGES,
 | 
						|
	MONITOR_FLUSH_BACKGROUND_TOTAL_PAGE,
 | 
						|
	MONITOR_FLUSH_BACKGROUND_COUNT,
 | 
						|
	MONITOR_FLUSH_BACKGROUND_PAGES,
 | 
						|
	MONITOR_LRU_BATCH_SCANNED,
 | 
						|
	MONITOR_LRU_BATCH_SCANNED_NUM_CALL,
 | 
						|
	MONITOR_LRU_BATCH_SCANNED_PER_CALL,
 | 
						|
	MONITOR_LRU_BATCH_FLUSH_TOTAL_PAGE,
 | 
						|
	MONITOR_LRU_BATCH_EVICT_TOTAL_PAGE,
 | 
						|
	MONITOR_LRU_GET_FREE_SEARCH,
 | 
						|
	MONITOR_LRU_SEARCH_SCANNED,
 | 
						|
	MONITOR_LRU_SEARCH_SCANNED_NUM_CALL,
 | 
						|
	MONITOR_LRU_SEARCH_SCANNED_PER_CALL,
 | 
						|
	MONITOR_LRU_UNZIP_SEARCH_SCANNED,
 | 
						|
	MONITOR_LRU_UNZIP_SEARCH_SCANNED_NUM_CALL,
 | 
						|
	MONITOR_LRU_UNZIP_SEARCH_SCANNED_PER_CALL,
 | 
						|
 | 
						|
	/* Buffer Page I/O specific counters. */
 | 
						|
	MONITOR_MODULE_BUF_PAGE,
 | 
						|
	MONITOR_INDEX_LEAF_PAGE_READ,
 | 
						|
	MONITOR_INDEX_NON_LEAF_PAGE_READ,
 | 
						|
	MONITOR_UNDO_LOG_PAGE_READ,
 | 
						|
	MONITOR_INODE_PAGE_READ,
 | 
						|
	MONITOR_SYSTEM_PAGE_READ,
 | 
						|
	MONITOR_TRX_SYSTEM_PAGE_READ,
 | 
						|
	MONITOR_FSP_HDR_PAGE_READ,
 | 
						|
	MONITOR_XDES_PAGE_READ,
 | 
						|
	MONITOR_BLOB_PAGE_READ,
 | 
						|
	MONITOR_ZBLOB_PAGE_READ,
 | 
						|
	MONITOR_ZBLOB2_PAGE_READ,
 | 
						|
	MONITOR_OTHER_PAGE_READ,
 | 
						|
	MONITOR_INDEX_LEAF_PAGE_WRITTEN,
 | 
						|
	MONITOR_INDEX_NON_LEAF_PAGE_WRITTEN,
 | 
						|
	MONITOR_UNDO_LOG_PAGE_WRITTEN,
 | 
						|
	MONITOR_INODE_PAGE_WRITTEN,
 | 
						|
	MONITOR_SYSTEM_PAGE_WRITTEN,
 | 
						|
	MONITOR_TRX_SYSTEM_PAGE_WRITTEN,
 | 
						|
	MONITOR_FSP_HDR_PAGE_WRITTEN,
 | 
						|
	MONITOR_XDES_PAGE_WRITTEN,
 | 
						|
	MONITOR_BLOB_PAGE_WRITTEN,
 | 
						|
	MONITOR_ZBLOB_PAGE_WRITTEN,
 | 
						|
	MONITOR_ZBLOB2_PAGE_WRITTEN,
 | 
						|
	MONITOR_OTHER_PAGE_WRITTEN,
 | 
						|
 | 
						|
	/* OS level counters (I/O) */
 | 
						|
	MONITOR_MODULE_OS,
 | 
						|
	MONITOR_OVLD_OS_FILE_READ,
 | 
						|
	MONITOR_OVLD_OS_FILE_WRITE,
 | 
						|
	MONITOR_OVLD_OS_FSYNC,
 | 
						|
	MONITOR_OS_PENDING_READS,
 | 
						|
	MONITOR_OS_PENDING_WRITES,
 | 
						|
	MONITOR_OVLD_OS_LOG_WRITTEN,
 | 
						|
 | 
						|
	/* Transaction related counters */
 | 
						|
	MONITOR_MODULE_TRX,
 | 
						|
	MONITOR_TRX_RW_COMMIT,
 | 
						|
	MONITOR_TRX_RO_COMMIT,
 | 
						|
	MONITOR_TRX_NL_RO_COMMIT,
 | 
						|
	MONITOR_TRX_COMMIT_UNDO,
 | 
						|
	MONITOR_TRX_ROLLBACK,
 | 
						|
	MONITOR_TRX_ROLLBACK_SAVEPOINT,
 | 
						|
	MONITOR_RSEG_HISTORY_LEN,
 | 
						|
	MONITOR_NUM_UNDO_SLOT_USED,
 | 
						|
	MONITOR_NUM_UNDO_SLOT_CACHED,
 | 
						|
	MONITOR_RSEG_CUR_SIZE,
 | 
						|
 | 
						|
	/* Purge related counters */
 | 
						|
	MONITOR_MODULE_PURGE,
 | 
						|
	MONITOR_N_DEL_ROW_PURGE,
 | 
						|
	MONITOR_N_UPD_EXIST_EXTERN,
 | 
						|
	MONITOR_PURGE_INVOKED,
 | 
						|
	MONITOR_PURGE_N_PAGE_HANDLED,
 | 
						|
	MONITOR_DML_PURGE_DELAY,
 | 
						|
	MONITOR_PURGE_STOP_COUNT,
 | 
						|
	MONITOR_PURGE_RESUME_COUNT,
 | 
						|
 | 
						|
	/* Recovery related counters */
 | 
						|
	MONITOR_MODULE_RECOVERY,
 | 
						|
	MONITOR_OVLD_CHECKPOINTS,
 | 
						|
	MONITOR_OVLD_LSN_FLUSHDISK,
 | 
						|
	MONITOR_OVLD_LSN_CHECKPOINT,
 | 
						|
	MONITOR_OVLD_LSN_CURRENT,
 | 
						|
	MONITOR_LSN_CHECKPOINT_AGE,
 | 
						|
	MONITOR_OVLD_BUF_OLDEST_LSN,
 | 
						|
	MONITOR_OVLD_MAX_AGE_ASYNC,
 | 
						|
	MONITOR_OVLD_LOG_WAITS,
 | 
						|
	MONITOR_OVLD_LOG_WRITE_REQUEST,
 | 
						|
	MONITOR_OVLD_LOG_WRITES,
 | 
						|
 | 
						|
	/* Page Manager related counters */
 | 
						|
	MONITOR_MODULE_PAGE,
 | 
						|
	MONITOR_PAGE_COMPRESS,
 | 
						|
	MONITOR_PAGE_DECOMPRESS,
 | 
						|
	MONITOR_PAD_INCREMENTS,
 | 
						|
	MONITOR_PAD_DECREMENTS,
 | 
						|
	/* New monitor variables for page compression */
 | 
						|
	MONITOR_OVLD_PAGE_COMPRESS_SAVED,
 | 
						|
	MONITOR_OVLD_PAGES_PAGE_COMPRESSED,
 | 
						|
	MONITOR_OVLD_PAGE_COMPRESSED_TRIM_OP,
 | 
						|
	MONITOR_OVLD_PAGES_PAGE_DECOMPRESSED,
 | 
						|
	MONITOR_OVLD_PAGES_PAGE_COMPRESSION_ERROR,
 | 
						|
 | 
						|
	/* New monitor variables for page encryption */
 | 
						|
	MONITOR_OVLD_PAGES_ENCRYPTED,
 | 
						|
	MONITOR_OVLD_PAGES_DECRYPTED,
 | 
						|
 | 
						|
	/* Index related counters */
 | 
						|
	MONITOR_MODULE_INDEX,
 | 
						|
	MONITOR_INDEX_SPLIT,
 | 
						|
	MONITOR_INDEX_MERGE_ATTEMPTS,
 | 
						|
	MONITOR_INDEX_MERGE_SUCCESSFUL,
 | 
						|
	MONITOR_INDEX_REORG_ATTEMPTS,
 | 
						|
	MONITOR_INDEX_REORG_SUCCESSFUL,
 | 
						|
	MONITOR_INDEX_DISCARD,
 | 
						|
 | 
						|
#ifdef BTR_CUR_HASH_ADAPT
 | 
						|
	/* Adaptive Hash Index related counters */
 | 
						|
	MONITOR_MODULE_ADAPTIVE_HASH,
 | 
						|
	MONITOR_OVLD_ADAPTIVE_HASH_SEARCH,
 | 
						|
	MONITOR_OVLD_ADAPTIVE_HASH_SEARCH_BTREE,
 | 
						|
	MONITOR_ADAPTIVE_HASH_PAGE_ADDED,
 | 
						|
	MONITOR_ADAPTIVE_HASH_PAGE_REMOVED,
 | 
						|
	MONITOR_ADAPTIVE_HASH_ROW_ADDED,
 | 
						|
	MONITOR_ADAPTIVE_HASH_ROW_REMOVED,
 | 
						|
	MONITOR_ADAPTIVE_HASH_ROW_REMOVE_NOT_FOUND,
 | 
						|
	MONITOR_ADAPTIVE_HASH_ROW_UPDATED,
 | 
						|
#endif /* BTR_CUR_HASH_ADAPT */
 | 
						|
 | 
						|
	/* Tablespace related counters */
 | 
						|
	MONITOR_MODULE_FIL_SYSTEM,
 | 
						|
	MONITOR_OVLD_N_FILE_OPENED,
 | 
						|
 | 
						|
	/* Counters for server operations */
 | 
						|
	MONITOR_MODULE_SERVER,
 | 
						|
	MONITOR_MASTER_THREAD_SLEEP,
 | 
						|
	MONITOR_OVLD_SERVER_ACTIVITY,
 | 
						|
	MONITOR_MASTER_ACTIVE_LOOPS,
 | 
						|
	MONITOR_MASTER_IDLE_LOOPS,
 | 
						|
	MONITOR_SRV_LOG_FLUSH_MICROSECOND,
 | 
						|
	MONITOR_SRV_DICT_LRU_MICROSECOND,
 | 
						|
	MONITOR_SRV_DICT_LRU_EVICT_COUNT_ACTIVE,
 | 
						|
	MONITOR_SRV_DICT_LRU_EVICT_COUNT_IDLE,
 | 
						|
	MONITOR_OVLD_SRV_DBLWR_WRITES,
 | 
						|
	MONITOR_OVLD_SRV_DBLWR_PAGES_WRITTEN,
 | 
						|
	MONITOR_OVLD_SRV_PAGE_SIZE,
 | 
						|
 | 
						|
	/* Data DDL related counters */
 | 
						|
	MONITOR_MODULE_DDL_STATS,
 | 
						|
	MONITOR_BACKGROUND_DROP_INDEX,
 | 
						|
	MONITOR_ONLINE_CREATE_INDEX,
 | 
						|
	MONITOR_PENDING_ALTER_TABLE,
 | 
						|
	MONITOR_ALTER_TABLE_SORT_FILES,
 | 
						|
	MONITOR_ALTER_TABLE_LOG_FILES,
 | 
						|
 | 
						|
	MONITOR_MODULE_ICP,
 | 
						|
	MONITOR_ICP_ATTEMPTS,
 | 
						|
	MONITOR_ICP_NO_MATCH,
 | 
						|
	MONITOR_ICP_OUT_OF_RANGE,
 | 
						|
	MONITOR_ICP_MATCH,
 | 
						|
 | 
						|
	/* This is used only for control system to turn
 | 
						|
	on/off and reset all monitor counters */
 | 
						|
	MONITOR_ALL_COUNTER,
 | 
						|
 | 
						|
	/* This must be the last member */
 | 
						|
	NUM_MONITOR
 | 
						|
};
 | 
						|
 | 
						|
/** This informs the monitor control system to turn
 | 
						|
on/off and reset monitor counters through wild card match */
 | 
						|
#define	MONITOR_WILDCARD_MATCH		(NUM_MONITOR + 1)
 | 
						|
 | 
						|
/** Cannot find monitor counter with a specified name */
 | 
						|
#define	MONITOR_NO_MATCH		(NUM_MONITOR + 2)
 | 
						|
 | 
						|
/** struct monitor_info describes the basic/static information
 | 
						|
about each monitor counter. */
 | 
						|
struct monitor_info_t {
 | 
						|
	const char*	monitor_name;	/*!< Monitor name */
 | 
						|
	const char*	monitor_module;	/*!< Sub Module the monitor
 | 
						|
					belongs to */
 | 
						|
	const char*	monitor_desc;	/*!< Brief desc of monitor counter */
 | 
						|
	monitor_type_t	monitor_type;	/*!< Type of Monitor Info */
 | 
						|
	monitor_id_t	monitor_related_id;/*!< Monitor ID of counter that
 | 
						|
					related to this monitor. This is
 | 
						|
					set when the monitor belongs to
 | 
						|
					a "monitor set" */
 | 
						|
	monitor_id_t	monitor_id;	/*!< Monitor ID as defined in enum
 | 
						|
					monitor_id_t */
 | 
						|
};
 | 
						|
 | 
						|
/** Following are the "set_option" values allowed for
 | 
						|
srv_mon_process_existing_counter() and srv_mon_process_existing_counter()
 | 
						|
functions. To turn on/off/reset the monitor counters. */
 | 
						|
enum mon_option_t {
 | 
						|
	MONITOR_TURN_ON = 1,		/*!< Turn on the counter */
 | 
						|
	MONITOR_TURN_OFF,		/*!< Turn off the counter */
 | 
						|
	MONITOR_RESET_VALUE,		/*!< Reset current values */
 | 
						|
	MONITOR_RESET_ALL_VALUE,	/*!< Reset all values */
 | 
						|
	MONITOR_GET_VALUE		/*!< Option for
 | 
						|
					srv_mon_process_existing_counter()
 | 
						|
					function */
 | 
						|
};
 | 
						|
 | 
						|
/** Number of bit in a ulint datatype */
 | 
						|
#define	NUM_BITS_ULINT	(sizeof(ulint) * CHAR_BIT)
 | 
						|
 | 
						|
/** This "monitor_set_tbl" is a bitmap records whether a particular monitor
 | 
						|
counter has been turned on or off */
 | 
						|
extern Atomic_relaxed<ulint>
 | 
						|
    monitor_set_tbl[(NUM_MONITOR + NUM_BITS_ULINT - 1) / NUM_BITS_ULINT];
 | 
						|
 | 
						|
/** Macros to turn on/off the control bit in monitor_set_tbl for a monitor
 | 
						|
counter option. */
 | 
						|
#define MONITOR_ON(monitor)                                                   \
 | 
						|
  (monitor_set_tbl[unsigned(monitor) / NUM_BITS_ULINT].fetch_or(              \
 | 
						|
      (ulint(1) << (unsigned(monitor) % NUM_BITS_ULINT))))
 | 
						|
 | 
						|
#define MONITOR_OFF(monitor)                                                  \
 | 
						|
  (monitor_set_tbl[unsigned(monitor) / NUM_BITS_ULINT].fetch_and(             \
 | 
						|
      ~(ulint(1) << (unsigned(monitor) % NUM_BITS_ULINT))))
 | 
						|
 | 
						|
/** Check whether the requested monitor is turned on/off */
 | 
						|
#define MONITOR_IS_ON(monitor)                                                \
 | 
						|
  (monitor_set_tbl[unsigned(monitor) / NUM_BITS_ULINT] &                      \
 | 
						|
   (ulint(1) << (unsigned(monitor) % NUM_BITS_ULINT)))
 | 
						|
 | 
						|
/** The actual monitor counter array that records each monitor counter
 | 
						|
value */
 | 
						|
extern monitor_value_t	 innodb_counter_value[NUM_MONITOR];
 | 
						|
 | 
						|
/** Following are macro defines for basic monitor counter manipulations.
 | 
						|
Please note we do not provide any synchronization for these monitor
 | 
						|
operations due to performance consideration. Most counters can
 | 
						|
be placed under existing mutex protections in respective code
 | 
						|
module. */
 | 
						|
 | 
						|
/** Macros to access various fields of a monitor counters */
 | 
						|
#define MONITOR_FIELD(monitor, field)			\
 | 
						|
		(innodb_counter_value[monitor].field)
 | 
						|
 | 
						|
#define MONITOR_VALUE(monitor)				\
 | 
						|
		MONITOR_FIELD(monitor, mon_value)
 | 
						|
 | 
						|
#define MONITOR_MAX_VALUE(monitor)			\
 | 
						|
		MONITOR_FIELD(monitor, mon_max_value)
 | 
						|
 | 
						|
#define MONITOR_MIN_VALUE(monitor)			\
 | 
						|
		MONITOR_FIELD(monitor, mon_min_value)
 | 
						|
 | 
						|
#define MONITOR_VALUE_RESET(monitor)			\
 | 
						|
		MONITOR_FIELD(monitor, mon_value_reset)
 | 
						|
 | 
						|
#define MONITOR_MAX_VALUE_START(monitor)		\
 | 
						|
		MONITOR_FIELD(monitor, mon_max_value_start)
 | 
						|
 | 
						|
#define MONITOR_MIN_VALUE_START(monitor)		\
 | 
						|
		MONITOR_FIELD(monitor, mon_min_value_start)
 | 
						|
 | 
						|
#define MONITOR_LAST_VALUE(monitor)			\
 | 
						|
		MONITOR_FIELD(monitor, mon_last_value)
 | 
						|
 | 
						|
#define MONITOR_START_VALUE(monitor)			\
 | 
						|
		MONITOR_FIELD(monitor, mon_start_value)
 | 
						|
 | 
						|
#define MONITOR_VALUE_SINCE_START(monitor)		\
 | 
						|
		(MONITOR_VALUE(monitor) + MONITOR_VALUE_RESET(monitor))
 | 
						|
 | 
						|
#define MONITOR_STATUS(monitor)				\
 | 
						|
		MONITOR_FIELD(monitor, mon_status)
 | 
						|
 | 
						|
#define MONITOR_SET_START(monitor)					\
 | 
						|
	do {								\
 | 
						|
		MONITOR_STATUS(monitor) = MONITOR_STARTED;		\
 | 
						|
		MONITOR_FIELD((monitor), mon_start_time) = time(NULL);	\
 | 
						|
	} while (0)
 | 
						|
 | 
						|
#define MONITOR_SET_OFF(monitor)					\
 | 
						|
	do {								\
 | 
						|
		MONITOR_STATUS(monitor) = MONITOR_STOPPED;		\
 | 
						|
		MONITOR_FIELD((monitor), mon_stop_time) = time(NULL);	\
 | 
						|
	} while (0)
 | 
						|
 | 
						|
#define	MONITOR_INIT_ZERO_VALUE		0
 | 
						|
 | 
						|
/** Max and min values are initialized when we first turn on the monitor
 | 
						|
counter, and set the MONITOR_STATUS. */
 | 
						|
#define MONITOR_MAX_MIN_NOT_INIT(monitor)				\
 | 
						|
		(MONITOR_STATUS(monitor) == MONITOR_INIT_ZERO_VALUE	\
 | 
						|
		 && MONITOR_MIN_VALUE(monitor) == MONITOR_INIT_ZERO_VALUE \
 | 
						|
		 && MONITOR_MAX_VALUE(monitor) == MONITOR_INIT_ZERO_VALUE)
 | 
						|
 | 
						|
#define MONITOR_INIT(monitor)						\
 | 
						|
	if (MONITOR_MAX_MIN_NOT_INIT(monitor)) {			\
 | 
						|
		MONITOR_MIN_VALUE(monitor) = MIN_RESERVED;		\
 | 
						|
		MONITOR_MIN_VALUE_START(monitor) = MIN_RESERVED;	\
 | 
						|
		MONITOR_MAX_VALUE(monitor) = MAX_RESERVED;		\
 | 
						|
		MONITOR_MAX_VALUE_START(monitor) = MAX_RESERVED;	\
 | 
						|
	}
 | 
						|
 | 
						|
/** Macros to increment/decrement the counters. The normal
 | 
						|
monitor counter operation expects appropriate synchronization
 | 
						|
already exists. No additional mutex is necessary when operating
 | 
						|
on the counters */
 | 
						|
#define	MONITOR_INC(monitor)						\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		MONITOR_VALUE(monitor)++;				\
 | 
						|
		if (MONITOR_VALUE(monitor) > MONITOR_MAX_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MAX_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
/** Atomically increment a monitor counter.
 | 
						|
Use MONITOR_INC if appropriate mutex protection exists.
 | 
						|
@param monitor	monitor to be incremented by 1
 | 
						|
@param enabled	whether the monitor is enabled */
 | 
						|
#define MONITOR_ATOMIC_INC_LOW(monitor, enabled)			\
 | 
						|
	if (enabled) {							\
 | 
						|
		ib_uint64_t	value;					\
 | 
						|
		value  = my_atomic_add64_explicit(			\
 | 
						|
			(int64*) &MONITOR_VALUE(monitor), 1,		\
 | 
						|
			MY_MEMORY_ORDER_RELAXED) + 1;			\
 | 
						|
		/* Note: This is not 100% accurate because of the	\
 | 
						|
		inherent race, we ignore it due to performance. */	\
 | 
						|
		if (value > (ib_uint64_t) MONITOR_MAX_VALUE(monitor)) {	\
 | 
						|
			MONITOR_MAX_VALUE(monitor) = value;		\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
/** Atomically decrement a monitor counter.
 | 
						|
Use MONITOR_DEC if appropriate mutex protection exists.
 | 
						|
@param monitor	monitor to be decremented by 1
 | 
						|
@param enabled	whether the monitor is enabled */
 | 
						|
#define MONITOR_ATOMIC_DEC_LOW(monitor, enabled)			\
 | 
						|
	if (enabled) {							\
 | 
						|
		ib_uint64_t	value;					\
 | 
						|
		value = my_atomic_add64_explicit(			\
 | 
						|
			(int64*) &MONITOR_VALUE(monitor), -1,		\
 | 
						|
			MY_MEMORY_ORDER_RELAXED) - 1;			\
 | 
						|
		/* Note: This is not 100% accurate because of the	\
 | 
						|
		inherent race, we ignore it due to performance. */	\
 | 
						|
		if (value < (ib_uint64_t) MONITOR_MIN_VALUE(monitor)) {	\
 | 
						|
			MONITOR_MIN_VALUE(monitor) = value;		\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
/** Atomically increment a monitor counter if it is enabled.
 | 
						|
Use MONITOR_INC if appropriate mutex protection exists.
 | 
						|
@param monitor	monitor to be incremented by 1 */
 | 
						|
#define MONITOR_ATOMIC_INC(monitor)				\
 | 
						|
	MONITOR_ATOMIC_INC_LOW(monitor, MONITOR_IS_ON(monitor))
 | 
						|
/** Atomically decrement a monitor counter if it is enabled.
 | 
						|
Use MONITOR_DEC if appropriate mutex protection exists.
 | 
						|
@param monitor	monitor to be decremented by 1 */
 | 
						|
#define MONITOR_ATOMIC_DEC(monitor)				\
 | 
						|
	MONITOR_ATOMIC_DEC_LOW(monitor, MONITOR_IS_ON(monitor))
 | 
						|
 | 
						|
#define	MONITOR_DEC(monitor)						\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		MONITOR_VALUE(monitor)--;				\
 | 
						|
		if (MONITOR_VALUE(monitor) < MONITOR_MIN_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MIN_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
#ifdef HAVE_MEM_CHECK
 | 
						|
# define MONITOR_CHECK_DEFINED(value) do {	\
 | 
						|
    mon_type_t m __attribute__((unused))= value;        \
 | 
						|
	MEM_CHECK_DEFINED(&m, sizeof m);	\
 | 
						|
} while (0)
 | 
						|
#else /* HAVE_MEM_CHECK */
 | 
						|
# define MONITOR_CHECK_DEFINED(value) (void) 0
 | 
						|
#endif /* HAVE_MEM_CHECK */
 | 
						|
 | 
						|
#define	MONITOR_INC_VALUE(monitor, value)				\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		MONITOR_VALUE(monitor) += (mon_type_t) (value);		\
 | 
						|
		if (MONITOR_VALUE(monitor) > MONITOR_MAX_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MAX_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
#define	MONITOR_DEC_VALUE(monitor, value)				\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		ut_ad(MONITOR_VALUE(monitor) >= (mon_type_t) (value);	\
 | 
						|
		MONITOR_VALUE(monitor) -= (mon_type_t) (value);		\
 | 
						|
		if (MONITOR_VALUE(monitor) < MONITOR_MIN_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MIN_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
/* Increment/decrement counter without check the monitor on/off bit, which
 | 
						|
could already be checked as a module group */
 | 
						|
#define	MONITOR_INC_NOCHECK(monitor)					\
 | 
						|
	do {								\
 | 
						|
		MONITOR_VALUE(monitor)++;				\
 | 
						|
		if (MONITOR_VALUE(monitor) > MONITOR_MAX_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MAX_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	} while (0)							\
 | 
						|
 | 
						|
#define	MONITOR_DEC_NOCHECK(monitor)					\
 | 
						|
	do {								\
 | 
						|
		MONITOR_VALUE(monitor)--;				\
 | 
						|
		if (MONITOR_VALUE(monitor) < MONITOR_MIN_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MIN_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	} while (0)
 | 
						|
 | 
						|
/** Directly set a monitor counter's value */
 | 
						|
#define	MONITOR_SET(monitor, value)					\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		MONITOR_VALUE(monitor) = (mon_type_t) (value);		\
 | 
						|
		if (MONITOR_VALUE(monitor) > MONITOR_MAX_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MAX_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
		if (MONITOR_VALUE(monitor) < MONITOR_MIN_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MIN_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
/** Add time difference between now and input "value" (in seconds) to the
 | 
						|
monitor counter
 | 
						|
@param monitor monitor to update for the time difference
 | 
						|
@param value the start time value */
 | 
						|
#define	MONITOR_INC_TIME_IN_MICRO_SECS(monitor, value)			\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		uintmax_t	old_time = value;			\
 | 
						|
		value = microsecond_interval_timer();			\
 | 
						|
		MONITOR_VALUE(monitor) += (mon_type_t) (value - old_time);\
 | 
						|
	}
 | 
						|
 | 
						|
/** This macro updates 3 counters in one call. However, it only checks the
 | 
						|
main/first monitor counter 'monitor', to see it is on or off to decide
 | 
						|
whether to do the update.
 | 
						|
@param monitor the main monitor counter to update. It accounts for
 | 
						|
			the accumulative value for the counter.
 | 
						|
@param monitor_n_calls counter that counts number of times this macro is
 | 
						|
			called
 | 
						|
@param monitor_per_call counter that records the current and max value of
 | 
						|
			each incremental value
 | 
						|
@param value incremental value to record this time */
 | 
						|
#define MONITOR_INC_VALUE_CUMULATIVE(					\
 | 
						|
		monitor, monitor_n_calls, monitor_per_call, value)	\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		MONITOR_VALUE(monitor_n_calls)++;			\
 | 
						|
		MONITOR_VALUE(monitor_per_call) = (mon_type_t) (value);	\
 | 
						|
		if (MONITOR_VALUE(monitor_per_call)			\
 | 
						|
		    > MONITOR_MAX_VALUE(monitor_per_call)) {		\
 | 
						|
			MONITOR_MAX_VALUE(monitor_per_call) =		\
 | 
						|
				 (mon_type_t) (value);			\
 | 
						|
		}							\
 | 
						|
		MONITOR_VALUE(monitor) += (mon_type_t) (value);		\
 | 
						|
		if (MONITOR_VALUE(monitor) > MONITOR_MAX_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MAX_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
/** Directly set a monitor counter's value, and if the value
 | 
						|
is monotonically increasing, only max value needs to be updated */
 | 
						|
#define	MONITOR_SET_UPD_MAX_ONLY(monitor, value)			\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		MONITOR_VALUE(monitor) = (mon_type_t) (value);		\
 | 
						|
		if (MONITOR_VALUE(monitor) > MONITOR_MAX_VALUE(monitor)) {  \
 | 
						|
			MONITOR_MAX_VALUE(monitor) = MONITOR_VALUE(monitor);\
 | 
						|
		}							\
 | 
						|
	}
 | 
						|
 | 
						|
/** Some values such as log sequence number are monotonically increasing
 | 
						|
number, do not need to record max/min values */
 | 
						|
#define MONITOR_SET_SIMPLE(monitor, value)				\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	if (MONITOR_IS_ON(monitor)) {					\
 | 
						|
		MONITOR_VALUE(monitor) = (mon_type_t) (value);		\
 | 
						|
	}
 | 
						|
 | 
						|
/** Reset the monitor value and max/min value to zero. The reset
 | 
						|
operation would only be conducted when the counter is turned off */
 | 
						|
#define MONITOR_RESET_ALL(monitor)					\
 | 
						|
	do {								\
 | 
						|
		MONITOR_VALUE(monitor) = MONITOR_INIT_ZERO_VALUE;	\
 | 
						|
		MONITOR_MAX_VALUE(monitor) = MAX_RESERVED;		\
 | 
						|
		MONITOR_MIN_VALUE(monitor) = MIN_RESERVED;		\
 | 
						|
		MONITOR_VALUE_RESET(monitor) = MONITOR_INIT_ZERO_VALUE;	\
 | 
						|
		MONITOR_MAX_VALUE_START(monitor) = MAX_RESERVED;	\
 | 
						|
		MONITOR_MIN_VALUE_START(monitor) = MIN_RESERVED;	\
 | 
						|
		MONITOR_LAST_VALUE(monitor) = MONITOR_INIT_ZERO_VALUE;	\
 | 
						|
		MONITOR_FIELD(monitor, mon_start_time) =		\
 | 
						|
					MONITOR_INIT_ZERO_VALUE;	\
 | 
						|
		MONITOR_FIELD(monitor, mon_stop_time) =			\
 | 
						|
					MONITOR_INIT_ZERO_VALUE;	\
 | 
						|
		MONITOR_FIELD(monitor, mon_reset_time) =		\
 | 
						|
					MONITOR_INIT_ZERO_VALUE;	\
 | 
						|
	} while (0)
 | 
						|
 | 
						|
/** Following four macros defines necessary operations to fetch and
 | 
						|
consolidate information from existing system status variables. */
 | 
						|
 | 
						|
/** Save the passed-in value to mon_start_value field of monitor
 | 
						|
counters */
 | 
						|
#define MONITOR_SAVE_START(monitor, value) do {				\
 | 
						|
	MONITOR_CHECK_DEFINED(value);					\
 | 
						|
	(MONITOR_START_VALUE(monitor) =					\
 | 
						|
		(mon_type_t) (value) - MONITOR_VALUE_RESET(monitor));	\
 | 
						|
	} while (0)
 | 
						|
 | 
						|
/** Save the passed-in value to mon_last_value field of monitor
 | 
						|
counters */
 | 
						|
#define MONITOR_SAVE_LAST(monitor)					\
 | 
						|
	do {								\
 | 
						|
		MONITOR_LAST_VALUE(monitor) = MONITOR_VALUE(monitor);	\
 | 
						|
		MONITOR_START_VALUE(monitor) += MONITOR_VALUE(monitor);	\
 | 
						|
	} while (0)
 | 
						|
 | 
						|
/** Set monitor value to the difference of value and mon_start_value
 | 
						|
compensated by mon_last_value if accumulated value is required. */
 | 
						|
#define MONITOR_SET_DIFF(monitor, value)				\
 | 
						|
	MONITOR_SET_UPD_MAX_ONLY(monitor, ((value)			\
 | 
						|
	- MONITOR_VALUE_RESET(monitor)					\
 | 
						|
	- MONITOR_FIELD(monitor, mon_start_value)			\
 | 
						|
	+ MONITOR_FIELD(monitor, mon_last_value)))
 | 
						|
 | 
						|
/****************************************************************//**
 | 
						|
Get monitor's monitor_info_t by its monitor id (index into the
 | 
						|
innodb_counter_info array
 | 
						|
@return Point to corresponding monitor_info_t, or NULL if no such
 | 
						|
monitor */
 | 
						|
monitor_info_t*
 | 
						|
srv_mon_get_info(
 | 
						|
/*=============*/
 | 
						|
	monitor_id_t	monitor_id);	/*!< id index into the
 | 
						|
					innodb_counter_info array */
 | 
						|
/****************************************************************//**
 | 
						|
Get monitor's name by its monitor id (index into the
 | 
						|
innodb_counter_info array
 | 
						|
@return corresponding monitor name, or NULL if no such
 | 
						|
monitor */
 | 
						|
const char*
 | 
						|
srv_mon_get_name(
 | 
						|
/*=============*/
 | 
						|
	monitor_id_t	monitor_id);	/*!< id index into the
 | 
						|
					innodb_counter_info array */
 | 
						|
 | 
						|
/****************************************************************//**
 | 
						|
Turn on/off/reset monitor counters in a module. If module_value
 | 
						|
is NUM_MONITOR then turn on all monitor counters.
 | 
						|
@return 0 if successful, or the first monitor that cannot be
 | 
						|
turned on because it is already turned on. */
 | 
						|
void
 | 
						|
srv_mon_set_module_control(
 | 
						|
/*=======================*/
 | 
						|
	monitor_id_t	module_id,	/*!< in: Module ID as in
 | 
						|
					monitor_counter_id. If it is
 | 
						|
					set to NUM_MONITOR, this means
 | 
						|
					we shall turn on all the counters */
 | 
						|
	mon_option_t	set_option);	/*!< in: Turn on/off reset the
 | 
						|
					counter */
 | 
						|
/****************************************************************//**
 | 
						|
This function consolidates some existing server counters used
 | 
						|
by "system status variables". These existing system variables do not have
 | 
						|
mechanism to start/stop and reset the counters, so we simulate these
 | 
						|
controls by remembering the corresponding counter values when the
 | 
						|
corresponding monitors are turned on/off/reset, and do appropriate
 | 
						|
mathematics to deduct the actual value. */
 | 
						|
void
 | 
						|
srv_mon_process_existing_counter(
 | 
						|
/*=============================*/
 | 
						|
	monitor_id_t	monitor_id,	/*!< in: the monitor's ID as in
 | 
						|
					monitor_counter_id */
 | 
						|
	mon_option_t	set_option);	/*!< in: Turn on/off reset the
 | 
						|
					counter */
 | 
						|
/*************************************************************//**
 | 
						|
This function is used to calculate the maximum counter value
 | 
						|
since the start of monitor counter
 | 
						|
@return max counter value since start. */
 | 
						|
UNIV_INLINE
 | 
						|
mon_type_t
 | 
						|
srv_mon_calc_max_since_start(
 | 
						|
/*=========================*/
 | 
						|
	monitor_id_t	monitor);	/*!< in: monitor id */
 | 
						|
/*************************************************************//**
 | 
						|
This function is used to calculate the minimum counter value
 | 
						|
since the start of monitor counter
 | 
						|
@return min counter value since start. */
 | 
						|
UNIV_INLINE
 | 
						|
mon_type_t
 | 
						|
srv_mon_calc_min_since_start(
 | 
						|
/*=========================*/
 | 
						|
	monitor_id_t	monitor);	/*!< in: monitor id*/
 | 
						|
/*************************************************************//**
 | 
						|
Reset a monitor, create a new base line with the current monitor
 | 
						|
value. This baseline is recorded by MONITOR_VALUE_RESET(monitor) */
 | 
						|
void
 | 
						|
srv_mon_reset(
 | 
						|
/*==========*/
 | 
						|
	monitor_id_t	monitor);	/*!< in: monitor id*/
 | 
						|
/*************************************************************//**
 | 
						|
This function resets all values of a monitor counter */
 | 
						|
UNIV_INLINE
 | 
						|
void
 | 
						|
srv_mon_reset_all(
 | 
						|
/*==============*/
 | 
						|
	monitor_id_t	monitor);	/*!< in: monitor id*/
 | 
						|
/*************************************************************//**
 | 
						|
Turn on monitor counters that are marked as default ON. */
 | 
						|
void
 | 
						|
srv_mon_default_on(void);
 | 
						|
/*====================*/
 | 
						|
 | 
						|
#include "srv0mon.inl"
 | 
						|
 | 
						|
#endif
 |