S’utilitzen dues etiquetes com si fossin el mateix: accelerat per maquinari i descarregat al nucli. Una descriu quines instruccions executa la rutina AES d’una biblioteca i l’altra descriu on es produeix el processament dels paquets. Una VPN pot tenir la primera sense la segona, la segona sense la primera o totes dues alhora. Qualsevol decisió sobre el rendiment ha de començar per anomenar quina de les dues esteu canviant realment.

Dos eixos, no una puntuació

El primer eix és la implementació: el codi que fa AES-256-GCM es dirigeix a una versió que utilitza les instruccions dedicades del processador o a una rutina portàtil que les executa com a aritmètica ordinària. Aquesta tria viu dins de la biblioteca criptogràfica i es pren quan s’inicialitza.

El segon eix és la ubicació: el paquet travessa la ruta de transformació del nucli o un dimoni a l’espai d’usuari llegeix d’un dispositiu de túnel, xifra i torna a escriure.

Cap eix no limita l’altre. Una VPN a l’espai d’usuari sobre una CPU amb instruccions AES les pot estar utilitzant tot el temps, i una ruta al nucli sobre una CPU sense elles recorre a una implementació de programari. Les etiquetes dels materials dels proveïdors poques vegades fan aquesta distinció, i per això els consells d’ajust copiats entre les dues situacions sovint no fan res.

Eix u: quin codi fa el xifratge

OpenSSL detecta característiques del processador durant la inicialització i utilitza el resultat per triar camins de codi optimitzats, tal com descriu la documentació de capacitats x86. AES-NI és una de les capacitats documentades darrere d’aquest despatxament. Res d’això no obliga la biblioteca a convertir-se en un component del nucli.

Confirmeu que la característica és visible per al procés abans de suposar que s’utilitza el camí ràpid. A Linux la font és el camp flags de /proc/cpuinfo, i dins d’un convidat reflecteix el que exposa l’hipervisor i no el nom del model de l’amfitrió físic.

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

La segona ordre anomena els proveïdors carregats en aquella compilació. No us diu quina biblioteca ha enllaçat el servei VPN, i un amfitrió pot portar dues instal·lacions d’OpenSSL mentre el procés en execució només n’utilitza una.

Eix dos: on s’executa la ruta dels paquets

La ubicació al nucli significa que la transformació es fa a la maquinària IPsec del mateix nucli o dins d’un controlador de túnel al nucli, de manera que els paquets no necessiten un viatge d’anada i tornada per un procés d’espai d’usuari per a cada lot. Això pot reduir còpies i canvis de context, i pot repartir la feina entre nuclis d’una manera que un dimoni d’un sol fil no pot. També mou els comptadors i les traces que llegireu quan baixi el cabal, perquè la feina ara passa a l’altre costat d’una frontera que no controleu. Considereu-ho un cost de depuració, no només una decisió de rendiment.

No crea suport d’instruccions, no configura un xifratge ni fa que funcioni una ruta existent.

La virtualització afegeix un plec també en aquest eix. Es pot donar a un convidat un model de CPU emmascarat que amaga característiques que l’amfitrió té, i un convidat niuat en pot veure encara menys. Llegiu la vista de capacitats des de dins de l’entorn on la VPN funciona realment, no des de la consola de l’hipervisor.

Què compra cada tria i què no pot

La pregunta pràctica és on se’n va el temps. Si un sol fil ocupat, còpies repetides del búfer o un patró de crida al sistema per paquet limiten el cabal, moure la transformació a una ruta que elimina aquests costos pot ajudar, sempre que el nucli implementi la transformació que necessiteu.

Si el límit és un enllaç ascendent congestionat, una ruta amb pèrdues, un temps d’anada i tornada llarg, un servei de destinació saturat o un fil fixat a un nucli, la ubicació no canvia res important. El mateix val per a la selecció d’instruccions: AES sobre maquinari dedicat no pot reparar una ruta que falta i no ajudarà si el túnel està inactiu perquè falla la resolució de noms.

On s’apliquen les dues, es combinen. Una ruta al nucli pot utilitzar el mateix despatxament a nivell d’instruccions dins de l’API criptogràfica del nucli, i una ruta a l’espai d’usuari amb una biblioteca ben triada ja ho fa. La decisió no és quina és més ràpida en abstracte; és per a quin cost teniu proves.

Anoteu els quatre fets abans de canviar res

Escriviu el binari del servei i la biblioteca criptogràfica a què enllaça, perquè aquests decideixen l’eix u. Després anoteu la protecció de dades negociada, perquè un xifratge sense camí d’instruccions dedicat es comporta de manera diferent d’un que en té, i el conjunt el trien les dues parts.

A continuació, la vista de capacitats des de dins de l’entorn en execució i, finalment, la ruta de paquets activa amb proves que el mode que creieu habilitat ho està de debò. Un mòdul carregat no és prova que un perfil l’utilitzi, i una línia de configuració no és prova que el nucli l’hagi acceptada.

Canvieu una cosa i compareu amb una càrrega de treball consistent amb els mateixos extrems i la mateixa direcció de transferència. Una afirmació de velocitat que no heu mesurat val menys que una nota que digui que el backend mai no va estar en dubte.

Articles relacionats