IOR
aiori.h
Go to the documentation of this file.
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  */
4 /******************************************************************************\
5 * *
6 * Copyright (c) 2003, The Regents of the University of California *
7 * See the file COPYRIGHT for a complete copyright notice and license. *
8 * *
9 ********************************************************************************
10 *
11 * Definitions and prototypes of abstract I/O interface
12 *
13 \******************************************************************************/
14 
15 #ifndef _AIORI_H
16 #define _AIORI_H
17 
18 #include <mpi.h>
19 
20 #ifndef MPI_FILE_NULL
21 # include <mpio.h>
22 #endif /* not MPI_FILE_NULL */
23 
24 #include <sys/stat.h>
25 #include <stdbool.h>
26 
27 #include "ior.h"
28 #include "iordef.h" /* IOR Definitions */
29 #include "option.h"
30 
31 /*************************** D E F I N I T I O N S ****************************/
32 
33 /* -- file open flags -- */
34 #define IOR_RDONLY 0x01 /* read only */
35 #define IOR_WRONLY 0x02 /* write only */
36 #define IOR_RDWR 0x04 /* read/write */
37 #define IOR_APPEND 0x08 /* append */
38 #define IOR_CREAT 0x10 /* create */
39 #define IOR_TRUNC 0x20 /* truncate */
40 #define IOR_EXCL 0x40 /* exclusive */
41 #define IOR_DIRECT 0x80 /* bypass I/O buffers */
42 
43 /* -- file mode flags -- */
44 #define IOR_IRWXU 0x0001 /* read, write, execute perm: owner */
45 #define IOR_IRUSR 0x0002 /* read permission: owner */
46 #define IOR_IWUSR 0x0004 /* write permission: owner */
47 #define IOR_IXUSR 0x0008 /* execute permission: owner */
48 #define IOR_IRWXG 0x0010 /* read, write, execute perm: group */
49 #define IOR_IRGRP 0x0020 /* read permission: group */
50 #define IOR_IWGRP 0x0040 /* write permission: group */
51 #define IOR_IXGRP 0x0080 /* execute permission: group */
52 #define IOR_IRWXO 0x0100 /* read, write, execute perm: other */
53 #define IOR_IROTH 0x0200 /* read permission: other */
54 #define IOR_IWOTH 0x0400 /* write permission: other */
55 #define IOR_IXOTH 0x0800 /* execute permission: other */
56 
57 typedef struct ior_aiori_statfs {
58  uint64_t f_bsize;
59  uint64_t f_blocks;
60  uint64_t f_bfree;
61  uint64_t f_bavail;
62  uint64_t f_files;
63  uint64_t f_ffree;
65 
66 
67 typedef struct ior_aiori {
68  char *name;
69  char *name_legacy;
70  void *(*create)(char *, IOR_param_t *);
71  int (*mknod)(char *);
72  void *(*open)(char *, IOR_param_t *);
73  IOR_offset_t (*xfer)(int, void *, IOR_size_t *,
75  void (*close)(void *, IOR_param_t *);
76  void (*delete)(char *, IOR_param_t *);
77  char* (*get_version)(void);
78  void (*fsync)(void *, IOR_param_t *);
79  IOR_offset_t (*get_file_size)(IOR_param_t *, MPI_Comm, char *);
80  int (*statfs) (const char *, ior_aiori_statfs_t *, IOR_param_t * param);
81  int (*mkdir) (const char *path, mode_t mode, IOR_param_t * param);
82  int (*rmdir) (const char *path, IOR_param_t * param);
83  int (*access) (const char *path, int mode, IOR_param_t * param);
84  int (*stat) (const char *path, struct stat *buf, IOR_param_t * param);
85  void (*initialize)(void); /* called once per program before MPI is started */
86  void (*finalize)(void); /* called once per program after MPI is shutdown */
87  option_help * (*get_options)(void ** init_backend_options, void* init_values); /* initializes the backend options as well and returns the pointer to the option help structure */
89  int (*check_params)(IOR_param_t *); /* check if the provided parameters for the given test and the module options are correct, if they aren't print a message and exit(1) or return 1*/
90  void (*sync)(IOR_param_t * ); /* synchronize every pending operation for this storage */
91 } ior_aiori_t;
92 
93 enum bench_type {
94  IOR,
96 };
97 
99 extern ior_aiori_t daos_aiori;
100 extern ior_aiori_t dfs_aiori;
101 extern ior_aiori_t hdf5_aiori;
102 extern ior_aiori_t hdfs_aiori;
103 extern ior_aiori_t ime_aiori;
104 extern ior_aiori_t mpiio_aiori;
105 extern ior_aiori_t ncmpi_aiori;
106 extern ior_aiori_t posix_aiori;
107 extern ior_aiori_t mmap_aiori;
108 extern ior_aiori_t s3_aiori;
111 extern ior_aiori_t rados_aiori;
113 extern ior_aiori_t gfarm_aiori;
114 
115 void aiori_initialize(IOR_test_t * tests);
116 void aiori_finalize(IOR_test_t * tests);
117 const ior_aiori_t *aiori_select (const char *api);
118 int aiori_count (void);
119 void aiori_supported_apis(char * APIs, char * APIs_legacy, enum bench_type type);
121 
122 void * airoi_update_module_options(const ior_aiori_t * backend, options_all_t * module_defaults);
123 
124 const char *aiori_default (void);
125 
126 /* some generic POSIX-based backend calls */
127 char * aiori_get_version (void);
128 int aiori_posix_statfs (const char *path, ior_aiori_statfs_t *stat_buf, IOR_param_t * param);
129 int aiori_posix_mkdir (const char *path, mode_t mode, IOR_param_t * param);
130 int aiori_posix_rmdir (const char *path, IOR_param_t * param);
131 int aiori_posix_access (const char *path, int mode, IOR_param_t * param);
132 int aiori_posix_stat (const char *path, struct stat *buf, IOR_param_t * param);
133 
134 void *POSIX_Create(char *testFileName, IOR_param_t * param);
135 int POSIX_Mknod(char *testFileName);
136 void *POSIX_Open(char *testFileName, IOR_param_t * param);
137 IOR_offset_t POSIX_GetFileSize(IOR_param_t * test, MPI_Comm testComm, char *testFileName);
138 void POSIX_Delete(char *testFileName, IOR_param_t * param);
139 void POSIX_Close(void *fd, IOR_param_t * param);
140 option_help * POSIX_options(void ** init_backend_options, void * init_values);
141 
142 
143 /* NOTE: these 3 MPI-IO functions are exported for reuse by HDF5/PNetCDF */
144 void MPIIO_Delete(char *testFileName, IOR_param_t * param);
146  char *testFileName);
147 int MPIIO_Access(const char *, int, IOR_param_t *);
148 
149 #endif /* not _AIORI_H */
Definition: aiori.h:95
ior_aiori_t s3_emc_aiori
Definition: aiori-S3.c:206
options_all_t * airoi_create_all_module_options(option_help *global_options)
Definition: aiori.c:99
struct ior_aiori_statfs ior_aiori_statfs_t
void * POSIX_Create(char *testFileName, IOR_param_t *param)
Definition: aiori-POSIX.c:321
uint64_t f_blocks
Definition: aiori.h:59
uint64_t f_bfree
Definition: aiori.h:60
int POSIX_Mknod(char *testFileName)
Definition: aiori-POSIX.c:439
option_help * POSIX_options(void **init_backend_options, void *init_values)
Definition: aiori-POSIX.c:83
ior_aiori_t cephfs_aiori
Definition: aiori-CEPHFS.c:83
bench_type
Definition: aiori.h:93
const ior_aiori_t * aiori_select(const char *api)
Definition: aiori.c:291
ior_aiori_t s3_aiori
Definition: aiori-S3.c:170
int aiori_posix_mkdir(const char *path, mode_t mode, IOR_param_t *param)
Definition: aiori.c:180
void aiori_initialize(IOR_test_t *tests)
Definition: aiori.c:263
char * aiori_get_version(void)
Definition: aiori.c:200
ior_aiori_t ime_aiori
Definition: aiori-IME.c:97
ior_aiori_t dummy_aiori
Definition: aiori-DUMMY.c:155
void POSIX_Close(void *fd, IOR_param_t *param)
Definition: aiori-POSIX.c:602
int MPIIO_Access(const char *, int, IOR_param_t *)
Definition: aiori-MPIIO.c:70
int aiori_posix_access(const char *path, int mode, IOR_param_t *param)
Definition: aiori.c:190
ior_aiori_t rados_aiori
Definition: aiori-RADOS.c:68
uint64_t f_ffree
Definition: aiori.h:63
int aiori_count(void)
Definition: aiori.c:345
ior_aiori_t mpiio_aiori
Definition: aiori-MPIIO.c:47
void aiori_finalize(IOR_test_t *tests)
Definition: aiori.c:281
ior_aiori_t hdfs_aiori
Definition: aiori-HDFS.c:116
IOR_offset_t POSIX_GetFileSize(IOR_param_t *test, MPI_Comm testComm, char *testFileName)
Definition: aiori-POSIX.c:627
ior_aiori_t hdf5_aiori
Definition: aiori-HDF5.c:127
uint64_t f_files
Definition: aiori.h:62
MPI_Comm testComm
Definition: utilities.c:60
int aiori_posix_rmdir(const char *path, IOR_param_t *param)
Definition: aiori.c:185
uint64_t f_bsize
Definition: aiori.h:58
Definition: aiori.h:94
ior_aiori_t gfarm_aiori
Definition: aiori-Gfarm.c:296
ior_aiori_t mmap_aiori
Definition: aiori-MMAP.c:39
char * name_legacy
Definition: aiori.h:69
int aiori_posix_statfs(const char *path, ior_aiori_statfs_t *stat_buf, IOR_param_t *param)
Definition: aiori.c:155
static const ior_aiori_t * backend
Definition: ior.c:49
static IOR_param_t param
Definition: mdtest.c:170
void POSIX_Delete(char *testFileName, IOR_param_t *param)
Definition: aiori-POSIX.c:614
static options_all_t * global_options
Definition: parse_options.c:43
long long int IOR_size_t
Definition: iordef.h:123
ior_aiori_t posix_aiori
Definition: aiori-POSIX.c:107
ior_aiori_t dfs_aiori
Definition: aiori-DFS.c:119
uint64_t f_bavail
Definition: aiori.h:61
bool enable_mdtest
Definition: aiori.h:88
void MPIIO_Delete(char *testFileName, IOR_param_t *param)
Definition: aiori-MPIIO.c:431
IOR_offset_t MPIIO_GetFileSize(IOR_param_t *test, MPI_Comm testComm, char *testFileName)
Definition: aiori-MPIIO.c:496
void aiori_supported_apis(char *APIs, char *APIs_legacy, enum bench_type type)
Definition: aiori.c:118
ior_aiori_t s3_plus_aiori
Definition: aiori-S3.c:189
struct ior_aiori ior_aiori_t
const char * aiori_default(void)
Definition: aiori.c:350
void * POSIX_Open(char *testFileName, IOR_param_t *param)
Definition: aiori-POSIX.c:453
ior_aiori_t daos_aiori
Definition: aiori-DAOS.c:84
char * name
Definition: aiori.h:68
long long int IOR_offset_t
Definition: iordef.h:122
void * airoi_update_module_options(const ior_aiori_t *backend, options_all_t *module_defaults)
Definition: aiori.c:85
ior_aiori_t ncmpi_aiori
Definition: aiori-NCMPI.c:63
int aiori_posix_stat(const char *path, struct stat *buf, IOR_param_t *param)
Definition: aiori.c:195