Το Cloudflare έχει ετοιμάσει ενημερώσεις κώδικα που επιταχύνουν δραματικά την κρυπτογράφηση δίσκου στο Linux

Προγραμματιστές από το Cloudflare είπα σχετικά με την εκτέλεση εργασιών για τη βελτιστοποίηση της απόδοσης της κρυπτογράφησης δίσκου στον πυρήνα του Linux. Ως αποτέλεσμα, ήταν προετοιμασμένοι μπαλώματα για υποσύστημα dm-κρύπτη και Crypto API, το οποίο κατέστησε δυνατό τον υπερδιπλασιασμό της απόδοσης ανάγνωσης και εγγραφής στη συνθετική δοκιμή, καθώς και τη μείωση του λανθάνοντος χρόνου κατά το ήμισυ. Όταν δοκιμάστηκε σε πραγματικό υλικό, το κόστος κρυπτογράφησης μειώθηκε σχεδόν στο επίπεδο που παρατηρείται όταν εργάζεστε με δίσκο χωρίς κρυπτογράφηση δεδομένων.

Το Cloudflare χρησιμοποιεί dm-crypt για την κρυπτογράφηση δεδομένων σε συσκευές αποθήκευσης που χρησιμοποιούνται για την προσωρινή αποθήκευση περιεχομένου στο CDN. Το Dm-crypt λειτουργεί σε επίπεδο συσκευής μπλοκ και κρυπτογραφεί αιτήματα εισόδου/εξόδου εγγραφής και αποκρυπτογραφεί αιτήματα ανάγνωσης, ενεργώντας ως στρώμα μεταξύ της συσκευής μπλοκ και του προγράμματος οδήγησης συστήματος αρχείων.

Το Cloudflare έχει ετοιμάσει ενημερώσεις κώδικα που επιταχύνουν δραματικά την κρυπτογράφηση δίσκου στο Linux

Για να αξιολογήσετε την απόδοση του dm-crypt χρησιμοποιώντας το πακέτο Ευέλικτο ελεγκτή εισόδου/εξόδου Μετρήσαμε την ταχύτητα εργασίας με κρυπτογραφημένα και μη κρυπτογραφημένα διαμερίσματα σε δίσκο RAM που βρίσκεται στη μνήμη RAM για να εξαλείψουμε τις διακυμάνσεις στην απόδοση του δίσκου και να εστιάσουμε στην απόδοση του κώδικα. Για μη κρυπτογραφημένα διαμερίσματα, η απόδοση ανάγνωσης και εγγραφής παρέμεινε στα 1126 MB/s, αλλά η ταχύτητα μειώθηκε όταν ενεργοποιήθηκε η κρυπτογράφηση 7 στο χρόνο και ανήλθε σε 147 MB/s.

Αρχικά, προέκυψαν υποψίες για τη χρήση αναποτελεσματικών αλγορίθμων στο κρυπτοσύστημα του πυρήνα. Ωστόσο, οι δοκιμές χρησιμοποίησαν τον ταχύτερο αλγόριθμο, τον aes-xts, με 256 κλειδιά κρυπτογράφησης, των οποίων η απόδοση κατά την εκτέλεση του «κριτηρίου αναφοράς cryptsetup» είναι υπερδιπλάσια από το αποτέλεσμα που προκύπτει κατά τη δοκιμή ενός δίσκου RAM. Τα πειράματα με σημαίες dm-crypt για συντονισμό απόδοσης δεν απέδωσαν αποτελέσματα: όταν χρησιμοποιήθηκε η σημαία "--perf-same_cpu_crypt", η απόδοση μειώθηκε ακόμη και στα 136 MB/s και κατά τον καθορισμό της σημαίας "--perf-submit_from_crypt_cpus" αυξήθηκε μόνο έως 166 MB/s.

Μια βαθύτερη ανάλυση της λογικής λειτουργίας έδειξε ότι το dm-crypt δεν είναι τόσο απλό όσο φαίνεται - όταν έρχεται ένα αίτημα εγγραφής από το πρόγραμμα οδήγησης FS, το dm-crypt δεν το επεξεργάζεται αμέσως, αλλά το τοποθετεί στην ουρά "kcryptd", η οποία δεν αναλύεται αμέσως, αλλά όταν βολεύει τη στιγμή. Από την ουρά, το αίτημα αποστέλλεται στο Linux Crypto API για να εκτελέσει κρυπτογράφηση. Επειδή όμως το Crypto API χρησιμοποιεί ένα μοντέλο ασύγχρονης εκτέλεσης, η κρυπτογράφηση δεν εκτελείται επίσης αμέσως, αλλά παρακάμπτεται μια άλλη ουρά. Μετά την ολοκλήρωση της κρυπτογράφησης, το dm-crypt μπορεί να επιχειρήσει να ταξινομήσει εκκρεμείς αιτήσεις εγγραφής χρησιμοποιώντας ένα δέντρο αναζήτησης κόκκινο μαύρο. Στο τέλος, ένα ξεχωριστό νήμα πυρήνα και πάλι, με μια ορισμένη καθυστέρηση, παραλαμβάνει τα συσσωρευμένα αιτήματα εισόδου/εξόδου και τα στέλνει στη στοίβα συσκευών μπλοκ.

Το Cloudflare έχει ετοιμάσει ενημερώσεις κώδικα που επιταχύνουν δραματικά την κρυπτογράφηση δίσκου στο Linux

