On Mon, Mar 9, 2015 at 9:41 AM, Natanael Copa <nc...@alpinelinux.org> wrote:
> On Sun, 08 Mar 2015 16:10:32 +0100
> Harald Becker <ra...@gmx.de> wrote:
>> I'm currently in the phase of thinking about extending the functionality
>> of mdev. As here are the experts working with this kind of software, I
>> like to here your ideas before I start hacking the code.
>
> ...
>
>> 2) I like to use netlink to obtain hotplug information and avoid massive
>> respawning of mdev as hotplug helper when several events arrive quickly.
>
> I am interested in a netlink listener too for 2 reasons:
>
> - serialize the events
> - reduce number of forks for perfomance reasons
>
>> That is, I want to auto fork a daemon which just open the netlink
>> socket. When events arrive it forks again, creating a pipe. The new
>> instance read mdev.conf, build a table of rules in memory, then read
>> hotplug operations from the pipe (send by the first instance). When
>> there are no more events for more then a few seconds, the first instance
>> closes the pipe and the second instance exits (freeing the used memory).
>> On next hotplug event a new pipe / second instance is created.
>
> I have a simlar idea, but slightly different. I'd like to separate the
> netlink listener and the event handler.
>
> I am thinking of using http://git.r-36.net/nldev/ which basically does the
> same thing as s6-devd: minimal daemon that listens on netlink and for
> each event it fork/exec mdev.
>
> What I'd like to do is:
>
> change mdev to:
>  - be able to read events from stdin. same format as from netlink socket.
>  - set a timeout on stdin (1 sec or so by default). when time out is
>    reached (no event within a sec) then just exit.
>
> change nldev to:
> - have a mdev pipe fd which we forward the kernel events to.
> - on kernel event
>     if mdev_pipe_fd is -1 then:
>       create pipe, fork and exec mdev with args to have
>       mdev read from stdin (as explained above)
>     else:
>       write the kernel event to the pipe fd
>
> - the mdev pipe fd is added to the poll(2) call so we catch POLLHUP to
>   detect mdev timeout. When that happens, set the mdev pipe fd to -1 so
>   we know that it needs to be respawned on next kernel event.
>
> The benifits:
> - the netlink listener who needs to be running all times is very
>   minimal.
>
> - when there are many events within short time, (eg coldplugging), we
>   avoid the many forks and gain performance.
>
> - when there are no events, mdev will timeout and exit.
>
> - busybox mdev does not need set up netlink socket. (less intrusive
>   changes in busybox)

But that nldev process will exist for all time, right? That's not elegant.

Ideally, this respawning logic should be in the kernel.
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to