J'ai ce service udhcpc dans mon système :

[Unit]
Description=uDHCP Client Service
After=network.target
Conflicts=systemd-resolved.service

[Service]
Type=forking
ExecStart=/sbin/udhcpc -p /var/run/udhcpc.brg0.pid -i brg0 -R -b
ExecStop=/bin/sh -c 'test -f /var/run/udhcpc.brg0.pid && kill $(cat /var/run/udhcpc.brg0.pid)'

[Install]
WantedBy=multi-user.target

Cela fonctionne bien, sauf que systemd-analyze montre qu'il ajoute environ 7 secondes au temps de démarrage :

          7.388s udhcpc.service
          4.946s dev-mmcblk1p2.device
          1.303s uim-sysfs.service
           959ms dev-mmcblk1p4.device
           752ms dev-mmcblk1p3.device
           739ms dev-mmcblk1p1.device
           718ms systemd-hwdb-update.service
           .
           .

Et voici le résultat de systemd-analyze critical-chain :

multi-user.target @15.164s
[[0;1;31mudhcpc.service @7.773s +7.388s[[0m
  network.target @7.551s
    [[0;1;31msystemd-networkd.service @6.724s +668ms[[0m
      [[0;1;31msystemd-udevd.service @1.854s +87ms[[0m
        [[0;1;31msystemd-tmpfiles-setup-dev.service @1.662s +70ms[[0m
          [[0;1;31msystemd-sysusers.service @1.353s +229ms[[0m
            [[0;1;31msystemd-remount-fs.service @1.044s +238ms[[0m
              systemd-journald.socket @911ms
                -.slice @281ms

Je suppose que la bonne façon de résoudre ce problème est d'éviter d'utiliser udhcpc et de s'en tenir au mécanisme intégré à systemd, mais malheureusement, ce n'est pas mon choix. J'aimerais au moins optimiser le temps de démarrage. Quelles sont les choses que je peux faire ?

-1
Adam Lee 18 févr. 2020 à 19:12

1 réponse

Meilleure réponse

Le "problème" est systemd-networkd, qui arrête le démarrage jusqu'à ce que le réseau soit configuré -- et c'est ce que vous voulez remplacer, pas systemd-resolved.

La configuration automatique du réseau ne peut pas être accélérée, car, lorsqu'il est correctement implémenté, DHCP doit vérifier que l'adresse n'est pas déjà utilisée, ce qui implique l'envoi d'un tas de paquets ARP et l'attente du délai d'attente.

Puisque vous insérez votre service entre les cibles "le réseau est configuré" et "le démarrage multi-utilisateur est terminé", vous introduisez une dépendance là où il n'y en avait pas auparavant.

La configuration du réseau est normalement asynchrone, car tout service qui échoue lorsque le réseau n'est pas configuré au démarrage échouera également lorsque le réseau tombe en panne plus tard.

1
Simon Richter 18 févr. 2020 à 16:18