Δύο ετικέτες χρησιμοποιούνται σαν να ήταν το ίδιο πράγμα: επιταχυνόμενη από υλικό και μεταφερμένη στον πυρήνα. Η μία περιγράφει ποιες εντολές εκτελεί η ρουτίνα AES μιας βιβλιοθήκης και η άλλη περιγράφει πού γίνεται η επεξεργασία των πακέτων. Ένα VPN μπορεί να έχει την πρώτη χωρίς τη δεύτερη, τη δεύτερη χωρίς την πρώτη ή και τις δύο μαζί. Κάθε απόφαση για τις επιδόσεις πρέπει να ξεκινά ονομάζοντας ποια από τις δύο αλλάζετε πραγματικά.

Δύο άξονες, όχι μία βαθμολογία

Ο πρώτος άξονας είναι η υλοποίηση: ο κώδικας που εκτελεί AES-256-GCM κατευθύνεται σε έκδοση που χρησιμοποιεί τις ειδικές εντολές του επεξεργαστή ή σε φορητή ρουτίνα που τις εκτελεί ως συνηθισμένη αριθμητική. Αυτή η επιλογή ζει μέσα στη βιβλιοθήκη κρυπτογραφίας και λαμβάνεται όταν αυτή αρχικοποιείται.

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

Κανένας άξονας δεν περιορίζει τον άλλο. Ένα VPN στον χώρο χρήστη σε επεξεργαστή με εντολές AES μπορεί να τις χρησιμοποιεί όλη την ώρα, και μια διαδρομή στον πυρήνα σε επεξεργαστή χωρίς αυτές πέφτει σε υλοποίηση λογισμικού. Οι ετικέτες στο υλικό των προμηθευτών σπάνια κάνουν αυτή τη διάκριση, γι’ αυτό οι συμβουλές ρύθμισης που αντιγράφονται ανάμεσα στις δύο καταστάσεις τόσο συχνά δεν κάνουν τίποτα.

Άξονας ένα: ποιος κώδικας κάνει την κρυπτογράφηση

Το OpenSSL ανιχνεύει χαρακτηριστικά του επεξεργαστή κατά την αρχικοποίηση και χρησιμοποιεί το αποτέλεσμα για να επιλέξει βελτιστοποιημένες διαδρομές κώδικα, όπως περιγράφει η τεκμηρίωση δυνατοτήτων x86. Το AES-NI είναι μία από τις τεκμηριωμένες δυνατότητες πίσω από αυτή την κατανομή. Τίποτα από αυτά δεν απαιτεί η βιβλιοθήκη να γίνει τμήμα του πυρήνα.

Επιβεβαιώστε ότι το χαρακτηριστικό είναι ορατό στη διεργασία πριν υποθέσετε ότι χρησιμοποιείται η γρήγορη διαδρομή. Στο Linux η πηγή είναι το πεδίο flags στο /proc/cpuinfo, και μέσα σε φιλοξενούμενο σύστημα αντανακλά αυτό που εκθέτει ο hypervisor και όχι το όνομα μοντέλου του φυσικού κεντρικού υπολογιστή.

grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verbose

Η δεύτερη εντολή ονομάζει τους παρόχους που φορτώθηκαν σε εκείνη τη μεταγλώττιση. Δεν σας λέει ποια βιβλιοθήκη συνέδεσε η υπηρεσία VPN, και ένας υπολογιστής μπορεί να φέρει δύο εγκαταστάσεις OpenSSL ενώ η διεργασία που τρέχει χρησιμοποιεί μόνο μία από αυτές.

Άξονας δύο: πού τρέχει η διαδρομή των πακέτων

Η τοποθέτηση στον πυρήνα σημαίνει ότι ο μετασχηματισμός γίνεται στον μηχανισμό IPsec του ίδιου του πυρήνα ή μέσα σε οδηγό τούνελ εντός του πυρήνα, ώστε τα πακέτα να μη χρειάζονται ταξίδι μετ’ επιστροφής μέσα από διεργασία χώρου χρήστη για κάθε παρτίδα. Αυτό μπορεί να κόψει αντιγραφές και εναλλαγές περιβάλλοντος και να απλώσει την εργασία σε πυρήνες με τρόπο που ένας δαίμονας ενός νήματος δεν μπορεί. Μεταφέρει επίσης τους μετρητές και τα ίχνη που θα διαβάσετε όταν πέσει η απόδοση, γιατί η εργασία τώρα γίνεται στην άλλη πλευρά ενός ορίου που δεν ελέγχετε. Θεωρήστε το κόστος αποσφαλμάτωσης, όχι μόνο απόφαση επιδόσεων.

Δεν δημιουργεί υποστήριξη εντολών, δεν ρυθμίζει κρυπτογράφο και δεν κάνει μια υπάρχουσα διαδρομή να λειτουργεί.

Η εικονικοποίηση προσθέτει μια πτυχή και σε αυτόν τον άξονα. Σε ένα φιλοξενούμενο σύστημα μπορεί να δοθεί μασκαρισμένο μοντέλο επεξεργαστή που κρύβει χαρακτηριστικά που έχει ο κεντρικός υπολογιστής, και ένα φωλιασμένο φιλοξενούμενο μπορεί να βλέπει ακόμη λιγότερα. Διαβάστε την όψη δυνατοτήτων από μέσα στο περιβάλλον όπου το VPN τρέχει πραγματικά, όχι από την κονσόλα του hypervisor.

Τι αγοράζει κάθε επιλογή και τι δεν μπορεί

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

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

Όπου ισχύουν και τα δύο, συνδυάζονται. Μια διαδρομή στον πυρήνα μπορεί να χρησιμοποιεί την ίδια κατανομή σε επίπεδο εντολών μέσα στο crypto API του πυρήνα, και μια διαδρομή χώρου χρήστη με καλά επιλεγμένη βιβλιοθήκη την χρησιμοποιεί ήδη. Η απόφαση δεν είναι ποια είναι ταχύτερη αφηρημένα· είναι για ποιο κόστος έχετε αποδείξεις.

Καταγράψτε τα τέσσερα γεγονότα πριν αλλάξετε οτιδήποτε

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

Έπειτα, η όψη δυνατοτήτων από μέσα στο περιβάλλον που τρέχει, και τέλος η ενεργή διαδρομή πακέτων με απόδειξη ότι η λειτουργία που νομίζετε ενεργή είναι πράγματι τέτοια. Ένα φορτωμένο module δεν είναι απόδειξη ότι ένα προφίλ το χρησιμοποιεί, και μια γραμμή ρύθμισης δεν είναι απόδειξη ότι ο πυρήνας την αποδέχτηκε.

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

Σχετικά άρθρα