kqueue(2) kevents for jails
Konstantin Belousov
kostikbel at gmail.com
Mon Jan 7 18:53:55 UTC 2019
On Fri, Jan 04, 2019 at 10:22:07PM +0100, Fabian Freyer wrote:
>
>
> On 1/4/19 9:29 PM, Konstantin Belousov wrote:
> > On Fri, Jan 04, 2019 at 09:11:58PM +0100, Fabian Freyer wrote:
> >> On 1/4/19 5:14 PM, Konstantin Belousov wrote:
> >>> No, kevent(2) is not suitable mechanism to notify about jail state changes.
> >>> If anything in the existing system can be reused for such notifications,
> >>> it is devctl(4) notifications which are handled by devd(8). Look at the
> >>> man pages and for existing notifications in kernel code, e.g.
> >>> sys/kern/kern_conf.c notify*() for how devfs does it.
> >>
> >> Can any running binary subscribe to devd(8) events or does that require
> >> a configuration change in /etc/devd.conf?
> >
> > Only one reader is supported, effectively. devctl(4) tries to limit opens
> > naively. But then even if you have the file descriptor and fork or pass
> > it over unix domain socket, single event can be only read by one reader.
> >
>
> Ah, I see, thanks! Is there any other nice notification mechanism that a
> process could 'subscribe' to to be notified of an event?
devctl(4) is currently the best mechanism.
Apparently there is a functionality in devd(8) which I was not aware of.
In essence, it can operate as fan-out service, delivering kernel events to
all clients connected to /var/run/devd.seqpacket.pipe socket. So despite
/dev/devctl* not allowing multiple clients, you would make your service
connect to devd(8) and get the events stream from there.
>
> I am still a bit confused as to why knotify would be such a bad fit,
> maybe you could expand a bit on that?
I have no idea what is knotify.
>
> > Not least because jail creation/destruction is relatively low frequency
> > events with potentially rich secondary information that should be attached
> > to them. Kevents are high-frequency, high-performance kind of events,
>
> Does this mean they cannot nicely be used for lower-frequency things?
> I'm thinking of situations where jails may get spawned e.g.
> per-network-request.
They are not nice to be bolted on things which are not supposed to be
performance-critical. Not least because _properly_ supporting kevents
adds significant maintainance cost on the code.
>
> > and only naturally tied to file descriptors.
>
> according to kevent(2),
>
> EVFILT_PROC Takes the process ID to monitor as the identifier
>
> so there's also cases where it isn't tied to a file descriptor, but some
> other descriptor (pid's don't seem to be too different to jid's?)
Did you read what I wrote in previous message ?
>
> > There were lot of bugs in
> > integration of kevents with e.g. processes notifications, and API is
> > still somewhat racy
>
> Is this a kevents issue or an integration problem?
It is architectural problem.
>
> In the end, might it be a good idea to add devctl(4) notifications as
> well as kevent(2)?
More information about the freebsd-jail
mailing list