Κατά την ανάγνωση, το dm-crypt προσθέτει πρώτα ένα αίτημα στην ουρά "kcryptd_io" για λήψη δεδομένων από τη μονάδα δίσκου. Μετά από κάποιο χρονικό διάστημα, τα δεδομένα γίνονται διαθέσιμα και τοποθετούνται στην ουρά "kcryptd" για αποκρυπτογράφηση.
Το Kcryptd στέλνει ένα αίτημα στο Linux Crypto API, το οποίο αποκρυπτογραφεί τις πληροφορίες ασύγχρονα. Τα αιτήματα δεν περνούν πάντα από όλες τις ουρές, αλλά στη χειρότερη περίπτωση, ένα αίτημα εγγραφής καταλήγει σε ουρές έως και 4 φορές και ένα αίτημα ανάγνωσης έως και 3 φορές. Κάθε χτύπημα στην ουρά προκαλεί καθυστερήσεις, οι οποίες είναι ο βασικός λόγος για τη σημαντική μείωση της απόδοσης dm-crypt.

Η χρήση ουρών οφείλεται στην ανάγκη εργασίας σε συνθήκες όπου σημειώνονται διακοπές. Το 2005, όταν εφαρμόστηκε το τρέχον μοντέλο λειτουργίας του dm-crypt που βασίζεται σε ουρές, το Crypto API δεν ήταν ακόμη ασύγχρονο. Μετά τη μεταφορά του Crypto API σε ένα μοντέλο ασύγχρονης εκτέλεσης, άρχισε να χρησιμοποιείται ουσιαστικά διπλή προστασία. Εισήχθησαν επίσης ουρές για εξοικονόμηση κατανάλωσης της στοίβας πυρήνα, αλλά μετά την αύξησή της το 2014, αυτές οι βελτιστοποιήσεις έχασαν τη σημασία τους. Μια πρόσθετη ουρά "kcryptd_io" εισήχθη για να ξεπεραστεί η συμφόρηση με αποτέλεσμα την αναμονή για την εκχώρηση μνήμης όταν φτάσει ένας μεγάλος αριθμός αιτημάτων. Το 2015, εισήχθη μια πρόσθετη φάση ταξινόμησης, καθώς τα αιτήματα κρυπτογράφησης σε συστήματα πολλαπλών επεξεργαστών μπορούσαν να ολοκληρωθούν εκτός λειτουργίας (αντί για διαδοχική πρόσβαση στο δίσκο, η πρόσβαση πραγματοποιήθηκε με τυχαία σειρά και ο προγραμματιστής CFQ δεν λειτουργούσε αποτελεσματικά). Επί του παρόντος, όταν χρησιμοποιείτε μονάδες SSD, η ταξινόμηση έχει χάσει το νόημά της και ο προγραμματιστής CFQ δεν χρησιμοποιείται πλέον στον πυρήνα.

Λαμβάνοντας υπόψη ότι οι σύγχρονοι δίσκοι έχουν γίνει πιο γρήγοροι και πιο έξυπνοι, το σύστημα διανομής πόρων στον πυρήνα του Linux έχει αναθεωρηθεί και ορισμένα υποσυστήματα έχουν επανασχεδιαστεί, οι μηχανικοί του Cloudflare προστέθηκε Το dm-crypt έχει νέο τρόπο λειτουργίας που εξαλείφει τη χρήση περιττών ουρών και ασύγχρονων κλήσεων. Η λειτουργία ενεργοποιείται από μια ξεχωριστή σημαία "force_inline" και φέρνει το dm-crypt στη μορφή ενός απλού διακομιστή μεσολάβησης που κρυπτογραφεί και αποκρυπτογραφεί τα εισερχόμενα αιτήματα. Η αλληλεπίδραση με το Crypto API έχει βελτιστοποιηθεί επιλέγοντας ρητά αλγόριθμους κρυπτογράφησης που λειτουργούν σε σύγχρονη λειτουργία και δεν χρησιμοποιούν ουρές αιτημάτων. Για να λειτουργήσει συγχρονισμένα με το Crypto API υπήρχε προτείνεται μια μονάδα που σας επιτρέπει να χρησιμοποιείτε το FPU/AES-NI για επιτάχυνση και να προωθεί απευθείας αιτήματα κρυπτογράφησης και αποκρυπτογράφησης.

Ως αποτέλεσμα, κατά τη δοκιμή ενός δίσκου RAM, ήταν δυνατό να υπερδιπλασιαστεί η απόδοση του dm-crypt - η απόδοση αυξήθηκε από 294 MB/s (2 x 147 MB/s) σε 640 MB/s, που είναι πολύ κοντά στο την απόδοση γυμνής κρυπτογράφησης (696 MB/s).

Το Cloudflare έχει ετοιμάσει ενημερώσεις κώδικα που επιταχύνουν δραματικά την κρυπτογράφηση δίσκου στο Linux

Το Cloudflare έχει ετοιμάσει ενημερώσεις κώδικα που επιταχύνουν δραματικά την κρυπτογράφηση δίσκου στο Linux

Το Cloudflare έχει ετοιμάσει ενημερώσεις κώδικα που επιταχύνουν δραματικά την κρυπτογράφηση δίσκου στο Linux

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

Το Cloudflare έχει ετοιμάσει ενημερώσεις κώδικα που επιταχύνουν δραματικά την κρυπτογράφηση δίσκου στο Linux

Πηγή: opennet.ru

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