CAM Shingled Disk support patches available
Kenneth D. Merry
ken at FreeBSD.ORG
Tue Jan 19 16:26:00 UTC 2016
On Mon, Jan 18, 2016 at 16:50:34 -0800, Warner Losh wrote:
>
> > On Jan 18, 2016, at 2:37 PM, Kenneth D. Merry <ken at freebsd.org> wrote:
> >
> > I have a new set of SMR patches available. See below for the full
> > explanation.
> >
> > The primary change here is that I have added SMR support to the ada(4)
> > driver. I spent some time considering whether to try to make the da(4) and
> > ada(4) probe infrastructure somewhat common, but in the end concluded it
> > would be too involved with not enough code reduction (if any) in the end.
> >
> > So, although the ideas are similar, the probe logic is separate.
> >
> > Note that NCQ support for SMR commands (Report Zones, Reset Write Pointer,
> > etc.) for SATA protocol shingled drives isn't active. For both the da(4)
> > and ada(4) driver this is for lack of a way to plumb the ATA Auxiliary
> > register down to the drive.
>
> I???ve plumbed it down, but in a gross, kludgy way to make NCQ Trim work
> where the only value in the Auxiliary register needs to be 1. It only takes
> up one bit, but it doesn???t change the size of the CCB. If the NCQ Trim
> work wasn???t based on the I/O scheduler, I???d have pushed it into head
> and would be happy to share code.
Yeah, for SMR, we'll need to pass the full register down. That is how you
specify the service action (open, close, finish, reset write pointer,
report zones).
> AHCI can send it, but it turns out that LSI???s drivers (mpt, mps, etc)
> can???t do it due to firmware inadequacies. The ability to send a FIS
> in these firmwares looked promising, but it requires a full draining of
> other requests, which kind of defeats the purpose of NCQ.
Yeah, that would kinda defeat the purpose. I'm sending a SCSI command
(ATA PASS-THROUGH) to get the SATA zone commands down there. Those are
treated like an ordered tag by the LSI firmware as well. Which is just as
well, since there is no way to specify the Auxiliary register via that SCSI
command, and so we can't do NCQ anyway.
LSI/Avago said they're planning to support the zone commands in the SAT
layer in the HBAs in the 12Gb boards. Phase 10 doesn't have it from what I
understand, but hopefully that'll show up soon. The translation is in the
latest SAT draft, and it is very straightforward to map from one to the
other, because the SCSI and ATA commands and semantics are pretty much
identical.
> > In the ada(4) case, we need to add the register to struct ccb_ataio and
> > add support in one or more of the underlying SATA drivers, e.g. ahci(4).
>
> I believe that changes the size of the CCB, so I tried to avoid
> that since I didn???t want to force a recompile of camcontrol(8).
> Adding it to the atacmd structure wasn???t so bad, and the CCB size
> didn???t completely change. The problem was that the atacmd changed
> size and pushed all the other fields.
Yes. In order to do it, we'll need to add it to struct atacmd, and add
compatibility shims. I don't see another way to do it unfortunately.
> > In the da(4) case, it will require an update of the T-10 SAT spec to
> > provide a way to pass the Auxiliary register down via the SCSI ATA
> > PASS-THROUGH command, and then a subsquent update of the SAT layer in
> > various vendors' SAS controller firmware. At that point, there may be
> > an official mapping of the SCSI ZBC commands to the ATA ZAC commands, and
> > we may be able to just issue the SCSI version of the commands instead of
> > composing ATA commands in the da(4) driver. (We'll still need to keep the
> > ATA passthrough version for a while at least to support controllers that
> > don't have the updated translation code.)
>
> I looked to implement things here, but didn???t want to invent something that
> the T-10 would later reinvent.
Yeah. Is NCQ trim a new thing? Is that why you were looking at sending it
down via a FIS?
If so, it is likely that LSI will add it to the SCSI Unmap translation in
the firmware. Of course if it isn't already in there, they're only going
to put it in their 12Gb controllers and not in the 6Gb controllers at this
point.
Since the SAT spec has the mapping for the SCSI ZBC -> ZAC commands, it sounds
like that'll make it into the LSI 12Gb firmware at some point.
> > FreeBSD/head as of SVN revision 294105:
> >
> > https://people.freebsd.org/~ken/cam_smr.head.20160118.1.txt
> >
> > FreeBSD stable/10 as of SVN revision 294100:
> >
> > https://people.freebsd.org/~ken/cam_smr.stable10.20160118.1.txt
> >
> > Testing and comments are welcome.
>
> So having said all that, I???m totally open to something better.
I think that for the ATA side, we'll just have to add the register to the
CCB, bump the version and add compatibility shims.
For the SCSI side, we just need a way to probe and see whether the
translation is supported in the SAT layer (at least for the ZBC commands, I
don't know about trim) and use the SCSI command if it is supported,
otherwise use the ATA PASS-THROUGH command if it is not.
Ken
--
Kenneth Merry
ken at FreeBSD.ORG
More information about the freebsd-scsi
mailing list