SIONlib  1.7.5
Scalable I/O library for parallel access to task-local files
sion_filedesc.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2019 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
14 #ifndef SION_SION_FILEDESC_H
15 #define SION_SION_FILEDESC_H
16 
17 #include "sion_const.h"
18 #include "sion_datatypes.h"
19 #include "sion_file.h"
20 
21 #define _SION_FLAG1_NONE 0
22 #define _SION_FLAG2_NONE 0
24 #define _SION_FLAG1_USECACHE 2
27 #define SION_FILESTATE_UNKNOWN -1
28 #define SION_FILESTATE_PAROPEN 0
29 #define SION_FILESTATE_SEROPEN 1
30 #define SION_FILESTATE_SEROPENRANK 2
31 #define SION_FILESTATE_SEROPENMASTER 3
32 #define SION_FILESTATE_PAROPENMAPPEDMASTER 4
33 #define SION_FILESTATE_PAROPENMAPPEDMANAGED 5
34 #define SION_FILESTATE_PAROPENMAPPED 6
35 #define SION_FILESTATE_CLOSE 10
36 #define SION_FILEMODE_UNKNOWN -20
37 #define SION_FILEMODE_READ 20
38 #define SION_FILEMODE_WRITE 30
40 #define SION_CACHE_TODISK 40
41 #define SION_CACHE_TOMEM 41
42 #define SION_CACHE_UNKNOWN 42
43 #define SION_CACHE_FNLEN 16
45 #define SION_DESCSTATE_ORIG 200
46 #define SION_DESCSTATE_DUP 201
47 #define SION_DESCSTATE_DUP_SEL_RANK 202
48 #define SION_DESCSTATE_DUP_SEL_RANK_KEY 203
50 #define SION_HINTS_TYPE_UNKNOWN 160
51 #define SION_HINTS_TYPE_LINUX 161
52 #define SION_HINTS_TYPE_GPFS 162
54 #define SION_CAPABILITY_FULL 50
55 #define SION_CAPABILITY_ONLY_SENDER 51
56 #define SION_CAPABILITY_NONE 52
58 #define _SION_DEBUG_PRINT_ALL 1
59 #define _SION_DEBUG_PRINT_RECURSIVE 2
60 
65 
79 struct _sion_filedesc_struct {
80 
81  /* file pointer and temporary data */
83  void* dataptr;
84  void* keyvalptr;
85  sion_int32 debug;
86  sion_int32 sid;
87  char* fpbuffer;
88  sion_int32 fpbuffer_size;
89  sion_int32 usebuffer;
90  char* buffer;
91  sion_int32 buffer_size;
92  sion_int32 buffer_ptr;
94  /* current position in file */
95  sion_int32 rank;
96  sion_int64 currentpos;
97  sion_int32 currentblocknr;
99  /* data for one task */
100  sion_int64 *blocksizes;
101  sion_int32 lastchunknr;
102  sion_int64 startpos;
104  /* meta header data in file */
105  char *fname;
106  sion_int32 globalrank;
107  sion_int32 ntasks;
108  sion_int32 state;
109  sion_int32 mode;
110  sion_int32 endianness;
114  sion_int32 swapbytes;
115  sion_int32 filesionversion;
116  sion_int32 filesionpatchlevel;
117  sion_int32 fileversion;
118  sion_int32 fsblksize;
119  sion_int32 maxchunks;
120  sion_int64 flag1;
121  sion_int64 flag2;
122  sion_int64 chunksize;
123  sion_int64 chunksize_req;
124  sion_int64 globalskip;
125  sion_int64 end_of_header;
126  sion_int64 start_of_varheader;
127  sion_int64 start_of_data;
128  sion_int32 nfiles;
129  sion_int32 filenumber;
130  sion_int32 maxusedchunks;
132  /* dupped filedesc */
133  sion_int32 dup_mode;
134  sion_int32 dup_sel_rank;
135  sion_uint64 dup_sel_key;
137  /* mapped files */
138  sion_int32 lrank;
139  sion_int32 ntotaltasksinfile;
140  sion_int32 nlocaltasksinfile;
141  sion_int32 filemanagedbytask;
143  /* all tasks */
144  sion_int64 *all_chunksizes;
145  sion_int64 *all_globalranks;
146  sion_int64 *all_localranks;
147  sion_int64 *all_startpointers;
148  sion_int64 *all_currentpos;
149  sion_int64 *all_currentblocknr;
150  sion_int32 *all_coll_collector;
151  sion_int32 *all_coll_collsize;
152  sion_int32 *all_coll_capability;
154  void **all_keyvalptr;
156  /* all tasks, all chunks */
157  sion_int64 *all_blockcount;
158  sion_int64 *all_blocksizes;
160  /* multi-file */
161  sion_int32 mapping_size;
162  sion_int32 *mapping;
163  char *prefix;
166  /* compression */
167  sion_int32 compress;
169  /* Key-value */
170  sion_int32 keyvalmode;
172  /* persistent cache */
173  sion_int32 usecache;
174  sion_int32 cachesize;
175  sion_int32 cacheid;
177  sion_int32 cachemode;
178  char* cacheptr;
180  /* collective I/O */
181  sion_int32 usecoll;
182  sion_int32 collsize;
183  sion_int32 collector;
184  sion_int32 coll_capability;
185  sion_int32 colldebug;
186  sion_int32 collcmdused;
187  sion_int32 fileptr_exported;
188  sion_int32 collmergemode;
189  sion_int32 collmsa;
191  /* buddy */
192  sion_int32 usebuddy;
193  sion_int32 buddylevel;
194  sion_int32 buddynr;
195  void *buddies;
197  /* hints */
198  sion_int32 usehints;
199  sion_int32 hinttype;
201 };
202 
204 int _sion_init_filedesc( _sion_filedesc *sion_filedesc );
205 int _sion_print_filedesc( _sion_filedesc *sion_filedesc, int level, char *desc, int all );
206 int _sion_free_filedesc( _sion_filedesc *sion_filedesc );
207 int _sion_realloc_filedesc_blocklist( _sion_filedesc *sion_filedesc, sion_int32 maxchunks );
208 
209 int _sion_alloc_filedesc_all_chunksizes(_sion_filedesc *sion_filedesc);
210 int _sion_alloc_filedesc_all_startpointers(_sion_filedesc *sion_filedesc);
211 int _sion_alloc_filedesc_all_globalranks(_sion_filedesc *sion_filedesc);
212 int _sion_alloc_filedesc_all_localranks(_sion_filedesc *sion_filedesc);
213 int _sion_alloc_filedesc_arrays( _sion_filedesc *sion_filedesc );
214 int _sion_alloc_filedesc_all_keyvalptr(_sion_filedesc *sion_filedesc);
215 
216 int _sion_free_filedesc_arrays( _sion_filedesc *sion_filedesc );
217 int _sion_free_filedesc_all_chunksizes(_sion_filedesc *sion_filedesc);
218 int _sion_free_filedesc_all_globalranks(_sion_filedesc *sion_filedesc);
219 int _sion_free_filedesc_all_startpointers(_sion_filedesc *sion_filedesc);
220 int _sion_free_filedesc_all_localranks(_sion_filedesc *sion_filedesc);
221 int _sion_free_filedesc_all_keyvalptr(_sion_filedesc *sion_filedesc);
222 
223 
224 
227 
230 
231 int _sion_alloc_filedesc_arrays_mapped(_sion_filedesc *sion_filedesc);
232 int _sion_alloc_filedesc_block_arrays_mapped(_sion_filedesc *sion_filedesc);
233 
234 char* _sion_fileptrflags_to_str (unsigned int flag);
235 int _sion_get_size_of_filedesc(_sion_filedesc *sion_filedesc, int *numbytes, int *numfds);
236 
238 
239 
240 #endif
_sion_filedesc_struct::usebuddy
sion_int32 usebuddy
Definition: sion_filedesc.h:191
_sion_fileptrflags_to_str
char * _sion_fileptrflags_to_str(unsigned int flag)
Definition: sion_file.c:1209
_sion_filedesc_struct::all_currentblocknr
sion_int64 * all_currentblocknr
Definition: sion_filedesc.h:148
_sion_alloc_filedesc_block_arrays_only
int _sion_alloc_filedesc_block_arrays_only(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion structure, fields for all chunksizes of all tasks.
Definition: sion_filedesc.c:570
_sion_filedesc_struct::usehints
sion_int32 usehints
Definition: sion_filedesc.h:197
_sion_filedesc_struct::usebuffer
sion_int32 usebuffer
Definition: sion_filedesc.h:88
_sion_filedesc_struct::all_coll_collector
sion_int32 * all_coll_collector
Definition: sion_filedesc.h:149
_sion_filedesc_struct::buffer_ptr
sion_int32 buffer_ptr
Definition: sion_filedesc.h:91
_sion_filedesc_struct::buddynr
sion_int32 buddynr
Definition: sion_filedesc.h:193
_sion_filedesc_struct::usecache
sion_int32 usecache
Definition: sion_filedesc.h:172
_sion_filedesc_struct::cachesize
sion_int32 cachesize
Definition: sion_filedesc.h:173
_sion_filedesc_struct::colldebug
sion_int32 colldebug
Definition: sion_filedesc.h:184
_sion_filedesc_struct::usecoll
sion_int32 usecoll
Definition: sion_filedesc.h:180
_sion_filedesc_struct::filenumber
sion_int32 filenumber
Definition: sion_filedesc.h:128
SION_CACHE_FNLEN
#define SION_CACHE_FNLEN
Definition: sion_filedesc.h:42
_sion_filedesc_struct::compress
sion_int32 compress
Definition: sion_filedesc.h:166
_sion_filedesc_struct::all_blocksizes
sion_int64 * all_blocksizes
Definition: sion_filedesc.h:157
_sion_filedesc_struct::currentblocknr
sion_int32 currentblocknr
Definition: sion_filedesc.h:96
_sion_filedesc_struct::maxusedchunks
sion_int32 maxusedchunks
Definition: sion_filedesc.h:129
_sion_filedesc_struct::fileptr
_sion_fileptr * fileptr
Definition: sion_filedesc.h:81
sion_datatypes.h
_sion_alloc_filedesc_block_arrays
int _sion_alloc_filedesc_block_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion structure, fields for all chunksizes of all tasks.
Definition: sion_filedesc.c:522
_sion_filedesc_struct::cachefn
char cachefn[SION_CACHE_FNLEN]
Definition: sion_filedesc.h:175
_sion_filedesc_struct::dup_sel_key
sion_uint64 dup_sel_key
Definition: sion_filedesc.h:134
_sion_filedesc_struct::collsize
sion_int32 collsize
Definition: sion_filedesc.h:181
_sion_filedesc_struct::all_startpointers
sion_int64 * all_startpointers
Definition: sion_filedesc.h:146
_sion_filedesc_struct::blocksizes
sion_int64 * blocksizes
Definition: sion_filedesc.h:99
_sion_filedesc_struct::filesionversion
sion_int32 filesionversion
Definition: sion_filedesc.h:114
_sion_filedesc_struct::sid
sion_int32 sid
Definition: sion_filedesc.h:85
_sion_filedesc_struct::mode
sion_int32 mode
Definition: sion_filedesc.h:108
_sion_filedesc_struct::mapping_size
sion_int32 mapping_size
Definition: sion_filedesc.h:160
_sion_filedesc_struct::all_coll_collsize
sion_int32 * all_coll_collsize
Definition: sion_filedesc.h:150
_sion_filedesc_struct::rank
sion_int32 rank
Definition: sion_filedesc.h:94
_sion_filedesc_struct::nlocaltasksinfile
sion_int32 nlocaltasksinfile
Definition: sion_filedesc.h:139
_sion_filedesc_struct::cacheptr
char * cacheptr
Definition: sion_filedesc.h:177
_sion_filedesc_struct::fpbuffer_size
sion_int32 fpbuffer_size
Definition: sion_filedesc.h:87
_sion_filedesc_struct::chunksize_req
sion_int64 chunksize_req
Definition: sion_filedesc.h:122
_sion_filedesc_struct::flag2
sion_int64 flag2
Definition: sion_filedesc.h:120
_sion_filedesc_struct::fsblksize
sion_int32 fsblksize
Definition: sion_filedesc.h:117
_sion_filedesc_struct::collcmdused
sion_int32 collcmdused
Definition: sion_filedesc.h:185
_sion_alloc_filedesc_coll_arrays
int _sion_alloc_filedesc_coll_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion arrays.
Definition: sion_filedesc.c:447
_sion_filedesc_struct::all_globalranks
sion_int64 * all_globalranks
Definition: sion_filedesc.h:144
_sion_filedesc_struct::prefix
char * prefix
Definition: sion_filedesc.h:162
_sion_filedesc_struct::debug
sion_int32 debug
Definition: sion_filedesc.h:84
_sion_filedesc_struct::fpbuffer
char * fpbuffer
Definition: sion_filedesc.h:86
_sion_filedesc_struct::keyvalptr
void * keyvalptr
Definition: sion_filedesc.h:83
_sion_filedesc_struct::all_localranks
sion_int64 * all_localranks
Definition: sion_filedesc.h:145
_sion_filedesc_struct::globalskip
sion_int64 globalskip
Definition: sion_filedesc.h:123
_sion_free_filedesc_coll_arrays
int _sion_free_filedesc_coll_arrays(_sion_filedesc *sion_filedesc)
free memory for the internal sion arrays
Definition: sion_filedesc.c:494
_sion_filedesc_struct::fileptr_exported
sion_int32 fileptr_exported
Definition: sion_filedesc.h:186
_sion_filedesc_struct
Sion File Descriptor Structure.
Definition: sion_filedesc.h:78
_sion_filedesc_struct::currentpos
sion_int64 currentpos
Definition: sion_filedesc.h:95
_sion_filedesc_struct::all_chunksizes
sion_int64 * all_chunksizes
Definition: sion_filedesc.h:143
_sion_filedesc_struct::hinttype
sion_int32 hinttype
Definition: sion_filedesc.h:198
_sion_filedesc_struct::keyvalmode
sion_int32 keyvalmode
Definition: sion_filedesc.h:169
_sion_filedesc_struct::multifiles
_sion_filedesc ** multifiles
Definition: sion_filedesc.h:163
_sion_filedesc_struct::cacheid
sion_int32 cacheid
Definition: sion_filedesc.h:174
_sion_filedesc_struct::cachemode
sion_int32 cachemode
Definition: sion_filedesc.h:176
_sion_filedesc_struct::flag1
sion_int64 flag1
Definition: sion_filedesc.h:119
_sion_filedesc_struct::buffer
char * buffer
Definition: sion_filedesc.h:89
_sion_filedesc_struct::maxchunks
sion_int32 maxchunks
Definition: sion_filedesc.h:118
_sion_filedesc_struct::all_keyvalptr
void ** all_keyvalptr
Definition: sion_filedesc.h:153
_sion_filedesc_struct::fname
char * fname
Definition: sion_filedesc.h:104
_sion_filedesc_struct::buddies
void * buddies
Definition: sion_filedesc.h:194
_sion_get_size_of_filedesc
int _sion_get_size_of_filedesc(_sion_filedesc *sion_filedesc, int *numbytes, int *numfds)
get size of internal data structure sion_filedesc
Definition: sion_filedesc.c:870
_sion_filedesc_struct::ntasks
sion_int32 ntasks
Definition: sion_filedesc.h:106
_sion_init_filedesc
int _sion_init_filedesc(_sion_filedesc *sion_filedesc)
Initialize the sion file description.
Definition: sion_filedesc.c:37
_sion_filedesc_struct::globalrank
sion_int32 globalrank
Definition: sion_filedesc.h:105
_sion_filedesc_struct::collmsa
sion_int32 collmsa
Definition: sion_filedesc.h:188
_sion_filedesc_struct::start_of_varheader
sion_int64 start_of_varheader
Definition: sion_filedesc.h:125
_sion_print_filedesc
int _sion_print_filedesc(_sion_filedesc *sion_filedesc, int level, char *desc, int all)
Print the initialized sion file description.
Definition: sion_filedesc.c:656
sion_const.h
sion_file.h
_sion_filedesc_struct::all_currentpos
sion_int64 * all_currentpos
Definition: sion_filedesc.h:147
_sion_filedesc_struct::fileversion
sion_int32 fileversion
Definition: sion_filedesc.h:116
_sion_free_filedesc_arrays
int _sion_free_filedesc_arrays(_sion_filedesc *sion_filedesc)
free memory for the internal sion arrays
Definition: sion_filedesc.c:429
_sion_filedesc_struct::swapbytes
sion_int32 swapbytes
Definition: sion_filedesc.h:113
_sion_filedesc_struct::dataptr
void * dataptr
Definition: sion_filedesc.h:82
_sion_filedesc_struct::nfiles
sion_int32 nfiles
Definition: sion_filedesc.h:127
_sion_realloc_filedesc_blocklist
int _sion_realloc_filedesc_blocklist(_sion_filedesc *sion_filedesc, sion_int32 maxchunks)
Increase the memory used by the internal sion structure for the blocklist.
Definition: sion_filedesc.c:191
_sion_filedesc_struct::state
sion_int32 state
Definition: sion_filedesc.h:107
_sion_filedesc_struct::collmergemode
sion_int32 collmergemode
Definition: sion_filedesc.h:187
_sion_filedesc_struct::dup_mode
sion_int32 dup_mode
Definition: sion_filedesc.h:132
_sion_alloc_filedesc
_sion_filedesc * _sion_alloc_filedesc(void)
Allocates memory for internal sion structure.
Definition: sion_filedesc.c:168
_sion_filedesc_struct::coll_capability
sion_int32 coll_capability
Definition: sion_filedesc.h:183
_sion_filedesc_struct::dup_sel_rank
sion_int32 dup_sel_rank
Definition: sion_filedesc.h:133
_sion_filedesc_struct::all_blockcount
sion_int64 * all_blockcount
Definition: sion_filedesc.h:156
_sion_filedesc_struct::buddylevel
sion_int32 buddylevel
Definition: sion_filedesc.h:192
_sion_filedesc_struct::collector
sion_int32 collector
Definition: sion_filedesc.h:182
_sion_dup_filedesc
_sion_filedesc * _sion_dup_filedesc(_sion_filedesc *sion_filedesc)
duplicates a filedesc data structure, not copying/reopen active file pointers
Definition: sion_filedesc.c:1032
_sion_filedesc_struct::end_of_header
sion_int64 end_of_header
Definition: sion_filedesc.h:124
_sion_filedesc_struct::buffer_size
sion_int32 buffer_size
Definition: sion_filedesc.h:90
_sion_filedesc_struct::chunksize
sion_int64 chunksize
Definition: sion_filedesc.h:121
_sion_filedesc_struct::start_of_data
sion_int64 start_of_data
Definition: sion_filedesc.h:126
_sion_filedesc_struct::ntotaltasksinfile
sion_int32 ntotaltasksinfile
Definition: sion_filedesc.h:138
_sion_filedesc_struct::mapping
sion_int32 * mapping
Definition: sion_filedesc.h:161
_sion_filedesc_struct::startpos
sion_int64 startpos
Definition: sion_filedesc.h:101
_sion_filedesc_struct::endianness
sion_int32 endianness
Definition: sion_filedesc.h:109
_sion_alloc_filedesc_arrays
int _sion_alloc_filedesc_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion arrays.
Definition: sion_filedesc.c:336
_sion_filedesc_struct::filemanagedbytask
sion_int32 filemanagedbytask
Definition: sion_filedesc.h:140
_sion_fileptr_s
Definition: sion_file.h:29
_sion_filedesc_struct::lrank
sion_int32 lrank
Definition: sion_filedesc.h:137
_sion_filedesc_struct::filesionpatchlevel
sion_int32 filesionpatchlevel
Definition: sion_filedesc.h:115
_sion_filedesc_struct::lastchunknr
sion_int32 lastchunknr
Definition: sion_filedesc.h:100
_sion_filedesc_struct::all_coll_capability
sion_int32 * all_coll_capability
Definition: sion_filedesc.h:151