void add_trace(struct io *iop) { if (iop->t.action & BLK_TC_ACT(BLK_TC_NOTIFY)) { if (iop->t.action == BLK_TN_PROCESS) { if (iop->t.pid == 0) process_alloc(0, "kernel"); else { char *slash = strchr(iop->pdu, '/'); if (slash) *slash = '\0'; process_alloc(iop->t.pid, iop->pdu); } } else if (iop->t.action == BLK_TN_MESSAGE) trace_message(iop); io_release(iop); } else if (iop->t.action & BLK_TC_ACT(BLK_TC_PC)) { io_release(iop); } else { if (time_bounded) { if (BIT_TIME(iop->t.time) < t_astart) { io_release(iop); return; } else if (BIT_TIME(iop->t.time) > t_aend) { io_release(iop); done = 1; return; } } __add_trace(iop); } }
void __output_avg(FILE *ofp, char *hdr, struct avg_info *ap, int do_easy) { if (ap->n > 0) { ap->avg = BIT_TIME(ap->total) / (double)ap->n; fprintf(ofp, "%-15s %13.9f %13.9f %13.9f %11d\n", hdr, BIT_TIME(ap->min), ap->avg, BIT_TIME(ap->max), ap->n); if (do_easy && easy_parse_avgs) { fprintf(xavgs_ofp, "%s %.9lf %.9lf %.9lf %d\n", hdr, BIT_TIME(ap->min), ap->avg, BIT_TIME(ap->max), ap->n); } } }
void __output_dip_avg(struct d_info *dip, void *arg) { struct __oda *odap = arg; ai_dip_t ap = odap->func(dip); if (ap->n > 0) { char dev_info[15]; ap->avg = BIT_TIME(ap->total) / (double)ap->n; __output_avg(odap->ofp, make_dev_hdr(dev_info, 15, dip, 1), ap, 0); } }
void seeki_add(void *handle, struct io *iop) { struct seeki *sip = handle; char rw = IOP_READ(iop) ? 'r' : 'w'; long long dist = seek_dist(sip, iop); double tstamp = BIT_TIME(iop->t.time); FILE *fp = IOP_READ(iop) ? sip->rfp : sip->wfp; if (fp) fprintf(fp, "%15.9lf %13lld %c\n", tstamp, dist, rw); if (sip->cfp) fprintf(sip->cfp, "%15.9lf %13lld %c\n", tstamp, dist, rw); dist = llabs(dist); sip->tot_seeks++; sip->total_sectors += dist; __insert(&sip->root, dist); sps_add(sip, tstamp); }
void trace_plug(struct io *p_iop) { dip_plug(p_iop->t.device, BIT_TIME(p_iop->t.time)); io_release(p_iop); }
void trace_unplug_timer(struct io *ut_iop) { dip_unplug_tm(ut_iop->t.device, BIT_TIME(ut_iop->t.time), get_nio_up(ut_iop)); io_release(ut_iop); }
void trace_unplug_io(struct io *u_iop) { unplug_hist_add(u_iop); dip_unplug(u_iop->t.device, BIT_TIME(u_iop->t.time), get_nio_up(u_iop)); io_release(u_iop); }