⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b_workload.h

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 H
字号:
/* * $Id: b_workload.h,v 1.7 2007/06/07 14:02:59 moshen Exp $ *//* * Macros to help with initializing/assigning key dbts */#define	INIT_KEY(key, config) do {				\	memset(&key, 0, sizeof(key));				\	if (config->orderedkeys) {				\		key.size = sizeof (u_int32_t);			\	} else if (config->ksize != 0) {			\		DB_BENCH_ASSERT(				\		    (key.data = malloc(key.size = config->ksize)) != NULL); \	} else {						\		key.data = kbuf;				\		key.size = 10;					\	}							\	} while (0)#define	GET_KEY_NEXT(key, config, kbuf, i) do {			\	size_t tmp_int;						\	if (config->orderedkeys) {				\		/* Will be sorted on little-endian system. */	\		tmp_int = i;					\		M_32_SWAP(tmp_int);				\		key.data = &tmp_int;				\	} else if (config->ksize == 0) {			\		/*						\		 * This will produce duplicate keys.		\		 * That is not such a big deal, since we are	\		 * using the same seed to srand each time,	\		 * the scenario is reproducible.		\		 */						\		(void)snprintf(kbuf, sizeof(kbuf), "%10d", rand()); \	} else {						\		/* TODO: Not sure of the best approach here. */	\		(void)snprintf(key.data, config->ksize, "%10lu", (u_long)i); \	}							\	} while (0)/* Taken from dbinc/db_swap.h */#undef	M_32_SWAP#define	M_32_SWAP(a) {							\	u_int32_t _tmp;							\	_tmp = (u_int32_t)a;						\	((u_int8_t *)&a)[0] = ((u_int8_t *)&_tmp)[3];			\	((u_int8_t *)&a)[1] = ((u_int8_t *)&_tmp)[2];			\	((u_int8_t *)&a)[2] = ((u_int8_t *)&_tmp)[1];			\	((u_int8_t *)&a)[3] = ((u_int8_t *)&_tmp)[0];			\}/* * A singly linked list, that maintains a pointer * to the start and the end of the queue. * Should be possible to use a STAILQ, but this seemed easier */typedef struct bench_qentry {	char data[10];	struct bench_qentry *next;}bench_qentry;typedef struct bench_q {	struct bench_qentry *head;	struct bench_qentry *tail;} bench_q;#define	BENCH_Q_TAIL_INSERT(queue, buf) do {		\	struct bench_qentry *entry;				\	DB_BENCH_ASSERT(				\	    (entry = malloc(sizeof(struct bench_qentry))) != NULL); \	memcpy(entry->data, buf, sizeof(entry->data));	\	if (queue.head == NULL)				\		queue.head = queue.tail = entry;	\	else {						\		queue.tail->next = entry;		\		queue.tail = entry;			\	}						\} while (0)#define	BENCH_Q_POP(queue, buf) do {			\	struct bench_qentry *popped = queue.head;	\	if (popped == NULL)				\		break;					\	if (queue.head->next == NULL)			\		queue.head = queue.tail = NULL;		\	else						\		queue.head = queue.head->next;		\	memcpy(buf, popped->data, sizeof(buf));	\	free(popped);					\} while (0)/* * Retrieve the head of the queue, save the data into user * buffer, and push the item back onto the end of the list. * Same functionality as pop/insert, but saves a malloc/free */#define	BENCH_Q_POP_PUSH(queue, buf) do {		\	struct bench_qentry *popped = queue.head;	\	if (popped == NULL)				\		break;					\	if (queue.head->next == NULL)			\		queue.head = queue.tail = NULL;		\	else						\		queue.head = queue.head->next;		\	memcpy(buf, popped->data, sizeof(buf));	\	if (queue.head == NULL)				\		queue.head = queue.tail = popped;	\	else {						\		queue.tail->next = popped;		\		queue.tail = popped;			\	}						\} while (0)typedef enum {	T_PUT,	T_GET,	T_DELETE,	T_PUT_GET,	T_PUT_DELETE,	T_PUT_GET_DELETE,	T_GET_DELETE,	T_MIXED} test_type;typedef struct{	size_t ksize;	size_t dsize;	size_t orderedkeys;	size_t num_dups;	size_t pagesz;	size_t cachesz;	size_t pcount;	size_t gcount;	size_t cursor_del;	size_t verbose;	test_type workload;	size_t seed;	size_t presize;	DBTYPE type;	char   *ts;	char   *message;	/* Fields used to store timing information */	db_timespec put_time;	db_timespec get_time;	db_timespec del_time;	db_timespec tot_time;} CONFIG;int usage __P((void));int s __P((DB *, const DBT *, const DBT *, DBT *));int dump_verbose_stats __P((DB *, CONFIG *));int run_mixed_workload __P((DB *, CONFIG *));int run_std_workload __P((DB *, CONFIG *));char *workload_str __P((int));int is_get_workload __P((int));int is_put_workload __P((int));int is_del_workload __P((int));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -