Re: [PATCH v2 1/2] Support for "dev -d|-D" options by parsing bitmap in blk-mq layer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2022/05/27 15:32, lijiang wrote:
>      >> +    /* static_rqs */
>      >> +    ret = 0;
>      >> +    addr = tag + OFFSET(blk_mq_tags_static_rqs);
>      >> +    if (!readmem(addr, KVADDR, &rqs_addr, sizeof(void *), "blk_mq_tags.static_rqs", RETURN_ON_ERROR))
>      >> +            return ret;
>      >> +    addr = rqs_addr + bitnr * sizeof(ulong); /* static_rqs[bitnr] */
>      >> +    if (!readmem(addr, KVADDR, &rq, sizeof(ulong), "blk_mq_tags.static_rqs[]", RETURN_ON_ERROR))
>      >> +            return ret;
>      >> +    ret = tag_iter->fn(rq, tag_iter->data);
>      >> +
>      >> +    return ret;
>      >
>      > I'm not familiar with blk-mq, I'd like some information.
>      >
>      > I think that the "dev -d" displays the same inflight stats in /proc/diskstats
>      > for devices without mq:
>      >
>      >     diskstats_show
>      >       part_in_flight
>      >         count up per_cpu disk_stats->in_flight
>      >
>      > so, if we do the same thing for mq devices, we should imitate this path:
>      >
>      >     diskstats_show
>      >       blk_mq_in_flight
>      >         blk_mq_queue_tag_busy_iter
>      >           queue_for_each_hw_ctx
>      >             bt_for_each
>      >               sbitmap_for_each_set
>      >                 bt_iter
>      >                   blk_mq_check_inflight
>      >
>      > On the path, I cannot see the static_rqs being counted.
>      > Why does it need to be counted?
>      >
> 
> You are right. Basically, the implementation imitates the above path in the kernel. But not exactly, there are
> two changes in this patch:
> [1] add additional statistics for the static_rqs[] and sched_tags
> [2] the calculate_disk_io() imitates the blk_mq_check_inflight(), but doesn't check if the status of rq is in flight.
> 
> For the [1], because the rqs[] only contains the requests from the driver tag, once the io scheduler is used, crash
> may miss the check of sched_tags and can not watch its value . You mean that crash shouldn't cover this case,
> or do I misunderstand the sched_tags and static_rqs[]?

hmm, if so, I would like to know the reason why kernel doesn't count them.

> For the [2], the intent is to calculate all requests in the current queue from the bitmap(not only inflight, but also handling
> rq), that can help to get actual read and write request counts. But, to be honest, I'm not sure whether this is a reasonable
> method. Are you concerned that it might have repeat read/write request counts? Or should the crash follow the above
> kernel path exactly? Any idea about this?

Yes, it's one of my concerns.  It does not count a request twice?

IMHO, basically crash should follow the kernel path exactly, including the
check for MQ_RQ_IN_FLIGHT.  The "dev -d" option displays the same stats as
/proc/diskstats for non-mq devices, so displaying different stats for mq
devices will be confusing.  And it will make tracking kernel changes easier.

Thanks,
Kazu
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux