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

Ο Brendan Gregg, ένας από τους προγραμματιστές του DTrace, ο οποίος αυτή τη στιγμή αναπτύσσει εργαλεία ανάλυσης απόδοσης που βασίζονται σε BPF στον πυρήνα Linux, συνόψισε την εμπειρία που αποκτήθηκε από την ανάλυση των προβλημάτων απόδοσης που αντιμετώπισε το Netflix κατά τη μετεγκατάσταση του Cassandra DBMS από το CentOS στο Ubuntu. περιβάλλοντα που εκτελούνται σε το Amazon EC2 cloud που βασίζεται στο Xen. Μετά τη μετεγκατάσταση, το φορτίο της CPU αυξήθηκε κατά 30% και οι καθυστερήσεις κατά τις λειτουργίες εγγραφής αυξήθηκαν κατά περίπου το ίδιο ποσό. Όπως αποδεικνύεται, η απόδοση των εφαρμογών που ζητούν εντατικά πληροφορίες χρόνου εξαρτάται σε μεγάλο βαθμό από την ακριβή πηγή χρόνου που έχει επιλεγεί στο σύστημα.

Αρχικά, ο λόγος για τη μείωση της απόδοσης δεν ήταν προφανής και η διάγνωση ξεκίνησε με την παρακολούθηση του πιθανού αντίκτυπου των διαδικασιών συστήματος που εκτελούνται συνεχώς ή εκκινούνται περιοδικά με ένταση πόρων χρησιμοποιώντας τα κορυφαία και execsnoop βοηθητικά προγράμματα. Αλλά όλα έδειχναν ότι η κατανάλωση πόρων είχε αυξηθεί ειδικά στο Cassandra DBMS, γραμμένο σε Java. Συγκρίνοντας τις μετρήσεις προφίλ δύο διεργασιών Cassandra που εκτελούνται παράλληλα σε CentOS και Ubuntu, επεξεργάζοντας τα ίδια ερωτήματα, έδειξε ότι περίπου το 32% του συνολικού χρόνου δαπανήθηκε για την κλήση του os::javaTimeMillis(), το οποίο χρησιμοποιείται για τη λήψη πληροφοριών σχετικά με την τρέχουσα ώρα .

Μετά από αυτό, διεξήχθη ένα πείραμα στο οποίο γράφτηκε μια απλή εφαρμογή Java που καλούσε τη μέθοδο System.currentTimeMillis() εκατό εκατομμύρια φορές σε βρόχο. Η εκτέλεση της εφαρμογής έδειξε ότι χρειάστηκαν 13 δευτερόλεπτα για να ολοκληρωθεί στο CentOS και περίπου 68 δευτερόλεπτα στο Ubuntu, δηλ. 5 φορές πιο αργά. Ένα παρόμοιο πρόγραμμα γράφτηκε στο C που κάλεσε τη συνάρτηση gettimeofday() εκατό εκατομμύρια φορές, αλλά όταν εκτελέστηκε, προέκυψαν παρόμοια αποτελέσματα.

Εφόσον κατέστη σαφές ότι η πηγή του προβλήματος ήταν η λειτουργία της επιστροφής της τρέχουσας ώρας, η προσοχή στράφηκε στις αλλαγές στους δείκτες κατά την επιλογή διαφορετικών πηγών ακριβούς χρόνου στο σύστημα. Κρίνοντας από τα περιεχόμενα του "/sys/devices/system/clocksource/clocksource0/current_clocksource", ο χρονοδιακόπτης "xen" χρησιμοποιήθηκε από προεπιλογή κατά την εκτέλεση του Linux στο σύστημα επισκεπτών. Μετά την αλλαγή της πηγής χρόνου σε "tsc", ο χρόνος εκτέλεσης της δοκιμαστικής εφαρμογής στο Ubuntu μειώθηκε από 68 σε 3.3 δευτερόλεπτα, δηλ. έγινε 20 φορές πιο γρήγορο. Επιπλέον, πραγματοποιήθηκε δοκιμή απόδοσης της πηγής χρόνου kvm-clock, η οποία έδειξε αύξηση των καθυστερήσεων κατά 20% σε σύγκριση με το TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ χρόνος java TimeBench πραγματικός 1m8.300s χρήστης $0 echo tsc > /sys/devices/system/clocksource/clocksource38.337/current_clocksource $ χρόνος java TimeBench πραγματικός χρήστης 0m29.875s 0m0s sys 3.370m0s

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

Η εναλλαγή των διακομιστών παραγωγής στο Netflix σε μια πηγή TSC οδήγησε σε μείωση κατά 43% στην καθυστέρηση εγγραφής και επιτεύχθηκαν αποτελέσματα χρησιμοποιώντας το Ubuntu που ήταν 4 φορές πιο γρήγορα από διαμορφώσεις που εκτελούσαν CentOS με πηγή χρόνου "xen". Τα αποτελέσματα της μελέτης μεταφέρθηκαν στην Amazon, η οποία επίσημα συνέστησε τη χρήση της προεπιλεγμένης πηγής ώρας TSC σε περιβάλλοντα AWS EC2 που βασίζονται στον υπερεπόπτη Xen (το kvm-ρολόι εξακολουθεί να συνιστάται σε περιβάλλοντα που βασίζονται στον υπερεπόπτη Nitro).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο