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 /* 22*6084Saw148015 * 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" 385184Sek110237 #include "filebench.h" 395184Sek110237 405184Sek110237 #ifdef __cplusplus 415184Sek110237 extern "C" { 425184Sek110237 #endif 435184Sek110237 445184Sek110237 #ifdef USE_PROCESS_MODEL 455184Sek110237 #define FILEBENCH_MEMSIZE 4096 465184Sek110237 #else 475184Sek110237 #define FILEBENCH_MEMSIZE 2048 485184Sek110237 #endif /* USE_PROCESS_MODEL */ 495184Sek110237 505184Sek110237 #define FILEBENCH_NFILESETS FILEBENCH_MEMSIZE 515184Sek110237 #define FILEBENCH_NFILESETENTRIES (1024 * 1024) 525184Sek110237 #define FILEBENCH_NPROCFLOWS FILEBENCH_MEMSIZE 535184Sek110237 #define FILEBENCH_NTHREADFLOWS 64 * FILEBENCH_MEMSIZE 545184Sek110237 #define FILEBENCH_NFLOWOPS 64 * FILEBENCH_MEMSIZE 555184Sek110237 #define FILEBENCH_NVARS FILEBENCH_MEMSIZE 565184Sek110237 #define FILEBENCH_FILESETPATHMEMORY FILEBENCH_NFILESETENTRIES*FSE_MAXPATHLEN 575184Sek110237 #define FILEBENCH_STRINGMEMORY FILEBENCH_NVARS * 128 585184Sek110237 #define FILEBENCH_MAXBITMAP FILEBENCH_NFILESETENTRIES 595184Sek110237 605673Saw148015 #define FILEBENCH_PROCFLOW 0 615673Saw148015 #define FILEBENCH_THREADFLOW 1 625673Saw148015 #define FILEBENCH_FLOWOP 2 635673Saw148015 #define FILEBENCH_INTEGER 3 645673Saw148015 #define FILEBENCH_STRING 4 655673Saw148015 #define FILEBENCH_VARIABLE 5 665673Saw148015 #define FILEBENCH_FILESET 6 675673Saw148015 #define FILEBENCH_FILESETENTRY 7 685673Saw148015 #define FILEBENCH_TYPES 8 695184Sek110237 705184Sek110237 #define FILEBENCH_NSEMS 128 715184Sek110237 72*6084Saw148015 #define FILEBENCH_ABORT_ERROR 1 73*6084Saw148015 #define FILEBENCH_ABORT_DONE 2 74*6084Saw148015 #define FILEBENCH_ABORT_RSRC 3 75*6084Saw148015 76*6084Saw148015 #define FILEBENCH_MODE_TIMEOUT 0x0 77*6084Saw148015 #define FILEBENCH_MODE_Q1STDONE 0x1 78*6084Saw148015 #define FILEBENCH_MODE_QALLDONE 0x2 79*6084Saw148015 805184Sek110237 typedef struct filebench_shm { 815184Sek110237 pthread_mutex_t fileset_lock; 825184Sek110237 pthread_mutex_t procflow_lock; 835184Sek110237 pthread_mutex_t threadflow_lock; 845184Sek110237 pthread_mutex_t flowop_lock; 855184Sek110237 pthread_mutex_t msg_lock; 865184Sek110237 pthread_mutex_t malloc_lock; 875184Sek110237 pthread_mutex_t ism_lock; 885184Sek110237 pthread_rwlock_t run_lock; 895184Sek110237 pthread_rwlock_t flowop_find_lock; 905184Sek110237 915184Sek110237 char *string_ptr; 925184Sek110237 char *path_ptr; 935184Sek110237 fileset_t *filesetlist; 945184Sek110237 flowop_t *flowoplist; 955184Sek110237 procflow_t *proclist; 965184Sek110237 var_t *var_list; 975184Sek110237 var_t *var_dyn_list; 985184Sek110237 int debug_level; 995184Sek110237 hrtime_t epoch; 1005184Sek110237 hrtime_t starttime; 1015184Sek110237 int bequiet; 1025184Sek110237 key_t semkey; 1035184Sek110237 int seminit; 1045184Sek110237 int semid_seq; 1055184Sek110237 int utid; 1065184Sek110237 int log_fd; 1075184Sek110237 int dump_fd; 1085184Sek110237 char dump_filename[MAXPATHLEN]; 1095184Sek110237 pthread_mutex_t eventgen_lock; 1105184Sek110237 pthread_cond_t eventgen_cv; 1115184Sek110237 int eventgen_hz; 1125673Saw148015 uint64_t eventgen_q; 1135184Sek110237 char fscriptname[1024]; 1145184Sek110237 int shm_id; 1155184Sek110237 size_t shm_required; 1165184Sek110237 size_t shm_allocated; 1175184Sek110237 caddr_t shm_addr; 1185184Sek110237 char *shm_ptr; 119*6084Saw148015 int shm_running; 1205184Sek110237 int f_abort; 121*6084Saw148015 int shm_rmode; 122*6084Saw148015 int shm_1st_err; 1235184Sek110237 1245184Sek110237 int marker; 1255184Sek110237 1265184Sek110237 fileset_t fileset[FILEBENCH_NFILESETS]; 1275184Sek110237 filesetentry_t filesetentry[FILEBENCH_NFILESETENTRIES]; 1285184Sek110237 char filesetpaths[FILEBENCH_FILESETPATHMEMORY]; 1295184Sek110237 procflow_t procflow[FILEBENCH_NPROCFLOWS]; 1305184Sek110237 threadflow_t threadflow[FILEBENCH_NTHREADFLOWS]; 1315184Sek110237 flowop_t flowop[FILEBENCH_NFLOWOPS]; 1325184Sek110237 var_t var[FILEBENCH_NVARS]; 1335184Sek110237 vinteger_t integer_ptrs[FILEBENCH_NVARS]; 1345184Sek110237 char *string_ptrs[FILEBENCH_NVARS]; 1355184Sek110237 char strings[FILEBENCH_STRINGMEMORY]; 1365184Sek110237 char semids[FILEBENCH_NSEMS]; 1375184Sek110237 int bitmap[FILEBENCH_TYPES][FILEBENCH_MAXBITMAP]; 1385184Sek110237 } filebench_shm_t; 1395184Sek110237 1405184Sek110237 extern char *shmpath; 1415184Sek110237 1425184Sek110237 void ipc_init(void); 1435184Sek110237 void *ipc_malloc(int type); 1445184Sek110237 void ipc_free(int type, char *addr); 1455184Sek110237 int ipc_attach(caddr_t shmaddr); 1465184Sek110237 pthread_mutexattr_t *ipc_mutexattr(void); 1475184Sek110237 pthread_condattr_t *ipc_condattr(void); 1485184Sek110237 int ipc_semidalloc(void); 1495184Sek110237 void ipc_semidfree(int semid); 1505184Sek110237 char *ipc_stralloc(char *string); 1515184Sek110237 char *ipc_pathalloc(char *string); 1525184Sek110237 int ipc_mutex_lock(pthread_mutex_t *mutex); 1535184Sek110237 int ipc_mutex_unlock(pthread_mutex_t *mutex); 1545184Sek110237 void ipc_seminit(void); 1555184Sek110237 char *ipc_ismmalloc(size_t size); 1565184Sek110237 int ipc_ismcreate(size_t size); 1575184Sek110237 void ipc_ismdelete(void); 1585184Sek110237 void ipc_cleanup(void); 1595184Sek110237 1605184Sek110237 extern filebench_shm_t *filebench_shm; 1615184Sek110237 1625184Sek110237 #ifdef __cplusplus 1635184Sek110237 } 1645184Sek110237 #endif 1655184Sek110237 1665184Sek110237 #endif /* _FB_IPC_H */ 167