Ο πυρήνας Linux 6.0, που αναμένεται να κυκλοφορήσει την επόμενη Δευτέρα, περιλαμβάνει μια αλλαγή που αντιμετωπίζει προβλήματα απόδοσης με τους επεξεργαστές AMD Zen. Η πηγή της πτώσης της απόδοσης ήταν κώδικας που προστέθηκε πριν από 20 χρόνια για να αντιμετωπίσει ένα πρόβλημα υλικού σε ορισμένα chipset. Το πρόβλημα υλικού έχει διορθωθεί εδώ και καιρό και δεν εμφανίζεται στα τρέχοντα chipset, αλλά η παλιά λύση έχει ξεχαστεί και έχει γίνει η πηγή υποβάθμισης της απόδοσης σε συστήματα που βασίζονται σε σύγχρονους επεξεργαστές AMD. Τα νεότερα συστήματα που βασίζονται σε επεξεργαστές Intel δεν επηρεάζονται από την παλιά λύση, καθώς έχουν πρόσβαση στο ACPI χρησιμοποιώντας ένα ξεχωριστό πρόγραμμα οδήγησης intel_idle, όχι το γενικό πρόγραμμα οδήγησης processor_idle.
Μια λύση προστέθηκε στον πυρήνα τον Μάρτιο του 2002 για να μπλοκάρει ένα σφάλμα σε chipset όπου η κατάσταση αδράνειας δεν είχε οριστεί σωστά λόγω καθυστέρησης στην επεξεργασία του σήματος STPCLK#. Για την αντιμετώπιση του προβλήματος, προστέθηκε μια επιπλέον εντολή WAIT στην υλοποίηση ACPI, η οποία επιβράδυνε τον επεξεργαστή, ώστε το chipset να έχει χρόνο να εισέλθει στην κατάσταση αδράνειας. Κατά τη δημιουργία προφίλ χρησιμοποιώντας εντολές δειγματοληψίας βάσει εντολών (IBS) σε επεξεργαστές AMD Zen3, διαπιστώθηκε ότι ο επεξεργαστής αφιερώνει σημαντικό χρόνο στην εκτέλεση ενός stub, γεγονός που οδηγεί σε εσφαλμένη ερμηνεία της κατάστασης φόρτωσης του επεξεργαστή και στη ρύθμιση βαθύτερων λειτουργιών ύπνου (C-State) από τον χειριστή cpuidle.
Αυτή η συμπεριφορά αντικατοπτρίζεται στη μείωση της απόδοσης υπό φορτία που εναλλάσσονται συχνά μεταξύ καταστάσεων αδράνειας και απασχολημένου. Για παράδειγμα, όταν χρησιμοποιείται μια ενημέρωση κώδικα που απενεργοποιεί την εναλλακτική λύση, το μέσο σημείο αναφοράς tbench αυξάνεται από 32191 MB/s σε 33805 MB/s.
Πηγή: opennet.ru
