Home | History | Annotate | Download | only in ltp-aiodio

Lines Matching refs:oper

312 static void oper_list_add(struct io_oper *oper, struct io_oper **list)
315 *list = oper;
316 oper->prev = oper->next = oper;
319 oper->prev = (*list)->prev;
320 oper->next = *list;
321 (*list)->prev->next = oper;
322 (*list)->prev = oper;
326 static void oper_list_del(struct io_oper *oper, struct io_oper **list)
332 oper->prev->next = oper->next;
333 oper->next->prev = oper->prev;
334 if (*list == oper)
335 *list = oper->next;
384 static int grab_iou(struct io_unit *io, struct io_oper *oper)
391 io->io_oper = oper;
410 static inline double oper_mb_trans(struct io_oper *oper)
412 return ((double)oper->started_ios * (double)oper->reclen) /
416 static void print_time(struct io_oper *oper)
422 runtime = time_since_now(&oper->start_time);
423 mb = oper_mb_trans(oper);
426 stage_name(oper->rw), oper->file_name, tput, mb, runtime);
467 struct io_oper *oper = io->io_oper;
474 oper->num_pending--;
477 if (oper->num_pending == 0 &&
478 (oper->started_ios == oper->total_ios || oper->stonewalled)) {
479 print_time(oper);
517 static struct io_unit *find_iou(struct thread_info *t, struct io_oper *oper)
526 if (grab_iou(event_io, oper)) {
543 static int io_oper_wait(struct thread_info *t, struct io_oper *oper)
548 if (oper == NULL) {
552 if (oper->num_pending == 0)
569 if (oper->num_pending == 0)
573 if (oper->num_err) {
574 fprintf(stderr, "%u errors on oper, last %u\n",
575 oper->num_err, oper->last_err);
580 off_t random_byte_offset(struct io_oper * oper)
583 off_t rand_byte = oper->start;
587 range = (oper->end - oper->start) / (1024 * 1024);
606 if (rand_byte + oper->reclen > oper->end) {
607 rand_byte -= oper->reclen;
613 * build an aio iocb for an operation, based on oper->rw and the
620 static struct io_unit *build_iocb(struct thread_info *t, struct io_oper *oper)
625 io = find_iou(t, oper);
631 switch (oper->rw) {
633 io_prep_pwrite(&io->iocb, oper->fd, io->buf, oper->reclen,
634 oper->last_offset);
635 oper->last_offset += oper->reclen;
638 io_prep_pread(&io->iocb, oper->fd, io->buf, oper->reclen,
639 oper->last_offset);
640 oper->last_offset += oper->reclen;
643 rand_byte = random_byte_offset(oper);
644 oper->last_offset = rand_byte;
645 io_prep_pread(&io->iocb, oper->fd, io->buf, oper->reclen,
649 rand_byte = random_byte_offset(oper);
650 oper->last_offset = rand_byte;
651 io_prep_pwrite(&io->iocb, oper->fd, io->buf, oper->reclen,
664 static int finish_oper(struct thread_info *t, struct io_oper *oper)
668 io_oper_wait(t, oper);
669 last_err = oper->last_err;
670 if (oper->num_pending > 0) {
671 fprintf(stderr, "oper num_pending is %d\n", oper->num_pending);
673 close(oper->fd);
674 free(oper);
686 struct io_oper *oper;
688 oper = malloc(sizeof(*oper));
689 if (!oper) {
690 fprintf(stderr, "unable to allocate io oper\n");
693 memset(oper, 0, sizeof(*oper));
695 oper->depth = depth;
696 oper->start = start;
697 oper->end = end;
698 oper->last_offset = oper->start;
699 oper->fd = fd;
700 oper->reclen = reclen;
701 oper->rw = rw;
702 operoper->end - oper->start) / oper->reclen;
703 oper->file_name = file_name;
705 return oper;
712 int build_oper(struct thread_info *t, struct io_oper *oper, int num_ios,
718 if (oper->started_ios == 0)
719 gettimeofday(&oper->start_time, NULL);
722 num_ios = oper->total_ios;
724 if ((oper->started_ios + num_ios) > oper->total_ios)
725 num_ios = oper->total_ios - oper->started_ios;
728 io = build_iocb(t, oper);
739 * counters in the associated oper struct
800 * changes oper->rw to the next in a command sequence, or returns zero
803 static int restart_oper(struct io_oper *oper)
806 if (oper->last_err)
810 switch (oper->rw) {
823 oper->started_ios = 0;
824 oper->last_offset = oper->start;
825 oper->stonewalled = 0;
831 if (oper->num_pending)
832 print_time(oper);
834 oper->rw = new_rw;
840 static int oper_runnable(struct io_oper *oper)
848 if (oper->started_ios || oper->start == 0)
852 if (oper->rw >= RWRITE)
854 ret = fstat(oper->fd, &buf);
859 if (S_ISREG(buf.st_mode) && buf.st_size < oper->start)
878 struct io_oper *oper;
884 oper = t->active_opers;
885 while (oper) {
886 if (!oper_runnable(oper)) {
887 oper = oper->next;
888 if (oper == t->active_opers)
892 ret = build_oper(t, oper, io_iter, my_iocbs);
896 oper_list_del(oper, &t->active_opers);
897 oper_list_add(oper, &built_opers);
898 oper = t->active_opers;
911 oper = built_opers;
912 oper_list_del(oper, &built_opers);
913 oper_list_add(oper, &t->active_opers);
914 if (oper->started_ios == oper->total_ios) {
915 oper_list_del(oper, &t->active_opers);
916 oper_list_add(oper, &t->finished_opers);
1116 struct io_oper *oper;
1149 oper = t->active_opers;
1150 oper->stonewalled = 1;
1151 oper_list_del(oper, &t->active_opers);
1152 oper_list_add(oper, &t->finished_opers);
1165 oper = t->finished_opers;
1167 if (!oper)
1169 io_oper_wait(t, oper);
1170 oper = oper->next;
1171 } while (oper != t->finished_opers);
1176 oper = t->finished_opers;
1177 while (oper) {
1179 fsync(oper->fd);
1180 t->stage_mb_trans += oper_mb_trans(oper);
1181 if (restart_oper(oper)) {
1182 oper_list_del(oper, &t->finished_opers);
1183 oper_list_add(oper, &t->active_opers);
1184 oper = t->finished_opers;
1187 oper = oper->next;
1188 if (oper == t->finished_opers)
1222 oper = t->finished_opers;
1223 oper_list_del(oper, &t->finished_opers);
1224 status = finish_oper(t, oper);
1343 struct io_oper *oper;
1523 oper =
1527 if (!oper) {
1531 oper_list_add(oper, &t[thread_index].active_opers);