Updated MMap module to option parser.
parent
b4fb80a69e
commit
21405ed924
|
@ -32,6 +32,7 @@ static IOR_offset_t MMAP_Xfer(int, void *, IOR_size_t *,
|
|||
IOR_offset_t, IOR_param_t *);
|
||||
static void MMAP_Close(void *, IOR_param_t *);
|
||||
static void MMAP_Fsync(void *, IOR_param_t *);
|
||||
static option_help * MMAP_options(void ** init_backend_options, void * init_values);
|
||||
|
||||
/************************** D E C L A R A T I O N S ***************************/
|
||||
|
||||
|
@ -45,9 +46,38 @@ ior_aiori_t mmap_aiori = {
|
|||
.get_version = aiori_get_version,
|
||||
.fsync = MMAP_Fsync,
|
||||
.get_file_size = POSIX_GetFileSize,
|
||||
.get_options = MMAP_options,
|
||||
};
|
||||
|
||||
/***************************** F U N C T I O N S ******************************/
|
||||
typedef struct{
|
||||
int direct_io_ignored; /* this option is ignored */
|
||||
void* mmap_ptr; /* for internal usage */
|
||||
|
||||
int madv_dont_need;
|
||||
int madv_pattern;
|
||||
} mmap_options_t;
|
||||
|
||||
static option_help * MMAP_options(void ** init_backend_options, void * init_values){
|
||||
mmap_options_t * o = malloc(sizeof(mmap_options_t));
|
||||
|
||||
if (init_values != NULL){
|
||||
memcpy(o, init_values, sizeof(mmap_options_t));
|
||||
}else{
|
||||
o->direct_io_ignored = 0;
|
||||
}
|
||||
|
||||
*init_backend_options = o;
|
||||
|
||||
option_help h [] = {
|
||||
{0, "mmap.madv_dont_need", "Use advise don't need", OPTION_FLAG, 'd', & o->madv_dont_need},
|
||||
{0, "mmap.madv_pattern", "Use advise to indicate the pattern random/sequential", OPTION_FLAG, 'd', & o->madv_pattern},
|
||||
LAST_OPTION
|
||||
};
|
||||
option_help * help = malloc(sizeof(h));
|
||||
memcpy(help, h, sizeof(h));
|
||||
return help;
|
||||
}
|
||||
|
||||
static void ior_mmap_file(int *file, IOR_param_t *param)
|
||||
{
|
||||
|
@ -56,21 +86,27 @@ static void ior_mmap_file(int *file, IOR_param_t *param)
|
|||
|
||||
if (param->open == WRITE)
|
||||
flags |= PROT_WRITE;
|
||||
mmap_options_t *o = (mmap_options_t*) param->backend_options;
|
||||
|
||||
param->mmap_ptr = mmap(NULL, size, flags, MAP_SHARED,
|
||||
o->mmap_ptr = mmap(NULL, size, flags, MAP_SHARED,
|
||||
*file, 0);
|
||||
if (param->mmap_ptr == MAP_FAILED)
|
||||
if (o->mmap_ptr == MAP_FAILED)
|
||||
ERR("mmap() failed");
|
||||
|
||||
if (param->randomOffset)
|
||||
flags = POSIX_MADV_RANDOM;
|
||||
else
|
||||
flags = POSIX_MADV_SEQUENTIAL;
|
||||
if (posix_madvise(param->mmap_ptr, size, flags) != 0)
|
||||
ERR("madvise() failed");
|
||||
|
||||
if(o->madv_pattern){
|
||||
if (posix_madvise(o->mmap_ptr, size, flags) != 0)
|
||||
ERR("madvise() failed");
|
||||
}
|
||||
|
||||
if (posix_madvise(param->mmap_ptr, size, POSIX_MADV_DONTNEED) != 0)
|
||||
ERR("madvise() failed");
|
||||
if (o->madv_dont_need){
|
||||
if (posix_madvise(o->mmap_ptr, size, POSIX_MADV_DONTNEED) != 0)
|
||||
ERR("madvise() failed");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -107,16 +143,17 @@ static void *MMAP_Open(char *testFileName, IOR_param_t * param)
|
|||
static IOR_offset_t MMAP_Xfer(int access, void *file, IOR_size_t * buffer,
|
||||
IOR_offset_t length, IOR_param_t * param)
|
||||
{
|
||||
mmap_options_t *o = (mmap_options_t*) param->backend_options;
|
||||
if (access == WRITE) {
|
||||
memcpy(param->mmap_ptr + param->offset, buffer, length);
|
||||
memcpy(o->mmap_ptr + param->offset, buffer, length);
|
||||
} else {
|
||||
memcpy(buffer, param->mmap_ptr + param->offset, length);
|
||||
memcpy(buffer, o->mmap_ptr + param->offset, length);
|
||||
}
|
||||
|
||||
if (param->fsyncPerWrite == TRUE) {
|
||||
if (msync(param->mmap_ptr + param->offset, length, MS_SYNC) != 0)
|
||||
if (msync(o->mmap_ptr + param->offset, length, MS_SYNC) != 0)
|
||||
ERR("msync() failed");
|
||||
if (posix_madvise(param->mmap_ptr + param->offset, length,
|
||||
if (posix_madvise(o->mmap_ptr + param->offset, length,
|
||||
POSIX_MADV_DONTNEED) != 0)
|
||||
ERR("madvise() failed");
|
||||
}
|
||||
|
@ -128,7 +165,8 @@ static IOR_offset_t MMAP_Xfer(int access, void *file, IOR_size_t * buffer,
|
|||
*/
|
||||
static void MMAP_Fsync(void *fd, IOR_param_t * param)
|
||||
{
|
||||
if (msync(param->mmap_ptr, param->expectedAggFileSize, MS_SYNC) != 0)
|
||||
mmap_options_t *o = (mmap_options_t*) param->backend_options;
|
||||
if (msync(o->mmap_ptr, param->expectedAggFileSize, MS_SYNC) != 0)
|
||||
EWARN("msync() failed");
|
||||
}
|
||||
|
||||
|
@ -137,8 +175,9 @@ static void MMAP_Fsync(void *fd, IOR_param_t * param)
|
|||
*/
|
||||
static void MMAP_Close(void *fd, IOR_param_t * param)
|
||||
{
|
||||
if (munmap(param->mmap_ptr, param->expectedAggFileSize) != 0)
|
||||
mmap_options_t *o = (mmap_options_t*) param->backend_options;
|
||||
if (munmap(o->mmap_ptr, param->expectedAggFileSize) != 0)
|
||||
ERR("munmap failed");
|
||||
param->mmap_ptr = NULL;
|
||||
o->mmap_ptr = NULL;
|
||||
POSIX_Close(fd, param);
|
||||
}
|
||||
|
|
|
@ -74,11 +74,12 @@ static void POSIX_Fsync(void *, IOR_param_t *);
|
|||
|
||||
/************************** O P T I O N S *****************************/
|
||||
typedef struct{
|
||||
/* in case of a change, please update depending MMAP module too */
|
||||
int direct_io;
|
||||
} posix_options_t;
|
||||
|
||||
|
||||
static option_help * posix_options(void ** init_backend_options, void * init_values){
|
||||
option_help * POSIX_options(void ** init_backend_options, void * init_values){
|
||||
posix_options_t * o = malloc(sizeof(posix_options_t));
|
||||
|
||||
if (init_values != NULL){
|
||||
|
@ -118,7 +119,7 @@ ior_aiori_t posix_aiori = {
|
|||
.rmdir = aiori_posix_rmdir,
|
||||
.access = aiori_posix_access,
|
||||
.stat = aiori_posix_stat,
|
||||
.get_options = posix_options,
|
||||
.get_options = POSIX_options,
|
||||
.enable_mdtest = true,
|
||||
};
|
||||
|
||||
|
|
|
@ -129,6 +129,8 @@ void *POSIX_Open(char *testFileName, IOR_param_t * param);
|
|||
IOR_offset_t POSIX_GetFileSize(IOR_param_t * test, MPI_Comm testComm, char *testFileName);
|
||||
void POSIX_Delete(char *testFileName, IOR_param_t * param);
|
||||
void POSIX_Close(void *fd, IOR_param_t * param);
|
||||
option_help * POSIX_options(void ** init_backend_options, void * init_values);
|
||||
|
||||
|
||||
/* NOTE: these 3 MPI-IO functions are exported for reuse by HDF5/PNetCDF */
|
||||
void MPIIO_Delete(char *testFileName, IOR_param_t * param);
|
||||
|
|
|
@ -218,8 +218,6 @@ void init_IOR_Param_t(IOR_param_t * p)
|
|||
|
||||
p->beegfs_numTargets = -1;
|
||||
p->beegfs_chunkSize = -1;
|
||||
|
||||
p->mmap_ptr = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue