mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
scsi: blk-mq: Return budget token from .get_budget callback
SCSI uses a global atomic variable to track queue depth for each LUN/request queue. This doesn't scale well when there are lots of CPU cores and the disk is very fast. It has been observed that IOPS is affected a lot by tracking queue depth via sdev->device_busy in the I/O path. Return budget token from .get_budget callback. The budget token can be passed to driver so that we can replace the atomic variable with sbitmap_queue and alleviate the scaling problems that way. Link: https://lore.kernel.org/r/20210122023317.687987-9-ming.lei@redhat.com Cc: Omar Sandoval <osandov@fb.com> Cc: Kashyap Desai <kashyap.desai@broadcom.com> Cc: Sumanesh Samanta <sumanesh.samanta@broadcom.com> Cc: Ewan D. Milne <emilne@redhat.com> Tested-by: Sumanesh Samanta <sumanesh.samanta@broadcom.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d022d18c04
commit
2a5a24aa83
5 changed files with 72 additions and 26 deletions
|
@ -306,12 +306,12 @@ struct blk_mq_ops {
|
|||
* reserved budget. Also we have to handle failure case
|
||||
* of .get_budget for avoiding I/O deadlock.
|
||||
*/
|
||||
bool (*get_budget)(struct request_queue *);
|
||||
int (*get_budget)(struct request_queue *);
|
||||
|
||||
/**
|
||||
* @put_budget: Release the reserved budget.
|
||||
*/
|
||||
void (*put_budget)(struct request_queue *);
|
||||
void (*put_budget)(struct request_queue *, int);
|
||||
|
||||
/*
|
||||
* @set_rq_budget_toekn: store rq's budget token
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue