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

Lines Matching defs:oper

308 static void oper_list_add(struct io_oper *oper, struct io_oper **list)
311 *list = oper;
312 oper->prev = oper->next = oper;
315 oper->prev = (*list)->prev;
316 oper->next = *list;
317 (*list)->prev->next = oper;
318 (*list)->prev = oper;
322 static void oper_list_del(struct io_oper *oper, struct io_oper **list)
328 oper->prev->next = oper->next;
329 oper->next->prev = oper->prev;
330 if (*list == oper)
331 *list = oper->next;
380 static int grab_iou(struct io_unit *io, struct io_oper *oper)
387 io->io_oper = oper;
406 static inline double oper_mb_trans(struct io_oper *oper)
408 return ((double)oper->started_ios * (double)oper->reclen) /
412 static void print_time(struct io_oper *oper)
418 runtime = time_since_now(&oper->start_time);
419 mb = oper_mb_trans(oper);
422 stage_name(oper->rw), oper->file_name, tput, mb, runtime);
463 struct io_oper *oper = io->io_oper;
470 oper->num_pending--;
473 if (oper->num_pending == 0 &&
474 (oper->started_ios == oper->total_ios || oper->stonewalled)) {
475 print_time(oper);
513 static struct io_unit *find_iou(struct thread_info *t, struct io_oper *oper)
522 if (grab_iou(event_io, oper)) {
539 static int io_oper_wait(struct thread_info *t, struct io_oper *oper)
544 if (oper == NULL) {
548 if (oper->num_pending == 0)
565 if (oper->num_pending == 0)
569 if (oper->num_err) {
570 fprintf(stderr, "%u errors on oper, last %u\n",
571 oper->num_err, oper->last_err);
576 off_t random_byte_offset(struct io_oper * oper)
579 off_t rand_byte = oper->start;
583 range = (oper->end - oper->start) / (1024 * 1024);
602 if (rand_byte + oper->reclen > oper->end) {
603 rand_byte -= oper->reclen;
609 * build an aio iocb for an operation, based on oper->rw and the
616 static struct io_unit *build_iocb(struct thread_info *t, struct io_oper *oper)
621 io = find_iou(t, oper);
627 switch (oper->rw) {
629 io_prep_pwrite(&io->iocb, oper->fd, io->buf, oper->reclen,
630 oper->last_offset);
631 oper->last_offset += oper->reclen;
634 io_prep_pread(&io->iocb, oper->fd, io->buf, oper->reclen,
635 oper->last_offset);
636 oper->last_offset += oper->reclen;
639 rand_byte = random_byte_offset(oper);
640 oper->last_offset = rand_byte;
641 io_prep_pread(&io->iocb, oper->fd, io->buf, oper->reclen,
645 rand_byte = random_byte_offset(oper);
646 oper->last_offset = rand_byte;
647 io_prep_pwrite(&io->iocb, oper->fd, io->buf, oper->reclen,
660 static int finish_oper(struct thread_info *t, struct io_oper *oper)
664 io_oper_wait(t, oper);
665 last_err = oper->last_err;
666 if (oper->num_pending > 0) {
667 fprintf(stderr, "oper num_pending is %d\n", oper->num_pending);
669 close(oper->fd);
670 free(oper);
682 struct io_oper *oper;
684 oper = malloc(sizeof(*oper));
685 if (!oper) {
686 fprintf(stderr, "unable to allocate io oper\n");
689 memset(oper, 0, sizeof(*oper));
691 oper->depth = depth;
692 oper->start = start;
693 oper->end = end;
694 oper->last_offset = oper->start;
695 oper->fd = fd;
696 oper->reclen = reclen;
697 oper->rw = rw;
698 oper->total_ios = (oper->end - oper->start) / oper->reclen;
699 oper
701 return oper;
708 int build_oper(struct thread_info *t, struct io_oper *oper, int num_ios,
714 if (oper->started_ios == 0)
715 gettimeofday(&oper->start_time, NULL);
718 num_ios = oper->total_ios;
720 if ((oper->started_ios + num_ios) > oper->total_ios)
721 num_ios = oper->total_ios - oper->started_ios;
724 io = build_iocb(t, oper);
735 * counters in the associated oper struct
796 * changes oper->rw to the next in a command sequence, or returns zero
799 static int restart_oper(struct io_oper *oper)
802 if (oper->last_err)
806 switch (oper->rw) {
819 oper->started_ios = 0;
820 oper->last_offset = oper->start;
821 oper->stonewalled = 0;
827 if (oper->num_pending)
828 print_time(oper);
830 oper->rw = new_rw;
836 static int oper_runnable(struct io_oper *oper)
844 if (oper->started_ios || oper->start == 0)
848 if (oper->rw >= RWRITE)
850 ret = fstat(oper->fd, &buf);
855 if (S_ISREG(buf.st_mode) && buf.st_size < oper->start)
874 struct io_oper *oper;
880 oper = t->active_opers;
881 while (oper) {
882 if (!oper_runnable(oper)) {
883 oper = oper->next;
884 if (oper == t->active_opers)
888 ret = build_oper(t, oper, io_iter, my_iocbs);
892 oper_list_del(oper, &t->active_opers);
893 oper_list_add(oper, &built_opers);
894 oper = t->active_opers;
907 oper = built_opers;
908 oper_list_del(oper, &built_opers);
909 oper_list_add(oper, &t->active_opers);
910 if (oper->started_ios == oper->total_ios) {
911 oper_list_del(oper, &t->active_opers);
912 oper_list_add(oper, &t->finished_opers);
1112 struct io_oper *oper;
1145 oper = t->active_opers;
1146 oper->stonewalled = 1;
1147 oper_list_del(oper, &t->active_opers);
1148 oper_list_add(oper, &t->finished_opers);
1161 oper = t->finished_opers;
1163 if (!oper)
1165 io_oper_wait(t, oper);
1166 oper = oper->next;
1167 } while (oper != t->finished_opers);
1172 oper = t->finished_opers;
1173 while (oper) {
1175 fsync(oper->fd);
1176 t->stage_mb_trans += oper_mb_trans(oper);
1177 if (restart_oper(oper)) {
1178 oper_list_del(oper, &t->finished_opers);
1179 oper_list_add(oper, &t->active_opers);
1180 oper = t->finished_opers;
1183 oper = oper->next;
1184 if (oper == t->finished_opers)
1218 oper = t->finished_opers;
1219 oper_list_del(oper, &t->finished_opers);
1220 status = finish_oper(t, oper);
1339 struct io_oper *oper;
1519 oper =
1523 if (!oper) {
1527 oper_list_add(oper, &t[thread_index].active_opers);