Lines Matching refs:pdi
321 static void resize_cpu_info(struct per_dev_info *pdi, int cpu) in resize_cpu_info() argument
323 struct per_cpu_info *cpus = pdi->cpus; in resize_cpu_info()
324 int ncpus = pdi->ncpus; in resize_cpu_info()
334 get_dev_name(pdi, name, sizeof(name)), size); in resize_cpu_info()
342 pdi->ncpus = new_count; in resize_cpu_info()
343 pdi->cpus = cpus; in resize_cpu_info()
345 for (new_count = 0; new_count < pdi->ncpus; new_count++) { in resize_cpu_info()
346 struct per_cpu_info *pci = &pdi->cpus[new_count]; in resize_cpu_info()
357 static struct per_cpu_info *get_cpu_info(struct per_dev_info *pdi, int cpu) in get_cpu_info() argument
361 if (cpu >= pdi->ncpus) in get_cpu_info()
362 resize_cpu_info(pdi, cpu); in get_cpu_info()
364 pci = &pdi->cpus[cpu]; in get_cpu_info()
387 struct per_dev_info *pdi; in get_dev_info() local
400 pdi = &devices[ndevices - 1]; in get_dev_info()
401 pdi->dev = dev; in get_dev_info()
402 pdi->first_reported_time = 0; in get_dev_info()
403 pdi->last_read_time = 0; in get_dev_info()
405 return pdi; in get_dev_info()
482 static void collect_pdi_skips(struct per_dev_info *pdi) in collect_pdi_skips() argument
487 pdi->skips = 0; in collect_pdi_skips()
488 pdi->seq_skips = 0; in collect_pdi_skips()
490 for (cpu = 0; cpu < pdi->ncpus; cpu++) { in collect_pdi_skips()
491 struct per_cpu_info *pci = &pdi->cpus[cpu]; in collect_pdi_skips()
494 pdi->skips++; in collect_pdi_skips()
495 pdi->seq_skips += (sip->end - sip->start + 1); in collect_pdi_skips()
498 MAJOR(pdi->dev), MINOR(pdi->dev), in collect_pdi_skips()
504 static void cpu_mark_online(struct per_dev_info *pdi, unsigned int cpu) in cpu_mark_online() argument
506 if (cpu >= pdi->cpu_map_max || !pdi->cpu_map) { in cpu_mark_online()
512 if (pdi->cpu_map) { in cpu_mark_online()
513 memcpy(map, pdi->cpu_map, pdi->cpu_map_max / sizeof(long)); in cpu_mark_online()
514 free(pdi->cpu_map); in cpu_mark_online()
517 pdi->cpu_map = map; in cpu_mark_online()
518 pdi->cpu_map_max = new_max; in cpu_mark_online()
521 pdi->cpu_map[CPU_IDX(cpu)] |= (1UL << CPU_BIT(cpu)); in cpu_mark_online()
524 static inline void cpu_mark_offline(struct per_dev_info *pdi, int cpu) in cpu_mark_offline() argument
526 pdi->cpu_map[CPU_IDX(cpu)] &= ~(1UL << CPU_BIT(cpu)); in cpu_mark_offline()
529 static inline int cpu_is_online(struct per_dev_info *pdi, int cpu) in cpu_is_online() argument
531 return (pdi->cpu_map[CPU_IDX(cpu)] & (1UL << CPU_BIT(cpu))) != 0; in cpu_is_online()
778 static inline void __put_trace_last(struct per_dev_info *pdi, struct trace *t) in __put_trace_last() argument
780 struct per_cpu_info *pci = get_cpu_info(pdi, t->bit->cpu); in __put_trace_last()
789 static void put_trace(struct per_dev_info *pdi, struct trace *t) in put_trace() argument
794 trace_rb_insert_last(pdi, t); in put_trace()
837 static int trace_rb_insert_last(struct per_dev_info *pdi, struct trace *t) in trace_rb_insert_last() argument
839 struct per_cpu_info *pci = get_cpu_info(pdi, t->bit->cpu); in trace_rb_insert_last()
846 if (pci->rb_last_entries > rb_batch * pdi->nfiles) { in trace_rb_insert_last()
850 __put_trace_last(pdi, t); in trace_rb_insert_last()
903 static inline struct trace *trace_rb_find_last(struct per_dev_info *pdi, in trace_rb_find_last() argument
907 return trace_rb_find(pdi->dev, seq, &pci->rb_last, 0); in trace_rb_find_last()
910 static inline int track_rb_insert(struct per_dev_info *pdi,struct io_track *iot) in track_rb_insert() argument
912 struct rb_node **p = &pdi->rb_track.rb_node; in track_rb_insert()
928 MAJOR(pdi->dev), MINOR(pdi->dev)); in track_rb_insert()
934 rb_insert_color(&iot->rb_node, &pdi->rb_track); in track_rb_insert()
938 static struct io_track *__find_track(struct per_dev_info *pdi, __u64 sector) in __find_track() argument
940 struct rb_node *n = pdi->rb_track.rb_node; in __find_track()
957 static struct io_track *find_track(struct per_dev_info *pdi, pid_t pid, in find_track() argument
962 iot = __find_track(pdi, sector); in find_track()
969 track_rb_insert(pdi, iot); in find_track()
975 static void log_track_frontmerge(struct per_dev_info *pdi, in log_track_frontmerge() argument
983 iot = __find_track(pdi, t->sector + t_sec(t)); in log_track_frontmerge()
987 MAJOR(pdi->dev), MINOR(pdi->dev), in log_track_frontmerge()
992 rb_erase(&iot->rb_node, &pdi->rb_track); in log_track_frontmerge()
994 track_rb_insert(pdi, iot); in log_track_frontmerge()
997 static void log_track_getrq(struct per_dev_info *pdi, struct blk_io_trace *t) in log_track_getrq() argument
1004 iot = find_track(pdi, t->pid, t->sector); in log_track_getrq()
1008 static inline int is_remapper(struct per_dev_info *pdi) in is_remapper() argument
1010 int major = MAJOR(pdi->dev); in is_remapper()
1019 static void log_track_queue(struct per_dev_info *pdi, struct blk_io_trace *t) in log_track_queue() argument
1025 if (!is_remapper(pdi)) in log_track_queue()
1028 iot = find_track(pdi, t->pid, t->sector); in log_track_queue()
1035 static unsigned long long log_track_insert(struct per_dev_info *pdi, in log_track_insert() argument
1044 iot = find_track(pdi, t->pid, t->sector); in log_track_insert()
1066 static unsigned long long log_track_issue(struct per_dev_info *pdi, in log_track_issue() argument
1077 iot = __find_track(pdi, t->sector); in log_track_issue()
1081 MAJOR(pdi->dev), MINOR(pdi->dev), in log_track_issue()
1103 static unsigned long long log_track_complete(struct per_dev_info *pdi, in log_track_complete() argument
1112 iot = __find_track(pdi, t->sector); in log_track_complete()
1116 MAJOR(pdi->dev), MINOR(pdi->dev), in log_track_complete()
1135 rb_erase(&iot->rb_node, &pdi->rb_track); in log_track_complete()
1159 static char *get_dev_name(struct per_dev_info *pdi, char *buffer, int size) in get_dev_name() argument
1161 if (pdi->name) in get_dev_name()
1162 snprintf(buffer, size, "%s", pdi->name); in get_dev_name()
1164 snprintf(buffer, size, "%d,%d",MAJOR(pdi->dev),MINOR(pdi->dev)); in get_dev_name()
1168 static void check_time(struct per_dev_info *pdi, struct blk_io_trace *bit) in check_time() argument
1171 unsigned long long last = pdi->last_reported_time; in check_time()
1173 pdi->backwards = (this < last) ? 'B' : ' '; in check_time()
1174 pdi->last_reported_time = this; in check_time()
1408 static void log_complete(struct per_dev_info *pdi, struct per_cpu_info *pci, in log_complete() argument
1411 process_fmt(act, pci, t, log_track_complete(pdi, t), 0, NULL); in log_complete()
1414 static void log_insert(struct per_dev_info *pdi, struct per_cpu_info *pci, in log_insert() argument
1417 process_fmt(act, pci, t, log_track_insert(pdi, t), 0, NULL); in log_insert()
1426 static void log_issue(struct per_dev_info *pdi, struct per_cpu_info *pci, in log_issue() argument
1429 process_fmt(act, pci, t, log_track_issue(pdi, t), 0, NULL); in log_issue()
1432 static void log_merge(struct per_dev_info *pdi, struct per_cpu_info *pci, in log_merge() argument
1436 log_track_frontmerge(pdi, t); in log_merge()
1472 static void dump_trace_pc(struct blk_io_trace *t, struct per_dev_info *pdi, in dump_trace_pc() argument
1494 if (pdi->cur_depth[w]) in dump_trace_pc()
1495 pdi->cur_depth[w]--; in dump_trace_pc()
1501 pdi->cur_depth[w]++; in dump_trace_pc()
1502 if (pdi->cur_depth[w] > pdi->max_depth[w]) in dump_trace_pc()
1503 pdi->max_depth[w] = pdi->cur_depth[w]; in dump_trace_pc()
1507 if (pdi->cur_depth[w]) in dump_trace_pc()
1508 pdi->cur_depth[w]--; in dump_trace_pc()
1521 static void dump_trace_fs(struct blk_io_trace *t, struct per_dev_info *pdi, in dump_trace_fs() argument
1529 log_track_queue(pdi, t); in dump_trace_fs()
1534 log_insert(pdi, pci, t, "I"); in dump_trace_fs()
1538 log_merge(pdi, pci, t, "M"); in dump_trace_fs()
1542 log_merge(pdi, pci, t, "F"); in dump_trace_fs()
1545 log_track_getrq(pdi, t); in dump_trace_fs()
1556 if (pdi->cur_depth[w]) in dump_trace_fs()
1557 pdi->cur_depth[w]--; in dump_trace_fs()
1563 pdi->cur_depth[w]++; in dump_trace_fs()
1564 if (pdi->cur_depth[w] > pdi->max_depth[w]) in dump_trace_fs()
1565 pdi->max_depth[w] = pdi->cur_depth[w]; in dump_trace_fs()
1566 log_issue(pdi, pci, t, "D"); in dump_trace_fs()
1569 if (pdi->cur_depth[w]) in dump_trace_fs()
1570 pdi->cur_depth[w]--; in dump_trace_fs()
1572 log_complete(pdi, pci, t, "C"); in dump_trace_fs()
1605 struct per_dev_info *pdi) in dump_trace() argument
1611 dump_trace_pc(t, pdi, pci); in dump_trace()
1613 dump_trace_fs(t, pdi, pci); in dump_trace()
1616 if (!pdi->events) in dump_trace()
1617 pdi->first_reported_time = t->time; in dump_trace()
1619 pdi->events++; in dump_trace()
1648 static void dump_io_stats(struct per_dev_info *pdi, struct io_stats *ios, in dump_io_stats() argument
1665 if (pdi) { in dump_io_stats()
1666 fprintf(ofp, " Read depth: %'8u%8c\t", pdi->max_depth[0], ' '); in dump_io_stats()
1667 fprintf(ofp, " Write depth: %'8u\n", pdi->max_depth[1]); in dump_io_stats()
1769 struct per_dev_info *pdi; in show_device_and_cpu_stats() local
1778 for (pdi = devices, i = 0; i < ndevices; i++, pdi++) { in show_device_and_cpu_stats()
1786 for (pci = pdi->cpus, j = 0; j < pdi->ncpus; j++, pci++) { in show_device_and_cpu_stats()
1827 j, get_dev_name(pdi, name, sizeof(name))); in show_device_and_cpu_stats()
1828 dump_io_stats(pdi, ios, line); in show_device_and_cpu_stats()
1835 get_dev_name(pdi, name, sizeof(name))); in show_device_and_cpu_stats()
1840 msec = (pdi->last_reported_time - pdi->first_reported_time) / 1000000; in show_device_and_cpu_stats()
1849 get_dev_name(pdi, line, sizeof(line)), pdi->events); in show_device_and_cpu_stats()
1851 collect_pdi_skips(pdi); in show_device_and_cpu_stats()
1852 if (!pdi->skips && !pdi->events) in show_device_and_cpu_stats()
1855 ratio = 100.0 * ((double)pdi->seq_skips / in show_device_and_cpu_stats()
1856 (double)(pdi->events + pdi->seq_skips)); in show_device_and_cpu_stats()
1858 pdi->skips, pdi->seq_skips, ratio); in show_device_and_cpu_stats()
1908 struct per_dev_info *pdi = NULL; in sort_entries() local
1926 if (!pdi || pdi->dev != bit->device) { in sort_entries()
1927 pdi = get_dev_info(bit->device); in sort_entries()
1932 pci = get_cpu_info(pdi, bit->cpu); in sort_entries()
1953 static int check_cpu_map(struct per_dev_info *pdi) in check_cpu_map() argument
1964 cpu_map = malloc(pdi->cpu_map_max / sizeof(long)); in check_cpu_map()
1979 for (i = 0; i < pdi->cpu_map_max / CPUS_PER_LONG; i++) { in check_cpu_map()
1980 if (pdi->cpu_map[i] & ~(cpu_map[i])) { in check_cpu_map()
1990 static int check_sequence(struct per_dev_info *pdi, struct trace *t, int force) in check_sequence() argument
1997 pci = get_cpu_info(pdi, bit->cpu); in check_sequence()
2009 return check_cpu_map(pdi); in check_sequence()
2020 __t = trace_rb_find_last(pdi, pci, expected_sequence); in check_sequence()
2024 __put_trace_last(pdi, __t); in check_sequence()
2041 struct per_dev_info *pdi = NULL; in show_entries_rb() local
2057 if (!pdi || pdi->dev != bit->device) { in show_entries_rb()
2058 pdi = get_dev_info(bit->device); in show_entries_rb()
2062 if (!pdi) { in show_entries_rb()
2068 if (check_sequence(pdi, t, force)) in show_entries_rb()
2074 check_time(pdi, bit); in show_entries_rb()
2077 pci = get_cpu_info(pdi, bit->cpu); in show_entries_rb()
2084 dump_trace(bit, pci, pdi); in show_entries_rb()
2086 put_trace(pdi, t); in show_entries_rb()
2156 struct per_dev_info *pdi = NULL; in read_events() local
2226 if (!pdi || pdi->dev != bit->device) in read_events()
2227 pdi = get_dev_info(bit->device); in read_events()
2229 if (bit->time > pdi->last_read_time) in read_events()
2230 pdi->last_read_time = bit->time; in read_events()
2245 struct per_dev_info *pdi; member
2316 struct per_dev_info *pdi = msp->pdi; in ms_prime() local
2317 struct per_cpu_info *pci = get_cpu_info(pdi, msp->cpu); in ms_prime()
2364 if (bit->time > pdi->last_read_time) in ms_prime()
2365 pdi->last_read_time = bit->time; in ms_prime()
2386 cpu_mark_offline(pdi, pci->cpu); in ms_prime()
2393 static struct ms_stream *ms_alloc(struct per_dev_info *pdi, int cpu) in ms_alloc() argument
2399 msp->pdi = pdi; in ms_alloc()
2408 static int setup_file(struct per_dev_info *pdi, int cpu) in setup_file() argument
2413 struct per_cpu_info *pci = get_cpu_info(pdi, cpu); in setup_file()
2418 p = strdup(pdi->name); in setup_file()
2422 p = strdup(pdi->name); in setup_file()
2423 strcpy(pdi->name, basename(p)); in setup_file()
2431 "%s.blktrace.%d", pdi->name, pci->cpu); in setup_file()
2444 cpu_mark_online(pdi, pci->cpu); in setup_file()
2446 pdi->nfiles++; in setup_file()
2447 ms_alloc(pdi, pci->cpu); in setup_file()
2455 struct per_dev_info *pdi; in handle() local
2462 pdi = msp->pdi; in handle()
2463 pci = get_cpu_info(pdi, msp->cpu); in handle()
2470 pdi->last_reported_time = bit->time; in handle()
2473 dump_trace(bit, pci, pdi); in handle()
2478 trace_rb_insert_last(pdi, t); in handle()
2508 struct per_dev_info *pdi; in do_file() local
2514 pdi = &devices[i]; in do_file()
2515 ret = name_fixup(pdi->name); in do_file()
2519 for (cpu = 0; setup_file(pdi, cpu); cpu++) in do_file()