Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Nov 2014 16:59:18 -0800
From:      Xin Li <delphij@delphij.net>
To:        Slawa Olhovchenkov <slw@zxy.spb.ru>, d@delphij.net,  "freebsd-arch@FreeBSD.org Arch" <freebsd-arch@freebsd.org>
Subject:   Re: kernel linker: Overriding a driver shipped with kernel via module?
Message-ID:  <546BEB66.6050909@delphij.net>
In-Reply-To: <20141119003632.GN24601@funkthat.com>
References:  <546A8191.3090208@delphij.net> <20141118124544.GA95731@zxy.spb.ru> <20141119001510.GM24601@funkthat.com> <20141119002718.GP9763@zxy.spb.ru> <20141119003632.GN24601@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

On 11/18/14 16:36, John-Mark Gurney wrote:
> Slawa Olhovchenkov wrote this message on Wed, Nov 19, 2014 at 04:27
> +0400:
>> On Tue, Nov 18, 2014 at 04:15:10PM -0800, John-Mark Gurney
>> wrote:
>> 
>>> Slawa Olhovchenkov wrote this message on Tue, Nov 18, 2014 at
>>> 16:45 +0400:
>>>> On Mon, Nov 17, 2014 at 03:15:29PM -0800, Xin Li wrote:
>>>> 
>>>>> Right now one can declare version for a module by doing
>>>>> something like:
>>>>> 
>>>>> MODULE_VERSION(module_name, module_version);
>>>>> 
>>>>> Sometimes, it may be desirable for a vendor to release a
>>>>> new driver that overrides the driver shipped with the
>>>>> kernel itself.  However, it seems that the MODULE_VERSION
>>>>> facility would just refuse the module when preloaded with
>>>>> kernel.
>>>>> 
>>>>> Looking at some other vendor drivers, they are using a
>>>>> slightly different module name to overcome this limitation.
>>>>> Is that the only way to do it?
>>>> 
>>>> I think now time to move to modulated kernel and load all
>>>> drivers currently present in GENERIC as modules (via
>>>> loader.conf).
>>> 
>>> This becomes slightly more difficult for storage drivers which
>>> must be loaded at boot time so the you can mount root from
>>> it...  But yes, we are interested in methods to make it
>>> easier/more automatic for modules to be loaded to support the
>>> hardware that is present in a system...
>> 
>> When loader can load kernel -- loader can load driver module,
>> this is not Linux (but yes, loader need plugable and stackable
>> framework for access FS -- currenly booting from ZFS over gstripe
>> not allowed).
> 
> That isn't the only issue.. another issue is identifing the
> correct kernel module(s) to load at boot... iirc, you cannot unload
> a kernel module loaded at boot time...

Actually the loader can unload everything ("unload"), and after that
you would have to load them back individually.

The challenge is that having the same code in multiple modules would
incur more I/Os (because the need to visit more file system
structures, etc.) and possibly slightly more memory.  In loader stage,
I/Os would be slow and doing so would slow down boot.  A way to
mitigate this is to compress the modules, but that would break a few
applications like DTrace which needs to be taught to read compressed
modules.

It would be, however, a win if we could strip down the kernel
significantly and only load the _required_ modules that are sufficient
to support the kernel to start /etc/rc, where we can load additional
modules on demand (via devd for instance) because this would reduce
I/O at loader stage.  I think we need to teach loader to determine
which storage drivers and possibly NFS and network devices to load.

On FreeNAS we have moved many of non-essential modules to after boot
stage but please please consider opening a new thread on this topic as
they have nothing to do with our kernel linker module version support...

Cheers,
- -- 
Xin LI <delphij@delphij.net>    https://www.delphij.net/
FreeBSD - The Power to Serve!           Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0

iQIcBAEBCgAGBQJUa+tmAAoJEJW2GBstM+ns470P/RFgzwEpQABzheEW/NmZ1I+y
jPPhKYmbG8pgEhr6S0JeuROLfoocFVI9JkO+4R5M8prEnHUWyfyNyz9oYJ8om3rk
31zmnHRX7nb5szlSRsbXHNNrqFIlNnTWLaCpNn6r7PINYdoUfj8IOv7buDOTFgPf
WNQzG2yAsMztbOjmOk7U87BwvN97Ko+k+lLuqfsODnjqiBngrR95utTnnAdyQoOf
azydh6gcdXars0ci0xPTKEnm7CcuRK/xU1LNGUUD3CUYVFpQ1o4noXBDJsSzVcbk
g/SSrL2voIf6VF+8RKc4Q3CG5e2v35DpPoOP/Jf4kAkhtab3Nyu4pYtDAnsoTVFq
JL3wt7Uik/RUw+dDOBhGWtM3rzwPNL2zEGkYP5QtIb2Xe+KkTCWQJHyq1+XhavmI
cbvYywzBXHI/JF7Y4LyVkV8q8ZPrBfSlBmOtjdC1IA5P7rmSIZzoso2/uwv2w2Rj
4vZ7o5MExR0sZdV8klWzbenMGhx/wdzjAxZ4rD5fE3bvCGNaXQ+gzVDHCbzyD4pq
kS0oAZVSDfv2zrKMowvEkPHrUmjuJ1IsFLi51raSTDSKLwfjVKjI5qVwxi3isPMb
ZZRk/bu6XsJ+sd0ODhy3kTXiFK+NfUwMeryngRUuh5yBVF1xkYnZ/7z7bLzIIgzI
mZvxLgylFYdwnEu0kiHd
=xhPp
-----END PGP SIGNATURE-----



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?546BEB66.6050909>