Hi Damine, On Mon, Nov 18, 2019 at 12:18:48AM +0000, Damien Le Moal wrote: > On 2019/11/17 17:08, Ming Lei wrote: > > Now the requeue queue is run in scsi_end_request() unconditionally if both > > target queue and host queue is ready. We should have re-run request queue > > only after this device queue becomes busy for restarting this LUN only. > > > > Recently Long Li reported that cost of run queue may be very heavy in > > case of high queue depth. So improve this situation by only running > > requesut queue when this LUN is busy. > > s/requesut/request > > Also, shouldn't this patch have the tag: > > Reported-by: Long Li <longli@xxxxxxxxxxxxx> > > ? Will do that in V2. > > Another remark is that Long's approach is generic to the block layer > while your patch here is scsi specific. I wonder if the same problem > cannot happen with other drivers too ? Not sure what you meant about the same problem. It is definitely bad to unconditionally call blk_mq_run_hw_queues() in driver's IO completion handler from performance viewpoint. This patch simply addresses this SCSI specific issue, since blk_mq_run_hw_queues() shouldn't be called from scsi_end_request() when the device queue isn't busy. If other driver has such kind of issue, I believe it should have been fixed in driver too. So my patch isn't contradictory with Long's patch which improves generic blk-mq's run queue. Thanks, Ming