[Eisfair] Eisfair Starup Waits und VM (was: Re: pcspkr (et al))

Hilmar Böhm hilmar.boehm at web.de
Mi Mär 6 22:41:17 CET 2019


Hallo Marcus,

Habe die Tests gemacht. Danke für den fertigen Echo-Block (ist ja ein Service! :-) )

Ergebnisse:

Wed Mar 5 09:43.31 CET 2919 Getartet udev daemon

Wed Mar 6 09:43.31 CET 2919 Trigger subsystems add
Wed Mar 6 09:43.31 CET 2919 Trigger devices add
Wed Mar 6 09:43.31 CET 2919 Trigger devices change
Wed Mar 6 09:43.33 CET 2919 Trigger devices change
Wed Mar 6 09:43.35 CET 2919 End Trigger

Wed Mar 5 09:43.36 CET 2919 Start Settle
Wed Mar 5 09:43.58 CET 2919 End Settle	<--- 22s

-------------------------------------------------------

 > ...und zwar nur die Echos aus dem udev-Initskript.
Das würde Dir so passen :-)
Ich habe noch ein paar Anmerkungen:

Der Übeltäter ist das "udevadm settle". Settle bedeutet meist <wait> bzw. timeouts.
Frage ist, ob das in einer VM auch erforderlich ist.

Die udevadm-ManPage sagt:
---------
    udevadm settle [options]
        Watches the udev event queue, and exits if all current events are
        handled.

        -t, --timeout=SECONDS
            Maximum number of seconds to wait for the event queue to become
            empty. The default value is 120 seconds. A value of 0 will check
            if the queue is empty and always return immediately.
---------

Da eine VM in der Regel bereits (durch den Host) verfügbaren Speicher nutzt, entstehen keine langen Event-Queues, behaupte ich 
mal. Ich habe es mit dem angehängten Parameter "-t 0" probiert und es funktioniert - ohne Waits! - einwandfrei!

Wenn man die 5s von udev-Start bis zu "Settle" und die 22s der "Settle"-Aktion zusammen zählt, kommt auf die 27 Sekunden, die 
ich bereits a.a.O. berichtet habe.

Und wenn man jetzt auch noch die 10s Sleep (im Rahmen des "Waiting for SCSI/SATA/PATA devices coming up") beseitigt, von der 
Thomas Bork berichtet hat (s. https://web.nettworks.org/forum/index.php?t=msg&goto=69927&&srch=%2Fbin%2Fsleep#msg_69927) und die 
in einer virtualiserten Umgebung m.E. unnötig sind,

gewinnt man über ein halbe Minute beim Booten - vor allem auf langsameren Hosts. Das ist doch schon was!!

Zudem:
Der Eisfair-Kernel der VM weiss ja bereits, dass es auf einem KVM-Hypervisor läuft.
Siehe: /var/log/messages: "... eis klogd: Hypervisor detected: KVM".
(Der Kernel müsste diese Info "exportieren", somehow).
In den Startup-Scripts gibt es auch Möglichkeiten festzustellen, ob die das System auf einem Hypervisor läuft (z.B. "dmidecode", 
ist im Basis-Eisfair vorhanden).
In diesem Falle, werden die beiden Befehle _nicht_ aufgeführt.

Falls Eisfair "bare metal" läuft, werden die Waits beibehalten. Alles bleibt beim alten. Keine weitere Änderung erforderlich.

Ich denke, das sollte ohne großen Aufwand möglich sein.

In der Hoffnung, mich nicht zu weit aus dem Fenster gelehnt zu haben, :)
viele Grüße. / Hilmar.

Btw., Marcus: Hast Du in S03udev  diese Variable "OMIT_UDEV_SETTLE" im if Statement gesehen, in der das "udevadm settle" 
eingebettet ist? Wo wird diese Variable gesetzt und unter welchen Bedingungen?


Am 06.03.19 um 07:55 schrieb Marcus Roeckrath:
> Im udev Initskript gibts es den Block, den ich um einige echo erweitert
> habe:
> 
>        echo $(date) "Starte udev daemon"
>        /sbin/udevd --daemon
>        echo $(date) "Gestartet udev daemon"
> 
>        # Now traverse /sys in order to "coldplug" devices that have
>        # already been discovered
>        echo $(date) "Trigger subsystems add"
>        /sbin/udevadm trigger --action=add    --type=subsystems
>        echo $(date) "Trigger devices add"
>        /sbin/udevadm trigger --action=add    --type=devices
>        echo $(date) "Trigger devices change"
>        /sbin/udevadm trigger --action=change --type=devices
>        echo $(date) "End Trigger"
> 
>        # Now wait for udevd to process the uevents we triggered
>        if ! is_true "$OMIT_UDEV_SETTLE"
>        then
>           echo $(date) "Start Settle"
>           /sbin/udevadm settle
>           echo $(date) "End Settle"
>        fi
> 
>        # If any LVM based partitions are on the system, ensure they
>        # are activated so they can be used.
>        if [ -x /sbin/vgchange ]
>        then
>            echo $(date) "Start vgchange"
>            /sbin/vgchange -a y >/dev/null
>            echo $(date) "End vgchange"
>        fi
> 
> Sieht ziemlich rustikal aus, aber manchmal muss der Holzhammer sein. Wir
> sollten nun herausbekommen, welches der ausgeführten Kommandos so lange
> braucht.
> 


Mehr Informationen über die Mailingliste Eisfair