Dvije oznake rabe se kao da su ista stvar: hardverski ubrzano i izdvojeno u kernel. Jedna opisuje koje instrukcije izvodi AES rutina neke biblioteke, a druga opisuje gdje se odvija obrada paketa. VPN može imati prvu bez druge, drugu bez prve ili obje istodobno. Svaka odluka o performansama mora započeti imenovanjem toga koju od dvije zapravo mijenjate.

Dvije osi, a ne jedan rezultat

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

Druga os je smještaj: prolazi li paket putanjom transformacije kernela ili demon u korisničkom prostoru čita s tunelskog uređaja, šifrira i zapisuje natrag.

Nijedna os ne ograničava drugu. VPN u korisničkom prostoru na procesoru s AES instrukcijama može ih rabiti 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, zbog čega savjeti za podešavanje kopirani između dviju situacija tako često ne čine ništa.

Prva os: koji kod obavlja šifriranje

OpenSSL otkriva značajke procesora tijekom inicijalizacije i rabi rezultat za odabir optimiziranih putanja koda, kako opisuje dokumentacija o mogućnostima x86. AES-NI jedna je 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 rabi brza putanja. Na Linuxu je izvor polje flags u /proc/cpuinfo, a unutar gosta ono odražava š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 host može nositi dvije instalacije OpenSSL-a dok pokrenuti proces rabi samo jednu od njih.

Druga os: gdje radi putanja paketa

Smještaj u kernelu znači da se transformacija odvija u kernelovom vlastitom IPsec sklopovlju ili unutar tunelskog upravljačkog programa u kernelu, pa paketi ne trebaju povratno putovanje kroz proces u korisničkom prostoru za svaku seriju. To može smanjiti kopiranja i izmjene 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 pogrešaka, ne samo kao odluku o performansama.

Ono ne stvara podršku za instrukcije, ne konfigurira š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 doista radi, a ne s konzole hipervizora.

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

Praktično pitanje je kamo odlazi vrijeme. Ako propusnost ograničava jedna zauzeta dretva, ponovljena kopiranja međuspremnika ili obrada sistemskog poziva po paketu, premještanje transformacije na putanju koja uklanja te troškove može pomoći, pod uvjetom 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 dretva 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 stapaju. Putanja kroz kernel može rabiti isto usmjeravanje na razini instrukcija unutar kernelovog kripto API-ja, a putanja u korisničkom prostoru s dobro odabranom bibliotekom to već rabi. 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 što promijenite

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

Nadalje, pregled mogućnosti iz unutrašnjosti pokrenutog okruženja i naposljetku aktivna putanja paketa s dokazom da je način rada koji smatrate uključenim doista takav. Učitan modul nije dokaz da ga profil rabi, a konfiguracijska linija nije dokaz da ga je kernel prihvatio.

Promijenite jednu stvar, pa usporedite s dosljednim radnim opterećenjem s istim krajnjim toč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