14 #include <sys/ioctl.h> 46 if (init_values !=
NULL){
85 ERRF(
"Couldn't initialize io context %s", strerror(
errno));
135 ERR(
"AIO: errno == EAGAIN; this should't happen");
137 ERRF(
"AIO: submitted %d, error: \"%s\" ; this should't happen", res, strerror(
errno));
146 struct io_event events[o->in_flight];
148 num_events = io_getevents(o->ioctx, o->in_flight, o->in_flight, events,
NULL);
149 for (
int i = 0; i < num_events; i++) {
150 struct io_event event = events[i];
152 ERR(
"AIO, error in io_getevents(), IO incomplete!");
154 o->pending_bytes -=
event.res;
158 if(o->pending_bytes != 0){
159 ERRF(
"AIO, error in flushing data, pending bytes: %lld", o->pending_bytes);
169 struct io_event events[o->in_flight];
171 int mn = o->in_flight < o->granularity ? o->in_flight : o->granularity;
172 num_events = io_getevents(o->ioctx, mn, o->in_flight, events,
NULL);
174 for (
int i = 0; i < num_events; i++) {
175 struct io_event event = events[i];
177 ERR(
"AIO, error in io_getevents(), IO incomplete!");
179 o->pending_bytes -=
event.res;
183 o->in_flight -= num_events;
196 struct iocb * iocb = malloc(
sizeof(
struct iocb));
198 io_prep_pwrite(iocb, *(
int*)afd->
pfd, buffer, length, offset);
200 io_prep_pread(iocb, *(
int*)afd->
pfd, buffer, length, offset);
257 .enable_mdtest =
true
static void aio_Sync(aiori_mod_opt_t *param)
static void aio_Close(aiori_fd_t *fd, aiori_mod_opt_t *param)
static void aio_finalize(aiori_mod_opt_t *param)
static int aio_check_params(aiori_mod_opt_t *param)
struct benchmark_options o
static void aio_Fsync(aiori_fd_t *fd, aiori_mod_opt_t *param)
void POSIX_Close(aiori_fd_t *afd, aiori_mod_opt_t *param)
int aiori_posix_stat(const char *path, struct stat *buf, aiori_mod_opt_t *module_options)
aiori_fd_t * POSIX_Open(char *testFileName, int flags, aiori_mod_opt_t *param)
char * aiori_get_version()
aiori_fd_t * POSIX_Create(char *testFileName, int flags, aiori_mod_opt_t *param)
void POSIX_Delete(char *testFileName, aiori_mod_opt_t *param)
static aiori_xfer_hint_t * hints
static void submit_pending(aio_options_t *o)
void POSIX_Sync(aiori_mod_opt_t *param)
static void aio_xfer_hints(aiori_xfer_hint_t *params)
IOR_offset_t pending_bytes
static aiori_fd_t * aio_Open(char *testFileName, int flags, aiori_mod_opt_t *param)
int POSIX_check_params(aiori_mod_opt_t *param)
int aiori_posix_access(const char *path, int mode, aiori_mod_opt_t *module_options)
static void process_some(aio_options_t *o)
int aiori_posix_rmdir(const char *path, aiori_mod_opt_t *module_options)
void POSIX_Fsync(aiori_fd_t *afd, aiori_mod_opt_t *param)
void POSIX_xfer_hints(aiori_xfer_hint_t *params)
int aiori_posix_mkdir(const char *path, mode_t mode, aiori_mod_opt_t *module_options)
option_help * aio_options(aiori_mod_opt_t **init_backend_options, aiori_mod_opt_t *init_values)
static aiori_fd_t * aio_create(char *testFileName, int flags, aiori_mod_opt_t *param)
int aiori_posix_statfs(const char *path, ior_aiori_statfs_t *stat_buf, aiori_mod_opt_t *module_options)
option_help * POSIX_options(aiori_mod_opt_t **init_backend_options, aiori_mod_opt_t *init_values)
static void complete_all(aio_options_t *o)
long long int IOR_offset_t
IOR_offset_t POSIX_GetFileSize(aiori_mod_opt_t *test, char *testFileName)
static void aio_initialize(aiori_mod_opt_t *param)
static IOR_offset_t aio_Xfer(int access, aiori_fd_t *fd, IOR_size_t *buffer, IOR_offset_t length, IOR_offset_t offset, aiori_mod_opt_t *param)
option_help * option_merge(option_help *a, option_help *b)