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 
26 #include "ior.h"
27 #include "iordef.h" /* IOR Definitions */
28 #include "option.h"
29 
30 /*************************** D E F I N I T I O N S ****************************/
31 
32 /* -- file open flags -- */
33 #define IOR_RDONLY 0x01 /* read only */
34 #define IOR_WRONLY 0x02 /* write only */
35 #define IOR_RDWR 0x04 /* read/write */
36 #define IOR_APPEND 0x08 /* append */
37 #define IOR_CREAT 0x10 /* create */
38 #define IOR_TRUNC 0x20 /* truncate */
39 #define IOR_EXCL 0x40 /* exclusive */
40 #define IOR_DIRECT 0x80 /* bypass I/O buffers */
41 
42 /* -- file mode flags -- */
43 #define IOR_IRWXU 0x0001 /* read, write, execute perm: owner */
44 #define IOR_IRUSR 0x0002 /* read permission: owner */
45 #define IOR_IWUSR 0x0004 /* write permission: owner */
46 #define IOR_IXUSR 0x0008 /* execute permission: owner */
47 #define IOR_IRWXG 0x0010 /* read, write, execute perm: group */
48 #define IOR_IRGRP 0x0020 /* read permission: group */
49 #define IOR_IWGRP 0x0040 /* write permission: group */
50 #define IOR_IXGRP 0x0080 /* execute permission: group */
51 #define IOR_IRWXO 0x0100 /* read, write, execute perm: other */
52 #define IOR_IROTH 0x0200 /* read permission: other */
53 #define IOR_IWOTH 0x0400 /* write permission: other */
54 #define IOR_IXOTH 0x0800 /* execute permission: other */
55 
56 typedef struct ior_aiori_statfs {
57  uint64_t f_bsize;
58  uint64_t f_blocks;
59  uint64_t f_bfree;
60  uint64_t f_bavail;
61  uint64_t f_files;
62  uint64_t f_ffree;
64 
65 
66 typedef struct ior_aiori {
67  char *name;
68  void *(*create)(char *, IOR_param_t *);
69  void *(*open)(char *, IOR_param_t *);
70  IOR_offset_t (*xfer)(int, void *, IOR_size_t *,
72  void (*close)(void *, IOR_param_t *);
73  void (*delete)(char *, IOR_param_t *);
74  char* (*get_version)();
75  void (*fsync)(void *, IOR_param_t *);
76  IOR_offset_t (*get_file_size)(IOR_param_t *, MPI_Comm, char *);
77  int (*statfs) (const char *, ior_aiori_statfs_t *, IOR_param_t * param);
78  int (*mkdir) (const char *path, mode_t mode, IOR_param_t * param);
79  int (*rmdir) (const char *path, IOR_param_t * param);
80  int (*access) (const char *path, int mode, IOR_param_t * param);
81  int (*stat) (const char *path, struct stat *buf, IOR_param_t * param);
82  void (*initialize)(); /* called once per program before MPI is started */
83  void (*finalize)(); /* called once per program after MPI is shutdown */
84  option_help * (*get_options)();
85 } ior_aiori_t;
86 
88 extern ior_aiori_t hdf5_aiori;
89 extern ior_aiori_t hdfs_aiori;
90 extern ior_aiori_t ime_aiori;
94 extern ior_aiori_t mmap_aiori;
95 extern ior_aiori_t s3_aiori;
99 
100 void aiori_initialize();
101 void aiori_finalize();
102 const ior_aiori_t *aiori_select (const char *api);
103 int aiori_count (void);
104 void aiori_supported_apis(char * APIs);
105 void airoi_parse_options(int argc, char ** argv, option_help * global_options);
106 const char *aiori_default (void);
107 
108 /* some generic POSIX-based backend calls */
109 char * aiori_get_version();
110 int aiori_posix_statfs (const char *path, ior_aiori_statfs_t *stat_buf, IOR_param_t * param);
111 int aiori_posix_mkdir (const char *path, mode_t mode, IOR_param_t * param);
112 int aiori_posix_rmdir (const char *path, IOR_param_t * param);
113 int aiori_posix_access (const char *path, int mode, IOR_param_t * param);
114 int aiori_posix_stat (const char *path, struct stat *buf, IOR_param_t * param);
115 
116 void *POSIX_Create(char *testFileName, IOR_param_t * param);
117 void *POSIX_Open(char *testFileName, IOR_param_t * param);
118 IOR_offset_t POSIX_GetFileSize(IOR_param_t * test, MPI_Comm testComm, char *testFileName);
119 void POSIX_Delete(char *testFileName, IOR_param_t * param);
120 void POSIX_Close(void *fd, IOR_param_t * param);
121 
122 /* NOTE: these 3 MPI-IO functions are exported for reuse by HDF5/PNetCDF */
123 void MPIIO_Delete(char *testFileName, IOR_param_t * param);
125  char *testFileName);
126 int MPIIO_Access(const char *, int, IOR_param_t *);
127 
128 #endif /* not _AIORI_H */
ior_aiori_t s3_emc_aiori
Definition: aiori-S3.c:202
struct ior_aiori_statfs ior_aiori_statfs_t
void * POSIX_Create(char *testFileName, IOR_param_t *param)
Definition: aiori-POSIX.c:267
uint64_t f_blocks
Definition: aiori.h:58
uint64_t f_bfree
Definition: aiori.h:59
void aiori_supported_apis(char *APIs)
Definition: aiori.c:84
const ior_aiori_t * aiori_select(const char *api)
Definition: aiori.c:184
ior_aiori_t s3_aiori
Definition: aiori-S3.c:168
int aiori_posix_mkdir(const char *path, mode_t mode, IOR_param_t *param)
Definition: aiori.c:129
ior_aiori_t ime_aiori
Definition: aiori-IME.c:64
ior_aiori_t dummy_aiori
Definition: aiori-DUMMY.c:137
void POSIX_Close(void *fd, IOR_param_t *param)
Definition: aiori-POSIX.c:506
int MPIIO_Access(const char *, int, IOR_param_t *)
Definition: aiori-MPIIO.c:69
int aiori_posix_access(const char *path, int mode, IOR_param_t *param)
Definition: aiori.c:139
ior_aiori_t rados_aiori
Definition: aiori-RADOS.c:68
uint64_t f_ffree
Definition: aiori.h:62
char * aiori_get_version()
Definition: aiori.c:149
int aiori_count(void)
Definition: aiori.c:226
ior_aiori_t mpiio_aiori
Definition: aiori-MPIIO.c:47
void aiori_finalize()
Definition: aiori.c:173
ior_aiori_t hdfs_aiori
Definition: aiori-HDFS.c:116
void airoi_parse_options(int argc, char **argv, option_help *global_options)
Definition: aiori.c:64
IOR_offset_t POSIX_GetFileSize(IOR_param_t *test, MPI_Comm testComm, char *testFileName)
Definition: aiori-POSIX.c:528
ior_aiori_t hdf5_aiori
Definition: aiori-HDF5.c:99
uint64_t f_files
Definition: aiori.h:61
MPI_Comm testComm
Definition: utilities.c:61
int aiori_posix_rmdir(const char *path, IOR_param_t *param)
Definition: aiori.c:134
uint64_t f_bsize
Definition: aiori.h:57
void aiori_initialize()
Definition: aiori.c:156
ior_aiori_t mmap_aiori
Definition: aiori-MMAP.c:38
int aiori_posix_statfs(const char *path, ior_aiori_statfs_t *stat_buf, IOR_param_t *param)
Definition: aiori.c:104
static IOR_param_t param
Definition: mdtest.c:153
void POSIX_Delete(char *testFileName, IOR_param_t *param)
Definition: aiori-POSIX.c:516
long long int IOR_size_t
Definition: iordef.h:124
ior_aiori_t posix_aiori
Definition: aiori-POSIX.c:77
uint64_t f_bavail
Definition: aiori.h:60
void MPIIO_Delete(char *testFileName, IOR_param_t *param)
Definition: aiori-MPIIO.c:409
IOR_offset_t MPIIO_GetFileSize(IOR_param_t *test, MPI_Comm testComm, char *testFileName)
Definition: aiori-MPIIO.c:472
ior_aiori_t s3_plus_aiori
Definition: aiori-S3.c:185
struct ior_aiori ior_aiori_t
const char * aiori_default(void)
Definition: aiori.c:231
void * POSIX_Open(char *testFileName, IOR_param_t *param)
Definition: aiori-POSIX.c:378
char * name
Definition: aiori.h:67
long long int IOR_offset_t
Definition: iordef.h:123
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:144