Jens Axboe <axboe@xxxxxxxxx> 于2024年5月23日周四 22:58写道: > > On 5/23/24 8:52 AM, yunlong xing wrote: > > Jens Axboe <axboe@xxxxxxxxx> ?2024?5?23??? 21:04??? > >> > >> On 5/23/24 12:04 AM, yunlong xing wrote: > >>> Bart Van Assche <bvanassche@xxxxxxx> ?2024?5?23??? 02:12??? > >>>> > >>>> On 5/22/24 10:57, Jens Axboe wrote: > >>>>> On 5/22/24 11:38 AM, Bart Van Assche wrote: > >>>>>> On 5/22/24 00:48, Yunlong Xing wrote: > >>>>>>> @@ -1913,6 +1921,10 @@ static void loop_handle_cmd(struct loop_cmd *cmd) > >>>>>>> set_active_memcg(old_memcg); > >>>>>>> css_put(cmd_memcg_css); > >>>>>>> } > >>>>>>> + > >>>>>>> + if (ori_ioprio != cmd_ioprio) > >>>>>>> + set_task_ioprio(current, ori_ioprio); > >>>>>>> + > >>>>>>> failed: > >>>>>>> /* complete non-aio request */ > >>>>>>> if (!use_aio || ret) { > >>>>>> > >>>>>> Does adding this call in the hot path have a measurable performance impact? > >>>>> > >>>>> It's loop, I would not be concerned with overhead. But it does look pretty > >>>>> bogus to modify the task ioprio from here. > >>>> > >>>> Hi Jens, > >>>> > >>>> Maybe Yunlong uses that call to pass the I/O priority to the I/O submitter? > >>>> > >>>> I think that it is easy to pass the I/O priority to the kiocb submitted by > >>>> lo_rw_aio() without calling set_task_ioprio(). > >>>> > >>>> lo_read_simple() and lo_write_simple() however call vfs_iter_read() / > >>>> vfs_iter_write(). This results in a call of do_iter_readv_writev() and > >>>> init_sync_kiocb(). The latter function calls get_current_ioprio(). This is > >>>> probably why the set_task_ioprio() call has been added? > >>> > >>> Yeah that's why I call set_task_ioprio. I want to the loop kwoker > >>> task?submit I/O to the real disk device?can pass the iopriority of the > >>> loop device request? both lo_rw_aio() and > >>> lo_read_simple()/lo_write_simple(). > >> > >> And that's a totally backwards and suboptimal way to do it. The task > >> priority is only used as a last resort lower down, if the IO itself > >> hasn't been appropriately marked. > >> > >> Like I said, it's back to the drawing board on this patch, there's no > >> way it's acceptable in its current form. > >> > >> -- > >> Jens Axboe > >> > > Thanks for your advice. So, you can't accept pass the ioprio by > > set_task_ioprio? > > Not sure how many times I'd have to state that, no. Of course, I understand what you mean. I would like to ask if you only disagree with this part. Sorry for missing a word "just". Back to the patch, I couldn't find a better way to pass the ioprio in the lo_read/write_simple(). Do you have some suggestions or ideas? > > > If only the method of lo_rw_aio() counld you accept? I don't want to > > submit this part of the modifications separately. I just want to know, > > this is ok to you or not? > > Inheriting the kiocb ioprio from the request is the right approach, so > yeah that part is fine. > > -- > Jens Axboe >