On 6/23/20 4:21 PM, Guoqing Jiang wrote: > Hi Artur, > > On 6/8/20 9:13 AM, Artur Paszkiewicz wrote: >> On 6/5/20 10:19 PM, jeffm@xxxxxxxx wrote: >>> The i/o accounting published in /proc/diskstats for mdraid is currently >>> broken. md_make_request does the accounting for every bio passed but >>> when a bio needs to be split, all the split bios are also submitted >>> through md_make_request, resulting in multiple accounting. >> Hi Jeff, >> >> I sent a patch a few days ago which should fix this issue. Can you check >> it out? >> >> https://marc.info/?l=linux-raid&m=159102814820539 > > I need to account some extra statistics for bio such as latency and size, > so it is kind of relies on your patch, then I read the code again. > > And besides my previous comment. I think you don't need clone bio for all > personalities. For md-multipath, raid1 and raid10, you can track the start > time by add it to those structures (multipath_bh, r1bio and r10bio), then > one extra copy could be avoided. > > What do you think? You're right, cloning can be avoided for those personalities. I wanted to keep it clean and centralized in the generic md code. I think we should have a common completion callback and some common request structure for all md personalities, like struct md_io which I'm using in my patch. How about we add it to the existing stucts like r1bio etc. and use that for io accounting, and clone the bio with the struct otherwise? Or maybe remove the cloning from the personalities and instead make the bio cloned in md_make_request available to them? Does this make sense? Thanks, Artur