Προγραμματιστές από το Cloudflare
Το Cloudflare χρησιμοποιεί dm-crypt για την κρυπτογράφηση δεδομένων σε συσκευές αποθήκευσης που χρησιμοποιούνται για την προσωρινή αποθήκευση περιεχομένου στο CDN. Το Dm-crypt λειτουργεί σε επίπεδο συσκευής μπλοκ και κρυπτογραφεί αιτήματα εισόδου/εξόδου εγγραφής και αποκρυπτογραφεί αιτήματα ανάγνωσης, ενεργώντας ως στρώμα μεταξύ της συσκευής μπλοκ και του προγράμματος οδήγησης συστήματος αρχείων.
Για να αξιολογήσετε την απόδοση του dm-crypt χρησιμοποιώντας το πακέτο
Αρχικά, προέκυψαν υποψίες για τη χρήση αναποτελεσματικών αλγορίθμων στο κρυπτοσύστημα του πυρήνα. Ωστόσο, οι δοκιμές χρησιμοποίησαν τον ταχύτερο αλγόριθμο, τον 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 μπορεί να επιχειρήσει να ταξινομήσει εκκρεμείς αιτήσεις εγγραφής χρησιμοποιώντας ένα δέντρο αναζήτησης
Κατά την ανάγνωση, το 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
Ως αποτέλεσμα, κατά τη δοκιμή ενός δίσκου RAM, ήταν δυνατό να υπερδιπλασιαστεί η απόδοση του dm-crypt - η απόδοση αυξήθηκε από 294 MB/s (2 x 147 MB/s) σε 640 MB/s, που είναι πολύ κοντά στο την απόδοση γυμνής κρυπτογράφησης (696 MB/s).
Κατά τη δοκιμή του φορτίου σε πραγματικούς διακομιστές, η νέα εφαρμογή έδειξε απόδοση πολύ κοντά στη διαμόρφωση που εκτελείται χωρίς κρυπτογράφηση και η ενεργοποίηση της κρυπτογράφησης σε διακομιστές με προσωρινή μνήμη Cloudflare δεν είχε καμία επίδραση στην ταχύτητα απόκρισης. Στο μέλλον, το Cloudflare σχεδιάζει να μεταφέρει τις προετοιμασμένες ενημερώσεις κώδικα στον κύριο πυρήνα Linux, αλλά πριν από αυτό θα πρέπει να επεξεργαστούν εκ νέου, καθώς είναι βελτιστοποιημένες για ένα συγκεκριμένο φορτίο και δεν καλύπτουν όλους τους τομείς εφαρμογής, για παράδειγμα, κρυπτογράφηση σε χαμηλά επίπεδα -ενσωματωμένες συσκευές ισχύος.
Πηγή: opennet.ru