Στον σημερινό οδηγό θα δούμε πόσο χρόνο καταναλώνει η εκκίνηση του συστήματός μας και ποιες υπηρεσίες καταναλώνουν τον περισσότερο χρόνο με τη χρήση της εντολής systemd analyze blame

Όπως είδαμε στον οδηγό Διαχείριση του συστήματος σας με τη χρήση του systemd το παλιό sysVinit ξεκινούσε τις διεργασίες μια μια και σειριακά. To systemd από την άλλη ξεκινά τις διεργασίες παράλληλα και μάλιστα ξεκινά μόνο εκείνες που απαιτούνται, μειώνοντας σημαντικά το χρόνο εκκίνησης του συστήματος μας.

Τι συμβαίνει όταν ξεκινά ο υπολογιστής

Όταν ενεργοποιείτε τον υπολογιστή σας, γίνεται εκκίνηση του υλικού και στη συνέχεια (ανάλογα με τον τύπο του τομέα εκκίνησης που χρησιμοποιεί ο υπολογιστής σας) εκτελείται είτε το MBR είτε το UEFI partition.

Η τελευταία ενέργεια και των δύο είναι η εκκίνηση του πυρήνα Linux. Ο πυρήνας φορτώνεται στη μνήμη, αποσυμπιέζεται και αρχικοποιείται. Ένα προσωρινό σύστημα αρχείων δημιουργείται στη μνήμη RAM, συνήθως από ένα βοηθητικό πρόγραμμα που ονομάζεται initramfs ή initrd . Αυτό επιτρέπει τη φόρτωση των απαιτούμενων drivers.

Μετα το grub θα αναλάβει ο πυρήνας, που στην συνέχεια θα δώσει τον έλεγχο σε μια υπηρεσία εκκίνησης. Στις περισσότερες διανομες αυτή είναι το systemd.

Advertisements

Αυτό, με τη σειρά του, επιτρέπει στο σύστημα αρχείων να φορτώνει και να προετοιμάζεται για τη δημιουργία του περιβάλλοντος χώρου χρήστη (user-space). Η δημιουργία του user-space γίνεται από τη διαδικασία init, η οποία είναι η πρώτη διαδικασία που ξεκινάει από τον πυρήνα. Έχει ένα αναγνωριστικό διεργασίας (PID) 1. Όλες οι άλλες διαδικασίες είναι είτε άμεσα είτε έμμεσα «παιδιά» της διαδικασίας init.

Θα πρέπει να ξεκινήσουν μια σειρά απο υπηρεσίες πρίν μας δώσει τον έλεγχο. Για παράδειγμα θα πρέπει να γίνει συντονισμός της ωρας με το διαδίκτυο. Επίσης να γίνει σύνδεση με το τοπικό δίκτυο και στην συνέχεια έλεγχος πρόσβασης στο internet.

Κάποια πράγματα θα πρέπει να γίνουν πρίν κάποια άλλα. Για παράδειγμα δεν μπορείς να ψάξεις για εκτυπωτές δικτύου, ή άλλους υπολογιστές άν δεν έχεις σύνδεση στο τοπικό δίκτυο. Ούτε να κάνεις συντονισμό ώρας, αν δεν έχεις internet.

H υπηρεσία εκκίνησης θα τα ξεκαθαρίσει αυτά, και θα κάνει όσο περισσότερα πράγματα μαζί ταυτόχρονα για να μας δώσει όσο το δύνατόν συντομότερα τον έλεγχο.

Αλλά κάποιες φορές ο υπολογιστής θα καθυστερεί σημαντικά, τότε θα πρέπει να βρούμε πρώτα τι παίρνει τόσο χρόνο, πριν κάνουμε οτιδήποτε άλλο. Στο άρθρο αυτό θα δούμε το πως

Αναλύοντας τον χρόνο εκκίνησης του υπολογιστή σε συστήματα με SystemD.

Μπορείς να δεις πόσο χρόνο θέλει η εκκίνηση του υπολογιστή με την εντολή

systemd-analyze time
Startup finished in 18.494s (firmware) + 5.427s (loader) + 5.153s (kernel) + 25.498s (userspace) = 54.573s
graphical.target reached after 25.490s in userspace

Για να δεις ποιο καθυστερεί περισσότερο:

systemd-analyze blame
         24.055s vboxdrv.service
          2.664s NetworkManager-wait-online.service
          1.117s nfs-server.service
           767ms dev-sda4.device
           567ms mnt-nfs-nextcloud.mount
           417ms upower.service
           393ms systemd-hwdb-update.service
           378ms networkd-dispatcher.service
           371ms mnt-nfs-eBooks.mount

Στο σύστημα μου είναι φανερό πως το vboxdrv.service παίρνει πραγματικά πολύ χρόνο. Αλλά είναι ο χρόνος αυτός κρίσιμος;

Advertisements

Όχι απαραίτητα μιας και τα παραπάνω συμβαίνουν όπως είπαμε ταυτόχρονα και όχι σειριακά. Ας βρούμε την κρίσιμη αλυσίδα:

Ας βρούμε την κρίσιμη αλυσίδα

systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @25.490s
└─multi-user.target @25.490s
  └─vboxautostart-service.service @25.482s +7ms
    └─vboxdrv.service @1.422s +24.055s
      └─basic.target @1.337s
        └─sockets.target @1.336s
          └─uuidd.socket @1.336s
            └─sysinit.target @1.316s
              └─systemd-timesyncd.service @1.116s +198ms
                └─systemd-tmpfiles-setup.service @1.074s +34ms
                  └─local-fs.target @1.068s
                    └─media-talos-Linux\x20Mint\x2019.3\x20Cinnamon\x2064\x2dbit.mount @16.177s
                      └─clean-mount-point@media-talos-Linux\x20Mint\x2019.3\x20Cinnamon\x2064\x2dbit.service @16.190s
                        └─system-clean\x2dmount\x2dpoint.slice @16.190s
                          └─system.slice @171ms
                            └─-.slice @162ms

Και όντως για να φτάσω στο γραφικό περιβάλλον (graphical.target) βάζει το χεράκι του στην καθυστέρηση.

Ας δούμε αναλυτικά τι συμβαίνει

systemd-analyze plot > plot.svg && xdg-open plot.svg

Το παραπάνω θα βγάλει μια γραφική παράσταση εκκίνησης αλλά επειδή η πολύ πληροφορία βλάπτει καλύτερα να δω μόνο τα βασικά

systemd-analyze dot 'vboxautostart-service.*' | dot -Tpng > analyze.png

xdg-open analyze.png
Καλύτερα να δω μόνο τα βασικά

Systemd | Για την σειρά των άρθρων

Εδώ και λίγες μέρες έβαλα στόχο να δω γιατί το systemd έχει προκαλέσει τόσο θόρυβο και αν είναι τόσο κακό όσο λένε. Σε άρθρα εδώ παρουσιάζω ότι καλό ή κακό βρίσκω χωρίς φανατισμούς και ιδεοληψίες.

Δείτε τα άρθρα για το systemd, καθώς και άλλες γνώμες, άλλων αρθρογράφων ακολουθώντας το tag:

Παραπομπές: