forked from Minki/linux
scsi: fnic: fnic stats for max CQs processed and ISR time
This change is to add fnic stats for the max number of CQs (corresponding to copy WQ) processed in a given interrupt, max time taken by the ISR. Signed-off-by: Satish Kharat <satishkh@cisco.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d948e6383e
commit
3567dca1ba
@ -1325,13 +1325,32 @@ int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do)
|
||||
unsigned int wq_work_done = 0;
|
||||
unsigned int i, cq_index;
|
||||
unsigned int cur_work_done;
|
||||
struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
|
||||
u64 start_jiffies = 0;
|
||||
u64 end_jiffies = 0;
|
||||
u64 delta_jiffies = 0;
|
||||
u64 delta_ms = 0;
|
||||
|
||||
for (i = 0; i < fnic->wq_copy_count; i++) {
|
||||
cq_index = i + fnic->raw_wq_count + fnic->rq_count;
|
||||
|
||||
start_jiffies = jiffies;
|
||||
cur_work_done = vnic_cq_copy_service(&fnic->cq[cq_index],
|
||||
fnic_fcpio_cmpl_handler,
|
||||
copy_work_to_do);
|
||||
end_jiffies = jiffies;
|
||||
|
||||
wq_work_done += cur_work_done;
|
||||
delta_jiffies = end_jiffies - start_jiffies;
|
||||
if (delta_jiffies >
|
||||
(u64) atomic64_read(&misc_stats->max_isr_jiffies)) {
|
||||
atomic64_set(&misc_stats->max_isr_jiffies,
|
||||
delta_jiffies);
|
||||
delta_ms = jiffies_to_msecs(delta_jiffies);
|
||||
atomic64_set(&misc_stats->max_isr_time_ms, delta_ms);
|
||||
atomic64_set(&misc_stats->corr_work_done,
|
||||
cur_work_done);
|
||||
}
|
||||
}
|
||||
return wq_work_done;
|
||||
}
|
||||
|
@ -97,6 +97,9 @@ struct vlan_stats {
|
||||
struct misc_stats {
|
||||
u64 last_isr_time;
|
||||
u64 last_ack_time;
|
||||
atomic64_t max_isr_jiffies;
|
||||
atomic64_t max_isr_time_ms;
|
||||
atomic64_t corr_work_done;
|
||||
atomic64_t isr_count;
|
||||
atomic64_t max_cq_entries;
|
||||
atomic64_t ack_index_out_of_range;
|
||||
|
@ -409,6 +409,9 @@ int fnic_get_stats_data(struct stats_debug_info *debug,
|
||||
len += snprintf(debug->debug_buffer + len, buf_size - len,
|
||||
"Last ISR time: %llu (%8llu.%09lu)\n"
|
||||
"Last ACK time: %llu (%8llu.%09lu)\n"
|
||||
"Max ISR jiffies: %llu\n"
|
||||
"Max ISR time (ms) (0 denotes < 1 ms): %llu\n"
|
||||
"Corr. work done: %llu\n"
|
||||
"Number of ISRs: %lld\n"
|
||||
"Maximum CQ Entries: %lld\n"
|
||||
"Number of ACK index out of range: %lld\n"
|
||||
@ -428,6 +431,9 @@ int fnic_get_stats_data(struct stats_debug_info *debug,
|
||||
(s64)val1.tv_sec, val1.tv_nsec,
|
||||
(u64)stats->misc_stats.last_ack_time,
|
||||
(s64)val2.tv_sec, val2.tv_nsec,
|
||||
(u64)atomic64_read(&stats->misc_stats.max_isr_jiffies),
|
||||
(u64)atomic64_read(&stats->misc_stats.max_isr_time_ms),
|
||||
(u64)atomic64_read(&stats->misc_stats.corr_work_done),
|
||||
(u64)atomic64_read(&stats->misc_stats.isr_count),
|
||||
(u64)atomic64_read(&stats->misc_stats.max_cq_entries),
|
||||
(u64)atomic64_read(&stats->misc_stats.ack_index_out_of_range),
|
||||
|
Loading…
Reference in New Issue
Block a user