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