FCoE FIP: User code or driver module?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I'm working on one implementation of FIP for FCoE.
FIP is the FCoE initialization protocol, which is used to discover
which MAC address to use to get to a Fibre-Channel fabric.  In this
way it is somewhat like IPv6 neighbor discovery.  It also performs
keep-alives to detect when connectivity is lost.

There has been some mention that this should be done in user space
because the iSCSI equivalent was done that way.  I'd like to know
your opinions on whether I should go forward with an in-kernel module
implementation or if that is unlikely to be accepted.

The protocol is fairly simple, the resulting code adds only 8K
bytes of text to the FCoE module, and none to the base kernel.

Here are some rationales for putting this in the FCoE module:

1.  It's simpler.  A user-based implementation would have to have
communication code to talk to the kernel FCoE, to send it
the parameters learned by discovery.

2. It uses less memory. It is required for FCoE and since it
would be part of the fcoe module it would not
take kernel memory unless fcoe is in use. It wouldn't need as
much code space (see 1) or the overhead of a process. A kernel
implementation should be about 1200 lines or 8K bytes.

3.  It is easier to distribute.  In the kernel, it's always in
sync with the module.  There are no interoperability issues as
there would be between a user-level implementation and the fcoe
driver.  Distros would have to take care of more startup issues
if there were a user-level daemon.

4.  It is better for FCoE "HBA"s.  Some FCoE device drivers
won't have a  netdev interface, so if FIP is user-level,
they would have to add something to allow them to send and
receive FIP frames, or add a netlink interface (see point 1).

5.  It's easier to keep common between LLDs.
A user-level implementation may need to be aware of the quirks
of the various hardware implementations.  The other HBAs coming may be
forced to do their own implementations in the kernel anyway. or add
patches to the user-mode implementation, see (3).

5.  It simplifies correctness issues.  In the kernel we can hold locks
so that the state changes decided by FIP and by the upper layers
can be acted on atomicly.

6.  Fewer soft "real-time" issues. FIP involves keep-alives and link-resets,
which may be critical to system operation.  A user-level process would
have to address these needs.  The timing isn't too constraining, but
the process shouldn't be delayed by very much or storage connectivity
could be lost.  The daemon shouldn't be swapped out, especially
not to an FCoE drive!

7.  The booting story is simpler.  Booting over FCoE would require
the user-level discovery to be part of initrd, not too hard, but
something to think about.

What are the advantages to doing FIP user level?  Simpler development?
Killable/restartable?  Smaller code size in kernel git trees?

One point on the user-level side is that if the implementation
becomes more complex, it simplifies maintenance.

Here are some references for those who might like to dig into this
further:

FIP patch series (now out of date and missing a few bug fixes):
http://www.open-fcoe.org/pipermail/devel/2008-October/001130.html
http://www.open-fcoe.org/pipermail/devel/2008-October/001131.html
http://www.open-fcoe.org/pipermail/devel/2008-October/001132.html

FCoE doc describing FIP:
http://www.t11.org/ftp/t11/pub/fc/bb-5/08-569v1.pdf

	Thanks for your consideration,
	Joe Eykholt





--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux