AES-NI OpenSSL-is versus tuuma üleandmine: kumba te vajate?
Eraldage CPU-käskude tugi sellest, kus pakette töödeldakse: enne häälestamist kontrollige krüpto-taustarakendust, kokkulepitud šifrit ja aktiivset teed.
Kahte silti kasutatakse nii, nagu oleks tegu sama asjaga: riistvaraliselt kiirendatud ja tuuma üle antud. Üks kirjeldab, milliseid käske teegi AES-rutiin täidab, ja teine kirjeldab, kus pakettide töötlemine toimub. VPN-il võib olla esimene ilma teiseta, teine ilma esimeseta või mõlemad korraga. Iga jõudlusotsus peab algama selle nimetamisest, kumba neist te tegelikult muudate.
Kaks telge, mitte üks hinne
Esimene telg on teostus: kas AES-256-GCM-i tegev kood suunatakse versioonile, mis kasutab protsessori spetsiaalseid käske, või kaasaskantavale rutiinile, mis täidab neid tavalise aritmeetikana. See valik elab krüptograafilise teegi sees ja tehakse selle algatamisel.
Teine telg on paigutus: kas pakett läbib tuuma teisendustee või loeb kasutajaruumi deemon tunneliseadmest, krüpteerib ja kirjutab tagasi.
Kumbki telg ei piira teist. Kasutajaruumi VPN AES-käskudega protsessoril võib neid kogu aeg kasutada, ja tuumatee ilma nendeta protsessoril langeb tagasi tarkvara teostusele. Tarnijate materjalides ei tehta seda vahet harva, mistõttu kahe olukorra vahel kopeeritud häälestusnõuanded nii sageli ei tee midagi.
Esimene telg: milline kood krüpteerib
OpenSSL tuvastab algatamisel protsessori omadused ja kasutab tulemust optimeeritud kooditeede valimiseks, nagu kirjeldab x86 võimaluste dokumentatsioon. AES-NI on üks dokumenteeritud võimalustest selle suunamise taga. Miski sellest ei nõua, et teegist saaks tuuma komponent.
Veenduge, et omadus on protsessile nähtav, enne kui eeldate, et kiire tee on kasutusel. Linuxis on allikaks /proc/cpuinfo väli flags, ja külalise sees peegeldab see seda, mida hüperviisor paljastab, mitte füüsilise hosti mudelinime.
grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verboseTeine käsk nimetab selles buildis laaditud pakkujad. See ei ütle, millise teegi VPN-teenus linkis, ja üks host võib kanda kahte OpenSSL-i paigaldust, samal ajal kui jooksev protsess kasutab neist ainult ühte.
Teine telg: kus paketitee jookseb
Paigutus tuumas tähendab, et teisendus toimub tuuma enda IPsec-masinavärgis või tuumasiseses tunnelidraiveris, nii et paketid ei vaja iga partii jaoks edasi-tagasi reisi läbi kasutajaruumi protsessi. See võib vähendada kopeerimisi ja kontekstivahetusi ning jaotada tööd tuumade vahel nii, nagu üksiklõimeline deemon ei suuda. See liigutab ka loendurid ja jäljed, mida te läbilaskevõime langedes loete, sest töö toimub nüüd piiri teisel poolel, mida te ei kontrolli. Käsitlege seda silumiskuluna, mitte ainult jõudlusotsusena.
See ei loo käskude tuge, ei sea šifrit ega pane olemasolevat marsruuti tööle.
Virtualiseerimine lisab sellele teljele ka voldi. Külalisele võidakse anda maskeeritud protsessorimudel, mis peidab omadusi, mis hostil on, ja pesastatud külaline võib näha veel vähem. Lugege võimaluste vaadet seestpoolt keskkonda, kus VPN tegelikult jookseb, mitte hüperviisori konsoolilt.
Mida kumbki valik ostab ja mida ei suuda
Praktiline küsimus on, kuhu aeg läheb. Kui läbilaskevõimet piirab üks hõivatud lõim, korduvad puhverduskopeeringud või süsteemikutse paketi kohta, võib teisenduse viimine teele, mis need kulud kõrvaldab, aidata, kui tuum teostab vajaliku teisenduse.
Kui piiriks on ummistunud üleslink, kadudega tee, pikk edasi-tagasi aeg, küllastunud sihteenus või ühele tuumale kinnitatud lõim, ei muuda paigutus midagi olulist. Sama kehtib käskude valiku kohta: AES spetsiaalsel riistvaral ei paranda puuduvat marsruuti ega aita, kui tunnel on jõude, sest nimelahendus ebaõnnestub.
Kus kehtivad mõlemad, seal nad liituvad. Tuumatee saab kasutada sama käsutasemelist suunamist tuuma krüpto-API sees, ja kasutajaruumi tee hästi valitud teegiga kasutab seda juba. Otsus ei ole, kumb on abstraktselt kiirem; otsus on, millise kulu kohta teil tõendid on.
Kirjutage neli fakti üles enne, kui midagi muudate
Kirjutage üles teenuse binaarfail ja krüptoteek, millega see on lingitud, sest need otsustavad esimese telje. Seejärel kirjutage üles kokkulepitud andmekaitse, sest šiffer ilma spetsiaalse käsueteeta käitub teisiti kui sellega, ja komplekti valivad mõlemad pooled.
Järgmisena võimaluste vaade jooksva keskkonna seest ja lõpuks aktiivne paketitee koos tõendiga, et režiim, mida peate lubatuks, seda tõesti on. Laaditud moodul ei ole tõend, et profiil seda kasutab, ja konfiguratsioonirida ei ole tõend, et tuum selle vastu võttis.
Muutke ühte asja ja võrrelge siis ühtlase koormusega samade lõpp-punktide ja sama edastussuunaga. Kiirusväide, mida te ei mõõtnud, on väärt vähem kui märge, et taustarakendus ei olnud kunagi kahtluse all.