Mercurial > illumos > onarm
comparison usr/src/cmd/filebench/common/flowop.h @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children | 1a15d5aaf794 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c9caec207d52 |
---|---|
1 /* | |
2 * CDDL HEADER START | |
3 * | |
4 * The contents of this file are subject to the terms of the | |
5 * Common Development and Distribution License (the "License"). | |
6 * You may not use this file except in compliance with the License. | |
7 * | |
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
9 * or http://www.opensolaris.org/os/licensing. | |
10 * See the License for the specific language governing permissions | |
11 * and limitations under the License. | |
12 * | |
13 * When distributing Covered Code, include this CDDL HEADER in each | |
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
15 * If applicable, add the following below this CDDL HEADER, with the | |
16 * fields enclosed by brackets "[]" replaced with your own identifying | |
17 * information: Portions Copyright [yyyy] [name of copyright owner] | |
18 * | |
19 * CDDL HEADER END | |
20 */ | |
21 /* | |
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. | |
23 * Use is subject to license terms. | |
24 */ | |
25 | |
26 #ifndef _FB_FLOWOP_H | |
27 #define _FB_FLOWOP_H | |
28 | |
29 | |
30 #pragma ident "@(#)flowop.h 1.3 08/02/20 SMI" | |
31 | |
32 #include "config.h" | |
33 | |
34 #include <stdio.h> | |
35 #include <stdlib.h> | |
36 #include <unistd.h> | |
37 #include <sys/stat.h> | |
38 #include <sys/types.h> | |
39 #include <sys/param.h> | |
40 #include <sys/resource.h> | |
41 #include <pthread.h> | |
42 #ifndef HAVE_SYSV_SEM | |
43 #include <semaphore.h> | |
44 #endif | |
45 #include "stats.h" | |
46 #include "threadflow.h" | |
47 #include "vars.h" | |
48 #include "fileset.h" | |
49 #include "filebench.h" | |
50 | |
51 #ifdef __cplusplus | |
52 extern "C" { | |
53 #endif | |
54 | |
55 typedef struct flowop { | |
56 char fo_name[128]; /* Name */ | |
57 int fo_instance; /* Instance number */ | |
58 struct flowop *fo_next; /* Next in global list */ | |
59 struct flowop *fo_threadnext; /* Next in thread's list */ | |
60 struct flowop *fo_resultnext; /* List of flowops in result */ | |
61 struct threadflow *fo_thread; /* Backpointer to thread */ | |
62 int (*fo_func)(); /* Method */ | |
63 int (*fo_init)(); /* Init Method */ | |
64 void (*fo_destruct)(); /* Destructor Method */ | |
65 int fo_type; /* Type */ | |
66 int fo_attrs; /* Flow op attribute */ | |
67 fileset_t *fo_fileset; /* Fileset for op */ | |
68 int fo_fd; /* File descriptor */ | |
69 int fo_fdnumber; /* User specified file descriptor */ | |
70 int fo_srcfdnumber; /* User specified src file descriptor */ | |
71 var_integer_t fo_iosize; /* Size of operation */ | |
72 var_integer_t fo_wss; /* Flow op working set size */ | |
73 char fo_targetname[128]; /* Target, for wakeup etc... */ | |
74 struct flowop *fo_targets; /* List of targets matching name */ | |
75 struct flowop *fo_targetnext; /* List of targets matching name */ | |
76 var_integer_t fo_iters; /* Number of iterations of op */ | |
77 var_integer_t fo_value; /* Attr */ | |
78 var_integer_t fo_sequential; /* Attr */ | |
79 var_integer_t fo_random; /* Attr */ | |
80 var_integer_t fo_stride; /* Attr */ | |
81 var_integer_t fo_backwards; /* Attr */ | |
82 var_integer_t fo_dsync; /* Attr */ | |
83 var_integer_t fo_blocking; /* Attr */ | |
84 var_integer_t fo_directio; /* Attr */ | |
85 var_integer_t fo_rotatefd; /* Attr */ | |
86 flowstat_t fo_stats; /* Flow statistics */ | |
87 pthread_cond_t fo_cv; /* Block/wakeup cv */ | |
88 pthread_mutex_t fo_lock; /* Mutex around flowop */ | |
89 char *fo_buf; /* Per-flowop buffer */ | |
90 uint64_t fo_buf_size; /* current size of buffer */ | |
91 #ifdef HAVE_SYSV_SEM | |
92 int fo_semid_lw; /* sem id */ | |
93 int fo_semid_hw; /* sem id for highwater block */ | |
94 #else | |
95 sem_t fo_sem; /* sem_t for posix semaphores */ | |
96 #endif /* HAVE_SYSV_SEM */ | |
97 var_integer_t fo_highwater; /* value of highwater paramter */ | |
98 void *fo_idp; /* id, for sems etc */ | |
99 hrtime_t fo_timestamp; /* for ratecontrol, etc... */ | |
100 int fo_initted; /* Set to one if initialized */ | |
101 int64_t fo_tputbucket; /* Throughput bucket, for limiter */ | |
102 uint64_t fo_tputlast; /* Throughput count, for delta's */ | |
103 | |
104 } flowop_t; | |
105 | |
106 /* Flow Op Attrs */ | |
107 #define FLOW_ATTR_SEQUENTIAL 0x1 | |
108 #define FLOW_ATTR_RANDOM 0x2 | |
109 #define FLOW_ATTR_STRIDE 0x4 | |
110 #define FLOW_ATTR_BACKWARDS 0x8 | |
111 #define FLOW_ATTR_DSYNC 0x10 | |
112 #define FLOW_ATTR_BLOCKING 0x20 | |
113 #define FLOW_ATTR_DIRECTIO 0x40 | |
114 #define FLOW_ATTR_READ 0x80 | |
115 #define FLOW_ATTR_WRITE 0x100 | |
116 | |
117 #define FLOW_MASTER -1 /* Declaration of thread from script */ | |
118 #define FLOW_DEFINITION 0 /* Prototype definition of flowop from library */ | |
119 | |
120 #define FLOW_TYPES 5 | |
121 #define FLOW_TYPE_GLOBAL 0 /* Rolled up statistics */ | |
122 #define FLOW_TYPE_IO 1 /* Op is an I/O, reflected in iops and lat */ | |
123 #define FLOW_TYPE_AIO 2 /* Op is an async I/O, reflected in iops */ | |
124 #define FLOW_TYPE_SYNC 3 /* Op is a sync event */ | |
125 #define FLOW_TYPE_OTHER 4 /* Op is a something else */ | |
126 | |
127 extern flowstat_t controlstats; | |
128 | |
129 void flowop_init(void); | |
130 flowop_t *flowop_define(threadflow_t *, char *name, flowop_t *inherit, | |
131 int instance, int type); | |
132 flowop_t *flowop_find(char *name); | |
133 flowop_t *flowop_find_one(char *name, int instance); | |
134 void flowoplib_usage(void); | |
135 void flowoplib_init(void); | |
136 void flowop_delete_all(flowop_t **threadlist); | |
137 void flowop_endop(threadflow_t *threadflow, flowop_t *flowop, int64_t bytes); | |
138 void flowop_beginop(threadflow_t *threadflow, flowop_t *flowop); | |
139 void flowop_destruct_all_flows(threadflow_t *threadflow); | |
140 | |
141 #ifdef __cplusplus | |
142 } | |
143 #endif | |
144 | |
145 #endif /* _FB_FLOWOP_H */ |