I updated the patch and created a MR here:
https://gitlab.com/chrony/chrony/-/merge_requests/5. The change should now
be much less invasive now. Please let me know what you think!

-Luke

On Tue, Oct 24, 2023 at 10:19 AM Miroslav Lichvar <mlich...@redhat.com>
wrote:

> On Mon, Oct 23, 2023 at 04:48:22PM -0400, Luke Valenta wrote:
> > 1) Zero-downtime reboots: Pass systemd-preinitialized sockets to the main
> > chrony daemon, but still start the daemon at boot time as normal. If the
> > daemon is restarted, the sockets remain open to buffer client requests
> > until the daemon is able to handle requests again.
>
> Ok, that could be useful.
>
> > 2) More parallelizable boot logic: If any services required chronyd to be
> > online before they start then they could be started in parallel with
> > chronyd if the sockets already exist. For example, if the command socket
> is
> > pre-initialized, we could start chronyd-wait.service in parallel with
> > chrony, removing the `Requires` line at
> >
> https://github.com/mlichvar/chrony/blob/70cdd8b1ef77a5eca4bb41b8b7c42a77b0923ba8/examples/chrony-wait.service#L5
>
> How much time does that save, a millisecond?
>
> > > In that blog post there is an alternative approach mentioned using
> > > pidfd_getfd. That didn't work for you?
> >
> > That approach should work, but is a little more involved since there's no
> > event to signal when the app has set up sockets (maybe
> > 'chronyd-wait.service' helps here). Socket activation is a bit more
> elegant.
>
> You can use the After= ordering. When the service is started (i.e. the
> grandparent process of the daemon exited), the sockets are ready.
>
> > > Would it make sense to simply compare
> > > the local port numbers of sockets provided by systemd with ports of
> > > to-be-bound sockets and replace the descriptor if they match?
> >
> > I think this could work, yes! It'll require a little more looping over
> the
> > available sockets, but shouldn't be very costly in the scheme of things.
> It
> > might also require moving the SCK_ListenOnSocket functionality into the
> > SCK_OpenTcpSocket call (behind a flag) so we don't call `listen` on an
> > already-listening socket from systemd.
>
> There could be an array of "reusable" sockets (as a more generic name
> in case there are other implementations of this feature), which are
> returned by SCK_Open*() when they match the requested address and
> port. Other calls would do nothing on these sockets and would be
> closed only on exit. If there are no reusable socket, there should be
> a negligible impact.
>
> --
> Miroslav Lichvar
>
>
> --
> To unsubscribe email chrony-dev-requ...@chrony.tuxfamily.org with
> "unsubscribe" in the subject.
> For help email chrony-dev-requ...@chrony.tuxfamily.org with "help" in the
> subject.
> Trouble?  Email listmas...@chrony.tuxfamily.org.
>
>

-- 
Luke Valenta
Systems Engineer - Research

Reply via email to