Dvije oznake koriste se kao da su jedno te isto: hardverski ubrzano i izdvojeno u kernel. Prva opisuje koje instrukcije izvodi AES rutina neke biblioteke, druga opisuje gdje se odvija obrada paketa. VPN može imati prvu bez druge, drugu bez prve ili obje zajedno. Svaka odluka o performansama mora početi imenovanjem toga koju od dvije zaista mijenjate.

Dvije ose, a ne jedan rezultat

Prva osa je implementacija: usmjerava li se kod koji radi AES-256-GCM na verziju koja koristi namjenske instrukcije procesora ili na prenosivu rutinu koja ih izvodi kao običnu aritmetiku. Taj izbor živi unutar kriptografske biblioteke i donosi se pri njenoj inicijalizaciji.

Druga osa je smještaj: prolazi li paket kroz transformacionu putanju kernela ili demon u korisničkom prostoru čita s tunelskog uređaja, šifrira i piše natrag.

Nijedna osa ne ograničava drugu. VPN u korisničkom prostoru na procesoru s AES instrukcijama može ih koristiti cijelo vrijeme, a putanja kroz kernel na procesoru bez njih vraća se na softversku implementaciju. Oznake u materijalima dobavljača rijetko prave tu razliku, i zato savjeti za podešavanje kopirani između dvije situacije tako često ne rade ništa.

Osa jedan: koji kod obavlja šifriranje

OpenSSL otkriva značajke procesora tijekom inicijalizacije i koristi rezultat za odabir optimiziranih putanja koda, kako opisuje dokumentacija o mogućnostima x86. AES-NI je jedna od dokumentiranih mogućnosti iza tog usmjeravanja. Ništa od toga ne zahtijeva da biblioteka postane komponenta kernela.

Provjerite je li značajka vidljiva procesu prije nego pretpostavite da se koristi brza putanja. Na Linuxu je izvor polje flags u /proc/cpuinfo, a unutar gosta ono odražava ono što hipervizor izlaže, a ne naziv modela fizičkog hosta.

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

Druga naredba imenuje pružatelje učitane u tom buildu. Ne govori vam koju je biblioteku povezao VPN servis, a jedan host može nositi dvije instalacije OpenSSL-a dok pokrenuti proces koristi samo jednu od njih.

Osa dva: gdje radi putanja paketa

Smještaj u kernelu znači da se transformacija odvija u kernelovom vlastitom IPsec mehanizmu ili unutar tunelskog drajvera u kernelu, pa paketi ne trebaju povratno putovanje kroz proces u korisničkom prostoru za svaku seriju. To može smanjiti kopiranja i promjene konteksta te rasporediti posao po jezgrama na način koji jednonični demon ne može. Premješta i brojače i tragove koje ćete čitati kad propusnost padne, jer se posao sada odvija s druge strane granice koju ne kontrolirate. Tretirajte to kao trošak otklanjanja grešaka, ne samo kao odluku o performansama.

Ono ne stvara podršku za instrukcije, ne konfiguriše šifru i ne osposobljava postojeću rutu.

Virtualizacija dodaje nabor i na ovoj osi. Gostu se može dati maskirani model procesora koji skriva značajke koje host ima, a ugniježđeni gost može vidjeti još manje. Čitajte pregled mogućnosti iz unutrašnjosti okruženja u kojem VPN zaista radi, a ne s konzole hipervizora.

Šta koji izbor kupuje i šta ne može

Praktično pitanje je kamo odlazi vrijeme. Ako propusnost ograničava jedna zauzeta nit, ponovljena kopiranja međuspremnika ili sistemski poziv po paketu, premještanje transformacije na putanju koja uklanja te troškove može pomoći, pod uslovom da kernel implementira transformaciju koja vam je potrebna.

Ako je ograničenje zagušena uzlazna veza, putanja s gubicima, dugo vrijeme kruženja, zasićena odredišna usluga ili jedna nit prikvačena za jedno jezgro, smještaj ne mijenja ništa važno. Isto vrijedi i za odabir instrukcija: AES na namjenskom hardveru ne može popraviti rutu koja nedostaje i neće pomoći ako tunel miruje jer razrješavanje imena ne uspijeva.

Gdje vrijedi oboje, oni se dopunjuju. Putanja kroz kernel može koristiti isto usmjeravanje na razini instrukcija unutar kernelovog kripto API-ja, a putanja u korisničkom prostoru s dobro odabranom bibliotekom to već koristi. Odluka nije koja je brža u apstraktnom smislu; odluka je za koji trošak imate dokaz.

Zapišite četiri činjenice prije nego što bilo šta promijenite

Zapišite servisnu binarnu datoteku i kriptografsku biblioteku s kojom je povezana, jer one određuju prvu osu. Zatim zabilježite dogovorenu zaštitu podataka, jer se šifra bez namjenske instrukcijske putanje ponaša drugačije od one s njom, a skup biraju obje strane.

Zatim pregled mogućnosti iz unutrašnjosti pokrenutog okruženja i na kraju aktivna putanja paketa s dokazom da je režim koji smatrate uključenim zaista takav. Učitan modul nije dokaz da ga profil koristi, a konfiguracijska linija nije dokaz da ga je kernel prihvatio.

Promijenite jednu stvar, pa uporedite s dosljednim radnim opterećenjem s istim krajnjim tačkama i istim smjerom prijenosa. Tvrdnja o brzini koju niste izmjerili vrijedi manje od bilješke da pozadina nikada nije bila pod sumnjom.

Povezani članci