Message ID | 20210909023545.1101672-1-damien.lemoal@wdc.com (mailing list archive) |
---|---|
Headers | show |
Series | Initial support for multi-actuator HDDs | expand |
On 2021/09/09 11:35, Damien Le Moal wrote: > Single LUN multi-actuator hard-disks are cappable to seek and execute > multiple commands in parallel. This capability is exposed to the host > using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). > Each positioning range describes the contiguous set of LBAs that an > actuator serves. > > This series adds support to the scsi disk driver to retreive this > information and advertize it to user space through sysfs. libata is > also modified to handle ATA drives. > > The first patch adds the block layer plumbing to expose concurrent > sector ranges of the device through sysfs as a sub-directory of the > device sysfs queue directory. Patch 2 and 3 add support to sd and > libata. Finally patch 4 documents the sysfs queue attributed changes. > Patch 5 fixes a typo in the document file (strictly speaking, not > related to this series). > > This series does not attempt in any way to optimize accesses to > multi-actuator devices (e.g. block IO schedulers or filesystems). This > initial support only exposes the independent access ranges information > to user space through sysfs. > > Changes from v7: > * Renamed functions to spell out "independent_access_range" instead of > using contracted names such as iaranges. Structure fields names are > changed to ia_ranges from iaranges. > * Added reviewed-by tags in patch 4 and 5 Jens, Martin, Any comment on this latest iteration/renaming version ? > > Changes from v6: > * Changed patch 1 to prevent a device from registering overlapping > independent access ranges. > > Changes from v5: > * Changed type names in patch 1: > - struct blk_crange -> sturct blk_independent_access_range > - struct blk_cranges -> sturct blk_independent_access_ranges > All functions and variables are renamed accordingly, using shorter > names related to the new type names, e.g. > sturct blk_independent_access_ranges -> iaranges or iars. > * Update the commit message of patch 1 to 4. Patch 1 and 4 titles are > also changed. > * Dropped reviewed-tags on modified patches. Patch 3 and 5 are > unmodified > > Changes from v4: > * Fixed kdoc comment function name mismatch for disk_register_cranges() > in patch 1 > > Changes from v3: > * Modified patch 1: > - Prefix functions that take a struct gendisk as argument with > "disk_". Modified patch 2 accordingly. > - Added a functional release operation for struct blk_cranges kobj to > ensure that this structure is freed only after all references to it > are released, including kobject_del() execution for all crange sysfs > entries. > * Added patch 5 to separate the typo fix from the crange documentation > addition. > * Added reviewed-by tags > > Changes from v2: > * Update patch 1 to fix a compilation warning for a potential NULL > pointer dereference of the cr argument of blk_queue_set_cranges(). > Warning reported by the kernel test robot <lkp@intel.com>). > > Changes from v1: > * Moved libata-scsi hunk from patch 1 to patch 3 where it belongs > * Fixed unintialized variable in patch 2 > Reported-by: kernel test robot <lkp@intel.com> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com > * Changed patch 3 adding struct ata_cpr_log to contain both the number > of concurrent ranges and the array of concurrent ranges. > * Added a note in the documentation (patch 4) about the unit used for > the concurrent ranges attributes. > > Damien Le Moal (5): > block: Add independent access ranges support > scsi: sd: add concurrent positioning ranges support > libata: support concurrent positioning ranges log > doc: document sysfs queue/independent_access_ranges attributes > doc: Fix typo in request queue sysfs documentation > > Documentation/block/queue-sysfs.rst | 33 ++- > block/Makefile | 2 +- > block/blk-ia-ranges.c | 348 ++++++++++++++++++++++++++++ > block/blk-sysfs.c | 26 ++- > block/blk.h | 4 + > drivers/ata/libata-core.c | 57 ++++- > drivers/ata/libata-scsi.c | 48 +++- > drivers/scsi/sd.c | 81 +++++++ > drivers/scsi/sd.h | 1 + > include/linux/ata.h | 1 + > include/linux/blkdev.h | 39 ++++ > include/linux/libata.h | 15 ++ > 12 files changed, 634 insertions(+), 21 deletions(-) > create mode 100644 block/blk-ia-ranges.c >
On 2021/09/09 11:35, Damien Le Moal wrote: > Single LUN multi-actuator hard-disks are cappable to seek and execute > multiple commands in parallel. This capability is exposed to the host > using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). > Each positioning range describes the contiguous set of LBAs that an > actuator serves. > > This series adds support to the scsi disk driver to retreive this > information and advertize it to user space through sysfs. libata is > also modified to handle ATA drives. > > The first patch adds the block layer plumbing to expose concurrent > sector ranges of the device through sysfs as a sub-directory of the > device sysfs queue directory. Patch 2 and 3 add support to sd and > libata. Finally patch 4 documents the sysfs queue attributed changes. > Patch 5 fixes a typo in the document file (strictly speaking, not > related to this series). > > This series does not attempt in any way to optimize accesses to > multi-actuator devices (e.g. block IO schedulers or filesystems). This > initial support only exposes the independent access ranges information > to user space through sysfs. Jens, Ping ? Any further comment on this series ? > > Changes from v7: > * Renamed functions to spell out "independent_access_range" instead of > using contracted names such as iaranges. Structure fields names are > changed to ia_ranges from iaranges. > * Added reviewed-by tags in patch 4 and 5 > > Changes from v6: > * Changed patch 1 to prevent a device from registering overlapping > independent access ranges. > > Changes from v5: > * Changed type names in patch 1: > - struct blk_crange -> sturct blk_independent_access_range > - struct blk_cranges -> sturct blk_independent_access_ranges > All functions and variables are renamed accordingly, using shorter > names related to the new type names, e.g. > sturct blk_independent_access_ranges -> iaranges or iars. > * Update the commit message of patch 1 to 4. Patch 1 and 4 titles are > also changed. > * Dropped reviewed-tags on modified patches. Patch 3 and 5 are > unmodified > > Changes from v4: > * Fixed kdoc comment function name mismatch for disk_register_cranges() > in patch 1 > > Changes from v3: > * Modified patch 1: > - Prefix functions that take a struct gendisk as argument with > "disk_". Modified patch 2 accordingly. > - Added a functional release operation for struct blk_cranges kobj to > ensure that this structure is freed only after all references to it > are released, including kobject_del() execution for all crange sysfs > entries. > * Added patch 5 to separate the typo fix from the crange documentation > addition. > * Added reviewed-by tags > > Changes from v2: > * Update patch 1 to fix a compilation warning for a potential NULL > pointer dereference of the cr argument of blk_queue_set_cranges(). > Warning reported by the kernel test robot <lkp@intel.com>). > > Changes from v1: > * Moved libata-scsi hunk from patch 1 to patch 3 where it belongs > * Fixed unintialized variable in patch 2 > Reported-by: kernel test robot <lkp@intel.com> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com > * Changed patch 3 adding struct ata_cpr_log to contain both the number > of concurrent ranges and the array of concurrent ranges. > * Added a note in the documentation (patch 4) about the unit used for > the concurrent ranges attributes. > > Damien Le Moal (5): > block: Add independent access ranges support > scsi: sd: add concurrent positioning ranges support > libata: support concurrent positioning ranges log > doc: document sysfs queue/independent_access_ranges attributes > doc: Fix typo in request queue sysfs documentation > > Documentation/block/queue-sysfs.rst | 33 ++- > block/Makefile | 2 +- > block/blk-ia-ranges.c | 348 ++++++++++++++++++++++++++++ > block/blk-sysfs.c | 26 ++- > block/blk.h | 4 + > drivers/ata/libata-core.c | 57 ++++- > drivers/ata/libata-scsi.c | 48 +++- > drivers/scsi/sd.c | 81 +++++++ > drivers/scsi/sd.h | 1 + > include/linux/ata.h | 1 + > include/linux/blkdev.h | 39 ++++ > include/linux/libata.h | 15 ++ > 12 files changed, 634 insertions(+), 21 deletions(-) > create mode 100644 block/blk-ia-ranges.c >
Damien, > Changes from v7: > * Renamed functions to spell out "independent_access_range" instead of > using contracted names such as iaranges. Structure fields names are > changed to ia_ranges from iaranges. > * Added reviewed-by tags in patch 4 and 5 The new name is long but it makes the code much easier to follow. So I guess I am OK with this version. Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
On 2021/09/09 11:35, Damien Le Moal wrote: > Single LUN multi-actuator hard-disks are cappable to seek and execute > multiple commands in parallel. This capability is exposed to the host > using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). > Each positioning range describes the contiguous set of LBAs that an > actuator serves. > > This series adds support to the scsi disk driver to retreive this > information and advertize it to user space through sysfs. libata is > also modified to handle ATA drives. > > The first patch adds the block layer plumbing to expose concurrent > sector ranges of the device through sysfs as a sub-directory of the > device sysfs queue directory. Patch 2 and 3 add support to sd and > libata. Finally patch 4 documents the sysfs queue attributed changes. > Patch 5 fixes a typo in the document file (strictly speaking, not > related to this series). > > This series does not attempt in any way to optimize accesses to > multi-actuator devices (e.g. block IO schedulers or filesystems). This > initial support only exposes the independent access ranges information > to user space through sysfs. Jens, Any chance to get this merged for 5.16 ? > > Changes from v7: > * Renamed functions to spell out "independent_access_range" instead of > using contracted names such as iaranges. Structure fields names are > changed to ia_ranges from iaranges. > * Added reviewed-by tags in patch 4 and 5 > > Changes from v6: > * Changed patch 1 to prevent a device from registering overlapping > independent access ranges. > > Changes from v5: > * Changed type names in patch 1: > - struct blk_crange -> sturct blk_independent_access_range > - struct blk_cranges -> sturct blk_independent_access_ranges > All functions and variables are renamed accordingly, using shorter > names related to the new type names, e.g. > sturct blk_independent_access_ranges -> iaranges or iars. > * Update the commit message of patch 1 to 4. Patch 1 and 4 titles are > also changed. > * Dropped reviewed-tags on modified patches. Patch 3 and 5 are > unmodified > > Changes from v4: > * Fixed kdoc comment function name mismatch for disk_register_cranges() > in patch 1 > > Changes from v3: > * Modified patch 1: > - Prefix functions that take a struct gendisk as argument with > "disk_". Modified patch 2 accordingly. > - Added a functional release operation for struct blk_cranges kobj to > ensure that this structure is freed only after all references to it > are released, including kobject_del() execution for all crange sysfs > entries. > * Added patch 5 to separate the typo fix from the crange documentation > addition. > * Added reviewed-by tags > > Changes from v2: > * Update patch 1 to fix a compilation warning for a potential NULL > pointer dereference of the cr argument of blk_queue_set_cranges(). > Warning reported by the kernel test robot <lkp@intel.com>). > > Changes from v1: > * Moved libata-scsi hunk from patch 1 to patch 3 where it belongs > * Fixed unintialized variable in patch 2 > Reported-by: kernel test robot <lkp@intel.com> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com > * Changed patch 3 adding struct ata_cpr_log to contain both the number > of concurrent ranges and the array of concurrent ranges. > * Added a note in the documentation (patch 4) about the unit used for > the concurrent ranges attributes. > > Damien Le Moal (5): > block: Add independent access ranges support > scsi: sd: add concurrent positioning ranges support > libata: support concurrent positioning ranges log > doc: document sysfs queue/independent_access_ranges attributes > doc: Fix typo in request queue sysfs documentation > > Documentation/block/queue-sysfs.rst | 33 ++- > block/Makefile | 2 +- > block/blk-ia-ranges.c | 348 ++++++++++++++++++++++++++++ > block/blk-sysfs.c | 26 ++- > block/blk.h | 4 + > drivers/ata/libata-core.c | 57 ++++- > drivers/ata/libata-scsi.c | 48 +++- > drivers/scsi/sd.c | 81 +++++++ > drivers/scsi/sd.h | 1 + > include/linux/ata.h | 1 + > include/linux/blkdev.h | 39 ++++ > include/linux/libata.h | 15 ++ > 12 files changed, 634 insertions(+), 21 deletions(-) > create mode 100644 block/blk-ia-ranges.c >
On Monday, October 11, 2021 at 3:50:20 AM Damien Le Moal wrote: > > >On 2021/09/09 11:35, Damien Le Moal wrote: >> Single LUN multi-actuator hard-disks are cappable to seek and execute >> multiple commands in parallel. This capability is exposed to the host >> using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). >> Each positioning range describes the contiguous set of LBAs that an >> actuator serves. >> >> This series adds support to the scsi disk driver to retreive this >> information and advertize it to user space through sysfs. libata is >> also modified to handle ATA drives. >> >> The first patch adds the block layer plumbing to expose concurrent >> sector ranges of the device through sysfs as a sub-directory of the >> device sysfs queue directory. Patch 2 and 3 add support to sd and >> libata. Finally patch 4 documents the sysfs queue attributed changes. >> Patch 5 fixes a typo in the document file (strictly speaking, not >> related to this series). >> >> This series does not attempt in any way to optimize accesses to >> multi-actuator devices (e.g. block IO schedulers or filesystems). This >> initial support only exposes the independent access ranges information >> to user space through sysfs. > >Jens, > >Any chance to get this merged for 5.16 ? > Jens- It would be great to have Damien's patches merged in -- it's important for the multi-actuator support we've been adding to BFQ and ultimately for other schedulers or user-space to manage queue balance on SATA dual actuator. Thanks. Best regards, -Tim Walker Seagate Research > >> >> Changes from v7: >> * Renamed functions to spell out "independent_access_range" instead of >> using contracted names such as iaranges. Structure fields names are >> changed to ia_ranges from iaranges. >> * Added reviewed-by tags in patch 4 and 5 >> >> Changes from v6: >> * Changed patch 1 to prevent a device from registering overlapping >> independent access ranges. >> >> Changes from v5: >> * Changed type names in patch 1: >> - struct blk_crange -> sturct blk_independent_access_range >> - struct blk_cranges -> sturct blk_independent_access_ranges >> All functions and variables are renamed accordingly, using shorter >> names related to the new type names, e.g. >> sturct blk_independent_access_ranges -> iaranges or iars. >> * Update the commit message of patch 1 to 4. Patch 1 and 4 titles are >> also changed. >> * Dropped reviewed-tags on modified patches. Patch 3 and 5 are >> unmodified >> >> Changes from v4: >> * Fixed kdoc comment function name mismatch for disk_register_cranges() >> in patch 1 >> >> Changes from v3: >> * Modified patch 1: >> - Prefix functions that take a struct gendisk as argument with >> "disk_". Modified patch 2 accordingly. >> - Added a functional release operation for struct blk_cranges kobj to >> ensure that this structure is freed only after all references to it >> are released, including kobject_del() execution for all crange sysfs >> entries. >> * Added patch 5 to separate the typo fix from the crange documentation >> addition. >> * Added reviewed-by tags >> >> Changes from v2: >> * Update patch 1 to fix a compilation warning for a potential NULL >> pointer dereference of the cr argument of blk_queue_set_cranges(). >> Warning reported by the kernel test robot <lkp@intel.com>). >> >> Changes from v1: >> * Moved libata-scsi hunk from patch 1 to patch 3 where it belongs >> * Fixed unintialized variable in patch 2 >> Reported-by: kernel test robot <lkp@intel.com> >> Reported-by: Dan Carpenter <dan.carpenter@oracle.com >> * Changed patch 3 adding struct ata_cpr_log to contain both the number >> of concurrent ranges and the array of concurrent ranges. >> * Added a note in the documentation (patch 4) about the unit used for >> the concurrent ranges attributes. >> >> Damien Le Moal (5): >> block: Add independent access ranges support >> scsi: sd: add concurrent positioning ranges support >> libata: support concurrent positioning ranges log >> doc: document sysfs queue/independent_access_ranges attributes >> doc: Fix typo in request queue sysfs documentation >> >> Documentation/block/queue-sysfs.rst | 33 ++- >> block/Makefile | 2 +- >> block/blk-ia-ranges.c | 348 ++++++++++++++++++++++++++++ >> block/blk-sysfs.c | 26 ++- >> block/blk.h | 4 + >> drivers/ata/libata-core.c | 57 ++++- >> drivers/ata/libata-scsi.c | 48 +++- >> drivers/scsi/sd.c | 81 +++++++ >> drivers/scsi/sd.h | 1 + >> include/linux/ata.h | 1 + >> include/linux/blkdev.h | 39 ++++ >> include/linux/libata.h | 15 ++ >> 12 files changed, 634 insertions(+), 21 deletions(-) >> create mode 100644 block/blk-ia-ranges.c >> > > >-- >Damien Le Moal >Western Digital Research >
On 2021/10/11 16:50, Damien Le Moal wrote: > On 2021/09/09 11:35, Damien Le Moal wrote: >> Single LUN multi-actuator hard-disks are cappable to seek and execute >> multiple commands in parallel. This capability is exposed to the host >> using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). >> Each positioning range describes the contiguous set of LBAs that an >> actuator serves. >> >> This series adds support to the scsi disk driver to retreive this >> information and advertize it to user space through sysfs. libata is >> also modified to handle ATA drives. >> >> The first patch adds the block layer plumbing to expose concurrent >> sector ranges of the device through sysfs as a sub-directory of the >> device sysfs queue directory. Patch 2 and 3 add support to sd and >> libata. Finally patch 4 documents the sysfs queue attributed changes. >> Patch 5 fixes a typo in the document file (strictly speaking, not >> related to this series). >> >> This series does not attempt in any way to optimize accesses to >> multi-actuator devices (e.g. block IO schedulers or filesystems). This >> initial support only exposes the independent access ranges information >> to user space through sysfs. > > Jens, > > Any chance to get this merged for 5.16 ? Jens, Re-ping... I understand that you are very busy, but nevertheless an answer would be appreciated. Thanks. > > >> >> Changes from v7: >> * Renamed functions to spell out "independent_access_range" instead of >> using contracted names such as iaranges. Structure fields names are >> changed to ia_ranges from iaranges. >> * Added reviewed-by tags in patch 4 and 5 >> >> Changes from v6: >> * Changed patch 1 to prevent a device from registering overlapping >> independent access ranges. >> >> Changes from v5: >> * Changed type names in patch 1: >> - struct blk_crange -> sturct blk_independent_access_range >> - struct blk_cranges -> sturct blk_independent_access_ranges >> All functions and variables are renamed accordingly, using shorter >> names related to the new type names, e.g. >> sturct blk_independent_access_ranges -> iaranges or iars. >> * Update the commit message of patch 1 to 4. Patch 1 and 4 titles are >> also changed. >> * Dropped reviewed-tags on modified patches. Patch 3 and 5 are >> unmodified >> >> Changes from v4: >> * Fixed kdoc comment function name mismatch for disk_register_cranges() >> in patch 1 >> >> Changes from v3: >> * Modified patch 1: >> - Prefix functions that take a struct gendisk as argument with >> "disk_". Modified patch 2 accordingly. >> - Added a functional release operation for struct blk_cranges kobj to >> ensure that this structure is freed only after all references to it >> are released, including kobject_del() execution for all crange sysfs >> entries. >> * Added patch 5 to separate the typo fix from the crange documentation >> addition. >> * Added reviewed-by tags >> >> Changes from v2: >> * Update patch 1 to fix a compilation warning for a potential NULL >> pointer dereference of the cr argument of blk_queue_set_cranges(). >> Warning reported by the kernel test robot <lkp@intel.com>). >> >> Changes from v1: >> * Moved libata-scsi hunk from patch 1 to patch 3 where it belongs >> * Fixed unintialized variable in patch 2 >> Reported-by: kernel test robot <lkp@intel.com> >> Reported-by: Dan Carpenter <dan.carpenter@oracle.com >> * Changed patch 3 adding struct ata_cpr_log to contain both the number >> of concurrent ranges and the array of concurrent ranges. >> * Added a note in the documentation (patch 4) about the unit used for >> the concurrent ranges attributes. >> >> Damien Le Moal (5): >> block: Add independent access ranges support >> scsi: sd: add concurrent positioning ranges support >> libata: support concurrent positioning ranges log >> doc: document sysfs queue/independent_access_ranges attributes >> doc: Fix typo in request queue sysfs documentation >> >> Documentation/block/queue-sysfs.rst | 33 ++- >> block/Makefile | 2 +- >> block/blk-ia-ranges.c | 348 ++++++++++++++++++++++++++++ >> block/blk-sysfs.c | 26 ++- >> block/blk.h | 4 + >> drivers/ata/libata-core.c | 57 ++++- >> drivers/ata/libata-scsi.c | 48 +++- >> drivers/scsi/sd.c | 81 +++++++ >> drivers/scsi/sd.h | 1 + >> include/linux/ata.h | 1 + >> include/linux/blkdev.h | 39 ++++ >> include/linux/libata.h | 15 ++ >> 12 files changed, 634 insertions(+), 21 deletions(-) >> create mode 100644 block/blk-ia-ranges.c >> > >
On Thu, Sep 09, 2021 at 11:35:40AM +0900, Damien Le Moal wrote: > Single LUN multi-actuator hard-disks are cappable to seek and execute > multiple commands in parallel. This capability is exposed to the host > using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). > Each positioning range describes the contiguous set of LBAs that an > actuator serves. > > This series adds support to the scsi disk driver to retreive this > information and advertize it to user space through sysfs. libata is > also modified to handle ATA drives. This looks good, and easy for user space to make optimizations. Reviewed-by: Keith Busch <kbusch@kernel.org>
On 9/8/21 8:35 PM, Damien Le Moal wrote: > Single LUN multi-actuator hard-disks are cappable to seek and execute > multiple commands in parallel. This capability is exposed to the host > using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). > Each positioning range describes the contiguous set of LBAs that an > actuator serves. > > This series adds support to the scsi disk driver to retreive this > information and advertize it to user space through sysfs. libata is > also modified to handle ATA drives. > > The first patch adds the block layer plumbing to expose concurrent > sector ranges of the device through sysfs as a sub-directory of the > device sysfs queue directory. Patch 2 and 3 add support to sd and > libata. Finally patch 4 documents the sysfs queue attributed changes. > Patch 5 fixes a typo in the document file (strictly speaking, not > related to this series). > > This series does not attempt in any way to optimize accesses to > multi-actuator devices (e.g. block IO schedulers or filesystems). This > initial support only exposes the independent access ranges information > to user space through sysfs. Let's get this queued up for 5.16. I forgot what we agreed upon, can go either block or SCSI. We likely have a bunch more block changes this round than usual, and hence a higher risk of conflict, so from that perspective alone I think the block layer would be easier. In any case, Damien, it needs a respin as it doesn't apply against my for-5.16/block at this point.
On 2021/10/27 9:45, Jens Axboe wrote: > On 9/8/21 8:35 PM, Damien Le Moal wrote: >> Single LUN multi-actuator hard-disks are cappable to seek and execute >> multiple commands in parallel. This capability is exposed to the host >> using the Concurrent Positioning Ranges VPD page (SCSI) and Log (ATA). >> Each positioning range describes the contiguous set of LBAs that an >> actuator serves. >> >> This series adds support to the scsi disk driver to retreive this >> information and advertize it to user space through sysfs. libata is >> also modified to handle ATA drives. >> >> The first patch adds the block layer plumbing to expose concurrent >> sector ranges of the device through sysfs as a sub-directory of the >> device sysfs queue directory. Patch 2 and 3 add support to sd and >> libata. Finally patch 4 documents the sysfs queue attributed changes. >> Patch 5 fixes a typo in the document file (strictly speaking, not >> related to this series). >> >> This series does not attempt in any way to optimize accesses to >> multi-actuator devices (e.g. block IO schedulers or filesystems). This >> initial support only exposes the independent access ranges information >> to user space through sysfs. > > Let's get this queued up for 5.16. I forgot what we agreed upon, can go > either block or SCSI. We likely have a bunch more block changes this > round than usual, and hence a higher risk of conflict, so from that > perspective alone I think the block layer would be easier. > > In any case, Damien, it needs a respin as it doesn't apply against > my for-5.16/block at this point. OK. Thanks. Sending a rebased version very soon (today most likely).