From: scameron@beardog.cce.hp.com
To: Lennart Sorensen <lsorense@csclub.uwaterloo.ca>
Cc: The development of GNU GRUB <grub-devel@gnu.org>,
dab@hp.com, scameron@beardog.cce.hp.com
Subject: Re: Best practice for new linux block driver device naming?
Date: Fri, 8 Mar 2013 16:34:28 -0600 [thread overview]
Message-ID: <20130308223428.GL28545@beardog.cce.hp.com> (raw)
In-Reply-To: <20130308215632.GA11989@csclub.uwaterloo.ca>
On Fri, Mar 08, 2013 at 04:56:32PM -0500, Lennart Sorensen wrote:
> On Fri, Mar 08, 2013 at 02:07:18PM -0600, scameron@beardog.cce.hp.com wrote:
> > I'm just wondering if there are best pratices for new linux block
> > drivers that are adding new devices nodes of which grub is currently
> > not cognizant.
> >
> > E.g. when we added the HP Smart Array cciss driver to the kernel
> > many years ago, it had device nodes like /dev/cciss/c*d*, and there's
> > code in grub to handle this in util/getroot.c, in
> > convert_system_partition_to_system_disk():
> >
> > /* If this is a CCISS disk. */
> > if (strncmp ("cciss/c", p, sizeof ("cciss/c") - 1) == 0)
> > {
> > /* /dev/cciss/c[0-9]+d[0-9]+(p[0-9]+)? */
> > p = strchr (p, 'p');
> > if (p)
> > {
> > *is_part = 1;
> > *p = '\0';
> > }
> >
> > return path;
> > }
> >
> > And there is similar code for other weird device names is in there
> > as well.
> >
> > Ideally, I'm hoping there's a way to introduce new devices nodes
> > with a new block driver which does not any require grub modifications.
> > Looking over the code, it's not clear to me whether or not this is
> > possible, and if it is, how to do it, what the constraints may be, etc.
> >
> > Currently I have a new driver which adds devices like /dev/sop0 with
> > partitions like /dev/sop0p1, /dev/sop0p2, etc.
> >
> > If there is some better way to do this to enable grub to work with
> > these devices, it is not yet too late for me to change it.
> >
> > Or on the other hand, if it turns out that it is not possible to add
> > new block devices to linux and have grub support for those devices without
> > also modifying grub, then I wonder if it might be worth looking into to
> > adding some kind of shared device namespace for block devices to linux, so
> > new block drivers could use that and have a common naming system for block devices,
> > and grub could be modified to support this new common naming system,
> > much as scsi hba device drivers share the /dev/sd* namespace for their attached
> > disks, so it is easy to add new scsi hba drivers to linux and automatically have
> > grub support for them. It would be nice if it were similarly easy to add new
> > block device drivers to linux without also requiring modifications to grub.
> > (It also occurs to me that this is such an obvious desire that if it is not
> > already supported, perhaps there's a good reason why not, but if that's the
> > case, I'm don't know what the reason might be.)
> >
> > Thoughts?
>
> Well currently, SCSI, SATA, IDE, most well behaved raid controllers,
> USB storage, and many others all show up simple as /dev/sd*. You better
> have a really good reason to not do so if you make a new controller.
> Certainly the IBM serveraid cards I have worked with just present sd*
> devices (as well as some sg* devices for the controller and hotswap
> backplane and such).
I get ~4x the IOPSs with a block driver vs. scsi driver due to contention
for locks in the scsi mid layer (in scsi_request_fn). It's the
difference between the device being worth manufacturing vs. not.
See this thread: http://marc.info/?l=linux-scsi&m=135518042125008&w=2
Driver is similar to nvme (also a new block driver), but this one is
for SCSI over PCIe, basically highly parallelized access to very low
latency devices and trying to use the SCSI midlayer kills the IOPS.
> I think the CCISS is a sample of a horrible design
> as far as the device names in linux are concerned.
There were reasons back then for doing that one as a block driver
which are no longer extant (hence the existence of the hpsa driver
which supplanted cciss for new smart array devices.)
>
> By creating a new type of block device you force everyone else to do work
> to support it (or choose to ignore your device because no one cares).
> By emulating a plain old scsi device interface, everything else just
> works, and all the work is done by you in your device driver to pretend
> to my just a scsi disk. If you want your device taken seriously,
> I don't think you have a choice. Sysadmin's hate things that are
> different for no good reason.
All other things being equal, I would also prefer a scsi driver.
Heck, it's called SCSI over PCIe -- I tried like hell to get it
to perform adequately as a SCSI driver but all other things are
not equal, not even close, the block driver was ~4x as fast.
So we reluctantly go with a block driver, just like nvme did.
-- steve
next prev parent reply other threads:[~2013-03-08 22:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-08 20:07 Best practice for new linux block driver device naming? scameron
2013-03-08 21:56 ` Lennart Sorensen
2013-03-08 22:34 ` scameron [this message]
2013-03-08 22:49 ` Lennart Sorensen
2013-03-08 23:05 ` scameron
2013-03-11 18:35 ` Lennart Sorensen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130308223428.GL28545@beardog.cce.hp.com \
--to=scameron@beardog.cce.hp.com \
--cc=dab@hp.com \
--cc=grub-devel@gnu.org \
--cc=lsorense@csclub.uwaterloo.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.