xref: /onnv-gate/usr/src/cmd/filebench/common/ipc.h (revision 6701:4213fadfdec4)
15184Sek110237 /*
25184Sek110237  * CDDL HEADER START
35184Sek110237  *
45184Sek110237  * The contents of this file are subject to the terms of the
55184Sek110237  * Common Development and Distribution License (the "License").
65184Sek110237  * You may not use this file except in compliance with the License.
75184Sek110237  *
85184Sek110237  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95184Sek110237  * or http://www.opensolaris.org/os/licensing.
105184Sek110237  * See the License for the specific language governing permissions
115184Sek110237  * and limitations under the License.
125184Sek110237  *
135184Sek110237  * When distributing Covered Code, include this CDDL HEADER in each
145184Sek110237  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155184Sek110237  * If applicable, add the following below this CDDL HEADER, with the
165184Sek110237  * fields enclosed by brackets "[]" replaced with your own identifying
175184Sek110237  * information: Portions Copyright [yyyy] [name of copyright owner]
185184Sek110237  *
195184Sek110237  * CDDL HEADER END
205184Sek110237  */
215184Sek110237 /*
226084Saw148015  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
235184Sek110237  * Use is subject to license terms.
245184Sek110237  */
255184Sek110237 
265184Sek110237 #ifndef _FB_IPC_H
275184Sek110237 #define	_FB_IPC_H
285184Sek110237 
295184Sek110237 #pragma ident	"%Z%%M%	%I%	%E% SMI"
305184Sek110237 
315184Sek110237 #include "config.h"
325184Sek110237 #include <pthread.h>
335184Sek110237 
345184Sek110237 #include "procflow.h"
355184Sek110237 #include "threadflow.h"
365184Sek110237 #include "fileset.h"
375184Sek110237 #include "flowop.h"
386212Saw148015 #include "fb_random.h"
395184Sek110237 #include "filebench.h"
405184Sek110237 
415184Sek110237 #ifdef	__cplusplus
425184Sek110237 extern "C" {
435184Sek110237 #endif
445184Sek110237 
455184Sek110237 #ifdef USE_PROCESS_MODEL
465184Sek110237 #define	FILEBENCH_MEMSIZE 4096
475184Sek110237 #else
485184Sek110237 #define	FILEBENCH_MEMSIZE 2048
495184Sek110237 #endif /* USE_PROCESS_MODEL */
505184Sek110237 
515184Sek110237 #define	FILEBENCH_NFILESETS FILEBENCH_MEMSIZE
525184Sek110237 #define	FILEBENCH_NFILESETENTRIES (1024 * 1024)
535184Sek110237 #define	FILEBENCH_NPROCFLOWS FILEBENCH_MEMSIZE
546212Saw148015 #define	FILEBENCH_NTHREADFLOWS (64 * FILEBENCH_MEMSIZE)
556212Saw148015 #define	FILEBENCH_NFLOWOPS (64 * FILEBENCH_MEMSIZE)
565184Sek110237 #define	FILEBENCH_NVARS FILEBENCH_MEMSIZE
576212Saw148015 #define	FILEBENCH_NRANDDISTS (FILEBENCH_MEMSIZE/4)
586212Saw148015 #define	FILEBENCH_FILESETPATHMEMORY (FILEBENCH_NFILESETENTRIES*FSE_MAXPATHLEN)
596212Saw148015 #define	FILEBENCH_STRINGMEMORY (FILEBENCH_NVARS * 128)
605184Sek110237 #define	FILEBENCH_MAXBITMAP FILEBENCH_NFILESETENTRIES
615184Sek110237 
625673Saw148015 #define	FILEBENCH_PROCFLOW	0
635673Saw148015 #define	FILEBENCH_THREADFLOW	1
645673Saw148015 #define	FILEBENCH_FLOWOP	2
656212Saw148015 #define	FILEBENCH_AVD		3
666212Saw148015 #define	FILEBENCH_VARIABLE	4
676212Saw148015 #define	FILEBENCH_FILESET	5
686212Saw148015 #define	FILEBENCH_FILESETENTRY	6
696212Saw148015 #define	FILEBENCH_RANDDIST	7
705673Saw148015 #define	FILEBENCH_TYPES		8
715184Sek110237 
725184Sek110237 #define	FILEBENCH_NSEMS 128
735184Sek110237 
746084Saw148015 #define	FILEBENCH_ABORT_ERROR  	1
756084Saw148015 #define	FILEBENCH_ABORT_DONE   	2
766084Saw148015 #define	FILEBENCH_ABORT_RSRC	3
776084Saw148015 
786084Saw148015 #define	FILEBENCH_MODE_TIMEOUT	0x0
796084Saw148015 #define	FILEBENCH_MODE_Q1STDONE	0x1
806084Saw148015 #define	FILEBENCH_MODE_QALLDONE	0x2
816084Saw148015 
825184Sek110237 typedef struct filebench_shm {
836391Saw148015 	pthread_mutex_t shm_fileset_lock;
846391Saw148015 	pthread_mutex_t shm_procflow_lock;
856391Saw148015 	pthread_mutex_t shm_threadflow_lock;
866391Saw148015 	pthread_mutex_t shm_flowop_lock;
876391Saw148015 	pthread_mutex_t shm_msg_lock;
886305Saw148015 	pthread_mutex_t shm_malloc_lock;
896305Saw148015 	pthread_mutex_t shm_ism_lock;
90*6701Saw148015 	pthread_mutex_t shm_procs_running_lock;	/* protects shm_procs_running */
916391Saw148015 	pthread_rwlock_t shm_run_lock;
926391Saw148015 	pthread_rwlock_t shm_flowop_find_lock;
935184Sek110237 
946305Saw148015 	char		*shm_string_ptr;
956305Saw148015 	char		*shm_path_ptr;
966391Saw148015 	fileset_t	*shm_filesetlist;
976391Saw148015 	flowop_t	*shm_flowoplist;
986391Saw148015 	procflow_t	*shm_proclist;
996391Saw148015 	var_t		*shm_var_list;
1006391Saw148015 	var_t		*shm_var_dyn_list;
1016212Saw148015 	randdist_t	*shm_rand_list;
1026550Saw148015 	var_t		*shm_var_loc_list;
1036391Saw148015 	int		shm_debug_level;
1046391Saw148015 	hrtime_t	shm_epoch;
1056305Saw148015 	hrtime_t	shm_starttime;
1066391Saw148015 	int		shm_bequiet;
1076391Saw148015 	key_t		shm_semkey;
1086391Saw148015 	int		shm_sys_semid;
1096391Saw148015 	int		shm_utid;
1106391Saw148015 	int		shm_log_fd;
1116391Saw148015 	int		shm_dump_fd;
1126391Saw148015 	char		shm_dump_filename[MAXPATHLEN];
1136391Saw148015 	pthread_mutex_t	shm_eventgen_lock;
1146391Saw148015 	pthread_cond_t	shm_eventgen_cv;
1156391Saw148015 	int		shm_eventgen_hz;
1166391Saw148015 	uint64_t	shm_eventgen_q;
1176391Saw148015 	char		shm_fscriptname[1024];
1185184Sek110237 	int		shm_id;
1195184Sek110237 	size_t		shm_required;
1205184Sek110237 	size_t		shm_allocated;
1215184Sek110237 	caddr_t		shm_addr;
1225184Sek110237 	char		*shm_ptr;
123*6701Saw148015 	int		shm_procs_running;
1246391Saw148015 	int		shm_f_abort;
1256084Saw148015 	int		shm_rmode;
1266084Saw148015 	int		shm_1st_err;
1276305Saw148015 	int		shm_bitmap[FILEBENCH_TYPES][FILEBENCH_MAXBITMAP];
1286305Saw148015 	int		shm_lastbitmapindex[FILEBENCH_TYPES];
1296391Saw148015 	char		shm_semids[FILEBENCH_NSEMS];
1305184Sek110237 
1316305Saw148015 	int		shm_marker;
1325184Sek110237 
1336305Saw148015 	fileset_t	shm_fileset[FILEBENCH_NFILESETS];
1346305Saw148015 	filesetentry_t	shm_filesetentry[FILEBENCH_NFILESETENTRIES];
1356305Saw148015 	char		shm_filesetpaths[FILEBENCH_FILESETPATHMEMORY];
1366305Saw148015 	procflow_t	shm_procflow[FILEBENCH_NPROCFLOWS];
1376305Saw148015 	threadflow_t	shm_threadflow[FILEBENCH_NTHREADFLOWS];
1386305Saw148015 	flowop_t	shm_flowop[FILEBENCH_NFLOWOPS];
1396305Saw148015 	var_t		shm_var[FILEBENCH_NVARS];
1406212Saw148015 	randdist_t	shm_randdist[FILEBENCH_NRANDDISTS];
1416212Saw148015 	struct avd	shm_avd_ptrs[FILEBENCH_NVARS * 2];
1426305Saw148015 	char		shm_strings[FILEBENCH_STRINGMEMORY];
1435184Sek110237 } filebench_shm_t;
1445184Sek110237 
1455184Sek110237 extern char *shmpath;
1465184Sek110237 
1475184Sek110237 void ipc_init(void);
1485184Sek110237 void *ipc_malloc(int type);
1495184Sek110237 void ipc_free(int type, char *addr);
1505184Sek110237 int ipc_attach(caddr_t shmaddr);
1515184Sek110237 pthread_mutexattr_t *ipc_mutexattr(void);
1525184Sek110237 pthread_condattr_t *ipc_condattr(void);
1535184Sek110237 int ipc_semidalloc(void);
1545184Sek110237 void ipc_semidfree(int semid);
1555184Sek110237 char *ipc_stralloc(char *string);
1565184Sek110237 char *ipc_pathalloc(char *string);
1575184Sek110237 int ipc_mutex_lock(pthread_mutex_t *mutex);
1585184Sek110237 int ipc_mutex_unlock(pthread_mutex_t *mutex);
1595184Sek110237 void ipc_seminit(void);
1605184Sek110237 char *ipc_ismmalloc(size_t size);
1615184Sek110237 int ipc_ismcreate(size_t size);
1625184Sek110237 void ipc_ismdelete(void);
1635184Sek110237 void ipc_cleanup(void);
1645184Sek110237 
1655184Sek110237 extern filebench_shm_t *filebench_shm;
1665184Sek110237 
1675184Sek110237 #ifdef	__cplusplus
1685184Sek110237 }
1695184Sek110237 #endif
1705184Sek110237 
1715184Sek110237 #endif	/* _FB_IPC_H */
172