usr/src/cmd/filebench/common/threadflow.h
author aw148015
Tue, 26 Feb 2008 11:39:00 -0800
changeset 6084 d5f45b4dae7e
parent 5184 da60d2b4a9e2
child 6212 d9dcad6dd79c
permissions -rw-r--r--
6581656 invalid data should be friendlier to users 6592825 filebench should allow certain workloads run to full completion w/out requiring runtime specified
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5184
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     1
/*
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     2
 * CDDL HEADER START
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     3
 *
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     7
 *
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    11
 * and limitations under the License.
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    12
 *
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    18
 *
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    19
 * CDDL HEADER END
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    20
 */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    21
/*
6084
d5f45b4dae7e 6581656 invalid data should be friendlier to users
aw148015
parents: 5184
diff changeset
    22
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
5184
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    23
 * Use is subject to license terms.
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    24
 */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    25
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    26
#ifndef _FB_THREADFLOW_H
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    27
#define	_FB_THREADFLOW_H
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    28
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    30
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    31
#include "config.h"
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    32
#include <pthread.h>
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    33
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    34
#ifndef HAVE_CADDR_T1
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    35
/* typedef char	    *caddr_t; */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    36
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    37
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    38
#ifdef LINUX_PORT
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    39
#include <linux/types.h>  /* for "caddr_t" */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    40
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    41
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    42
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    43
#ifdef HAVE_AIO
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    44
#include <aio.h>
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    45
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    46
#ifdef HAVE_PROCFS
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    47
#include <procfs.h>
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    48
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    49
#include "vars.h"
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    50
#include "procflow.h"
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    51
#include "fileset.h"
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    52
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    53
#ifdef	__cplusplus
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    54
extern "C" {
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    55
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    56
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    57
#define	AL_READ  1
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    58
#define	AL_WRITE 2
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    59
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    60
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    61
#ifdef HAVE_AIO
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    62
typedef struct aiolist {
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    63
	int		al_type;
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    64
	struct aiolist	*al_next;
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    65
	struct aiolist	*al_worknext;
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    66
	struct aiocb64	 al_aiocb;
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    67
} aiolist_t;
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    68
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    69
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    70
#define	THREADFLOW_MAXFD 128
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    71
#define	THREADFLOW_USEISM 0x1
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    72
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    73
typedef struct threadflow {
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    74
	char		tf_name[128];	/* Name */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    75
	int		tf_attrs;	/* Attributes */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    76
	int		tf_instance;	/* Instance number */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    77
	int		tf_running;	/* Thread running indicator */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    78
	int		tf_abort;	/* Shutdown thread */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    79
	int		tf_utid;	/* Unique id for thread */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    80
	struct procflow	*tf_process;	/* Back pointer to process */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    81
	pthread_t	tf_tid;		/* Thread id */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    82
	pthread_mutex_t	tf_lock;	/* Mutex around threadflow */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    83
	var_integer_t	tf_instances;	/* Number of instances for this flow */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    84
	struct threadflow *tf_next;	/* Next on proc list */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    85
	struct flowop	*tf_ops;	/* Flowop list */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    86
	caddr_t		tf_mem;		/* Private Memory */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    87
	var_integer_t	tf_memsize;	/* Private Memory size */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    88
	int		tf_fd[THREADFLOW_MAXFD + 1]; /* Thread local fd's */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    89
	filesetentry_t	*tf_fse[THREADFLOW_MAXFD + 1]; /* Thread local files */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    90
	int		tf_fdrotor;	/* Rotating fd within set */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    91
	flowstat_t	tf_stats;	/* Thread statistics */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    92
	hrtime_t	tf_stime;	/* Start time of op */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    93
#ifdef HAVE_PROCFS
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    94
	struct prusage	tf_susage;	/* Resource usage snapshot, start */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    95
	struct prusage	tf_eusage;	/* Resource usage snapshot, end */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    96
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    97
	int		tf_lwpusagefd;	/* /proc lwp usage fd */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    98
#ifdef HAVE_AIO
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
    99
	aiolist_t	*tf_aiolist;	/* List of async I/Os */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   100
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   101
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   102
} threadflow_t;
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   103
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   104
/* Thread attrs */
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   105
#define	THREADFLOW_DEFAULTMEM 1024*1024LL;
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   106
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   107
threadflow_t *threadflow_define(procflow_t *, char *name, threadflow_t *inherit,
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   108
    var_integer_t instances);
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   109
threadflow_t *threadflow_find(threadflow_t *, char *);
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   110
int threadflow_init(procflow_t *);
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   111
void flowop_start(threadflow_t *threadflow);
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   112
void threadflow_usage(void);
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   113
void threadflow_allstarted(pid_t pid, threadflow_t *threadflow);
6084
d5f45b4dae7e 6581656 invalid data should be friendlier to users
aw148015
parents: 5184
diff changeset
   114
void threadflow_delete_all(threadflow_t **threadlist, int wait_cnt);
5184
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   115
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   116
#ifdef	__cplusplus
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   117
}
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   118
#endif
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   119
da60d2b4a9e2 PSARC 2007/448 Filebench
ek110237
parents:
diff changeset
   120
#endif	/* _FB_THREADFLOW_H */