IOR
aiori-DUMMY.c
Go to the documentation of this file.
1 /*
2 * Dummy implementation doesn't do anything besides waiting
3 */
4 
5 #ifdef HAVE_CONFIG_H
6 # include "config.h"
7 #endif
8 
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <unistd.h>
12 #include <time.h>
13 
14 #include "ior.h"
15 #include "aiori.h"
16 #include "utilities.h"
17 
18 
19 /************************** O P T I O N S *****************************/
20 typedef struct {
21  uint64_t delay_creates;
22  uint64_t delay_close;
23  uint64_t delay_sync;
24  uint64_t delay_xfer;
27 
28 static char * current = (char*) 1;
29 
30 static option_help * DUMMY_options(aiori_mod_opt_t ** init_backend_options, aiori_mod_opt_t * init_values){
31  dummy_options_t * o = malloc(sizeof(dummy_options_t));
32  if (init_values != NULL){
33  memcpy(o, init_values, sizeof(dummy_options_t));
34  }else{
35  memset(o, 0, sizeof(dummy_options_t));
36  }
37 
38  *init_backend_options = (aiori_mod_opt_t*) o;
39 
40  option_help h [] = {
41  {0, "dummy.delay-create", "Delay per create in usec", OPTION_OPTIONAL_ARGUMENT, 'l', & o->delay_creates},
42  {0, "dummy.delay-close", "Delay per close in usec", OPTION_OPTIONAL_ARGUMENT, 'l', & o->delay_close},
43  {0, "dummy.delay-sync", "Delay for sync in usec", OPTION_OPTIONAL_ARGUMENT, 'l', & o->delay_sync},
44  {0, "dummy.delay-xfer", "Delay per xfer in usec", OPTION_OPTIONAL_ARGUMENT, 'l', & o->delay_xfer},
45  {0, "dummy.delay-only-rank0", "Delay only Rank0", OPTION_FLAG, 'd', & o->delay_rank_0_only},
47  };
48  option_help * help = malloc(sizeof(h));
49  memcpy(help, h, sizeof(h));
50  return help;
51 }
52 
53 static int count_init = 0;
54 
55 static aiori_fd_t *DUMMY_Create(char *testFileName, int iorflags, aiori_mod_opt_t * options)
56 {
57  if(count_init <= 0){
58  ERR("DUMMY missing initialization in create\n");
59  }
60  if(verbose > 4){
61  fprintf(out_logfile, "DUMMY create: %s = %p\n", testFileName, current);
62  }
63  dummy_options_t * o = (dummy_options_t*) options;
64  if (o->delay_creates){
65  if (! o->delay_rank_0_only || (o->delay_rank_0_only && rank == 0)){
66  struct timespec wait = { o->delay_creates / 1000 / 1000, 1000l * (o->delay_creates % 1000000)};
67  nanosleep( & wait, NULL);
68  }
69  }
70  return (aiori_fd_t*) current++;
71 }
72 
73 static aiori_fd_t *DUMMY_Open(char *testFileName, int flags, aiori_mod_opt_t * options)
74 {
75  if(count_init <= 0){
76  ERR("DUMMY missing initialization in open\n");
77  }
78  if(verbose > 4){
79  fprintf(out_logfile, "DUMMY open: %s = %p\n", testFileName, current);
80  }
81  return (aiori_fd_t*) current++;
82 }
83 
85 {
86  if(verbose > 4){
87  fprintf(out_logfile, "DUMMY fsync %p\n", fd);
88  }
89 }
90 
91 
93 {
94  dummy_options_t * o = (dummy_options_t*) options;
95  if (o->delay_sync){
96  if (! o->delay_rank_0_only || (o->delay_rank_0_only && rank == 0)){
97  struct timespec wait = { o->delay_sync / 1000 / 1000, 1000l * (o->delay_sync % 1000000)};
98  nanosleep( & wait, NULL);
99  }
100  }
101 }
102 
104 {
105  if(verbose > 4){
106  fprintf(out_logfile, "DUMMY close %p\n", fd);
107  }
108 
109  dummy_options_t * o = (dummy_options_t*) options;
110  if (o->delay_close){
111  if (! o->delay_rank_0_only || (o->delay_rank_0_only && rank == 0)){
112  struct timespec wait = { o->delay_close / 1000 / 1000, 1000l * (o->delay_close % 1000000)};
113  nanosleep( & wait, NULL);
114  }
115  }
116 }
117 
118 static void DUMMY_Delete(char *testFileName, aiori_mod_opt_t * options)
119 {
120  if(verbose > 4){
121  fprintf(out_logfile, "DUMMY delete: %s\n", testFileName);
122  }
123 }
124 
125 static char * DUMMY_getVersion()
126 {
127  return "0.5";
128 }
129 
131 {
132  if(verbose > 4){
133  fprintf(out_logfile, "DUMMY getFileSize: %s\n", testFileName);
134  }
135  return 0;
136 }
137 
138 static IOR_offset_t DUMMY_Xfer(int access, aiori_fd_t *file, IOR_size_t * buffer, IOR_offset_t length, IOR_offset_t offset, aiori_mod_opt_t * options){
139  if(verbose > 4){
140  fprintf(out_logfile, "DUMMY xfer: %p\n", file);
141  }
142  dummy_options_t * o = (dummy_options_t*) options;
143  if (o->delay_xfer){
144  if (! o->delay_rank_0_only || (o->delay_rank_0_only && rank == 0)){
145  struct timespec wait = {o->delay_xfer / 1000 / 1000, 1000l * (o->delay_xfer % 1000000)};
146  nanosleep( & wait, NULL);
147  }
148  }
149  return length;
150 }
151 
152 static int DUMMY_statfs (const char * path, ior_aiori_statfs_t * stat, aiori_mod_opt_t * options){
153  stat->f_bsize = 1;
154  stat->f_blocks = 1;
155  stat->f_bfree = 1;
156  stat->f_bavail = 1;
157  stat->f_files = 1;
158  stat->f_ffree = 1;
159  return 0;
160 }
161 
162 static int DUMMY_mkdir (const char *path, mode_t mode, aiori_mod_opt_t * options){
163  return 0;
164 }
165 
166 static int DUMMY_rmdir (const char *path, aiori_mod_opt_t * options){
167  return 0;
168 }
169 
170 static int DUMMY_access (const char *path, int mode, aiori_mod_opt_t * options){
171  return 0;
172 }
173 
174 static int DUMMY_stat (const char *path, struct stat *buf, aiori_mod_opt_t * options){
175  return 0;
176 }
177 
178 static int DUMMY_rename (const char *path, const char *path2, aiori_mod_opt_t * options){
179  return 0;
180 }
181 
182 
184  return 0;
185 }
186 
188  WARN("DUMMY initialized");
189  count_init++;
190 }
191 
193  WARN("DUMMY finalized");
194  if(count_init <= 0){
195  ERR("DUMMY invalid finalization\n");
196  }
197  count_init--;
198 }
199 
200 
202  .name = "DUMMY",
203  .name_legacy = NULL,
204  .create = DUMMY_Create,
205  .open = DUMMY_Open,
206  .xfer = DUMMY_Xfer,
207  .close = DUMMY_Close,
208  .delete = DUMMY_Delete,
209  .get_version = DUMMY_getVersion,
210  .fsync = DUMMY_Fsync,
211  .get_file_size = DUMMY_GetFileSize,
212  .statfs = DUMMY_statfs,
213  .mkdir = DUMMY_mkdir,
214  .rmdir = DUMMY_rmdir,
215  .rename = DUMMY_rename,
216  .access = DUMMY_access,
217  .stat = DUMMY_stat,
218  .initialize = DUMMY_init,
219  .finalize = DUMMY_final,
220  .get_options = DUMMY_options,
221  .check_params = DUMMY_check_params,
222  .sync = DUMMY_Sync,
223  .enable_mdtest = true
224 };
uint64_t delay_xfer
Definition: aiori-DUMMY.c:24
static int DUMMY_rename(const char *path, const char *path2, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:178
uint64_t f_blocks
Definition: aiori.h:53
uint64_t delay_sync
Definition: aiori-DUMMY.c:23
uint64_t f_bfree
Definition: aiori.h:54
static void DUMMY_final(aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:192
#define LAST_OPTION
Definition: option.h:39
FILE * out_logfile
Definition: utilities.c:74
static int DUMMY_check_params(aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:183
struct benchmark_options o
Definition: md-workbench.c:133
static void DUMMY_Delete(char *testFileName, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:118
static void DUMMY_init(aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:187
static int count_init
Definition: aiori-DUMMY.c:53
static void DUMMY_Fsync(aiori_fd_t *fd, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:84
uint64_t f_ffree
Definition: aiori.h:57
static int DUMMY_rmdir(const char *path, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:166
ior_aiori_t dummy_aiori
Definition: aiori-DUMMY.c:201
static int DUMMY_mkdir(const char *path, mode_t mode, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:162
uint64_t f_files
Definition: aiori.h:56
static option_help options[]
Definition: aiori-CEPHFS.c:59
uint64_t f_bsize
Definition: aiori.h:52
static IOR_offset_t DUMMY_GetFileSize(aiori_mod_opt_t *options, char *testFileName)
Definition: aiori-DUMMY.c:130
#define WARN(MSG)
Definition: aiori-debug.h:45
static char * current
Definition: aiori-DUMMY.c:28
static IOR_offset_t DUMMY_Xfer(int access, aiori_fd_t *file, IOR_size_t *buffer, IOR_offset_t length, IOR_offset_t offset, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:138
static option_help * DUMMY_options(aiori_mod_opt_t **init_backend_options, aiori_mod_opt_t *init_values)
Definition: aiori-DUMMY.c:30
uint64_t delay_creates
Definition: aiori-DUMMY.c:21
uint64_t delay_close
Definition: aiori-DUMMY.c:22
static aiori_fd_t * DUMMY_Create(char *testFileName, int iorflags, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:55
static int DUMMY_statfs(const char *path, ior_aiori_statfs_t *stat, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:152
static aiori_fd_t * DUMMY_Open(char *testFileName, int flags, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:73
long long int IOR_size_t
Definition: iordef.h:124
uint64_t f_bavail
Definition: aiori.h:55
int verbose
Definition: utilities.c:72
static int DUMMY_access(const char *path, int mode, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:170
static void DUMMY_Close(aiori_fd_t *fd, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:103
#define ERR(MSG)
Definition: aiori-debug.h:75
static int DUMMY_stat(const char *path, struct stat *buf, aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:174
static char * DUMMY_getVersion()
Definition: aiori-DUMMY.c:125
char * name
Definition: aiori.h:88
long long int IOR_offset_t
Definition: iordef.h:123
int rank
Definition: utilities.c:70
static void DUMMY_Sync(aiori_mod_opt_t *options)
Definition: aiori-DUMMY.c:92
#define NULL
Definition: iordef.h:84