AES-NI katika OpenSSL au kuhamishia kernel: ipi unahitaji?
Tenganisha usaidizi wa maagizo ya CPU na mahali pakiti zinachakatwa: angalia backend ya crypto, cipher iliyokubaliwa na njia hai kabla ya kurekebisha.
Lebo mbili zinatumiwa kana kwamba ni kitu kimoja: iliyoharakishwa na maunzi na iliyohamishwa kwenye kernel. Moja inaeleza ni maagizo gani ambayo utaratibu wa AES wa maktaba unatekeleza, nyingine inaeleza mahali usindikaji wa pakiti unafanyika. VPN inaweza kuwa na ya kwanza bila ya pili, ya pili bila ya kwanza, au zote mbili pamoja. Uamuzi wowote kuhusu utendaji lazima uanze kwa kutaja ni ipi kati ya hizo mbili unayobadilisha kwa kweli.
Mihimili miwili, si alama moja
Mhimili wa kwanza ni utekelezaji: kodi inayofanya AES-256-GCM inaelekezwa kwenye toleo linalotumia maagizo maalum ya processor au kwenye utaratibu unaoweza kuhamishwa unaoyatekeleza kama hesabu ya kawaida. Chaguo hili linaishi ndani ya maktaba ya crypto na hufanywa inapoanzishwa.
Mhimili wa pili ni mahali: pakiti inapita kwenye njia ya mabadiliko ya kernel au daemon katika nafasi ya mtumiaji inasoma kutoka kifaa cha handaki, inasimbua na kuandika tena.
Hakuna mhimili unaozuia mwingine. VPN katika nafasi ya mtumiaji kwenye CPU yenye maagizo ya AES inaweza kuyatumia wakati wote, na njia ya kernel kwenye CPU isiyo nayo hurudi kwenye utekelezaji wa programu. Lebo katika nyenzo za wauzaji mara chache huonyesha tofauti hiyo, na ndiyo sababu ushauri wa urekebishaji unaonakiliwa kati ya hali hizo mbili mara nyingi haufanyi chochote.
Mhimili wa kwanza: ni kodi ipi inayofanya usimbaji
OpenSSL hutambua sifa za processor wakati wa kuanzisha na hutumia matokeo kuchagua njia za kodi zilizoboreshwa, kama nyaraka za uwezo wa x86 inavyoeleza. AES-NI ni mojawapo ya uwezo ulioandikwa nyuma ya usambazaji huo. Hakuna chochote katika hili kinachohitaji maktaba iwe sehemu ya kernel.
Thibitisha kwamba sifa hiyo inaonekana kwa mchakato kabla ya kudhani njia ya haraka inatumiwa. Kwenye Linux chanzo ni uwanja wa flags katika /proc/cpuinfo, na ndani ya mgeni huakisi kile hypervisor inaonyesha na si jina la modeli la mwenyeji halisi.
grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verboseAmri ya pili inataja watoa huduma waliopakiwa katika build hiyo. Haikwambii ni maktaba ipi huduma ya VPN iliunganisha, na mwenyeji mmoja anaweza kubeba usakinishaji mbili za OpenSSL wakati mchakato unaoendesha unatumia moja tu.
Mhimili wa pili: njia ya pakiti inafanya kazi wapi
Kuwa kwenye kernel kunamaanisha mabadiliko hufanyika katika mashine ya IPsec ya kernel yenyewe au ndani ya kiendeshi cha handaki ndani ya kernel, kwa hivyo pakiti hazihitaji safari ya kwenda na kurudi kupitia mchakato wa nafasi ya mtumiaji kwa kila kundi. Hii inaweza kupunguza nakala na mabadiliko ya muktadha, na kueneza kazi kwenye cores kwa njia ambayo daemon ya uzi mmoja haiwezi. Pia huhamisha vihesabu na athari ambazo utasoma wakati upitishaji unapungua, kwa sababu kazi sasa inafanyika upande wa pili wa mpaka ambao haudhibiti. Chukulia hilo kama gharama ya utatuzi wa hitilafu, si uamuzi wa utendaji pekee.
Haitekei usaidizi wa maagizo, haisanidi cipher na haifanyi njia iliyopo kufanya kazi.
Uboreshaji wa mtandao wa kawaida huongeza mkunjo kwenye mhimili huu pia. Mgeni anaweza kupewa modeli ya CPU iliyofichwa inayoficha sifa ambazo mwenyeji anazo, na mgeni aliye ndani anaweza kuona kidogo zaidi. Soma mwonekano wa uwezo kutoka ndani ya mazingira ambayo VPN inaendesha kweli, si kutoka konsoli ya hypervisor.
Kila chaguo hununua nini, na kile kisichoweza
Swali la kivitendo ni wapi muda unaenda. Ikiwa uzi mmoja wenye shughuli, nakala za buffer zinazorudiwa au mwito wa mfumo kwa kila pakiti unazuia upitishaji, kuhamisha mabadiliko kwenye njia inayoondoa gharama hizo kunaweza kusaidia, mradi kernel itekeleze mabadiliko unayohitaji.
Ikiwa kikomo ni kiungo cha juu kilichojaa, njia yenye upotevu, muda mrefu wa kwenda na kurudi, huduma ya lengwa iliyojaa au uzi mmoja uliobandikwa kwenye core moja, mahali hakubadilishi kitu chochote cha maana. Ndivyo ilivyo kwa uchaguzi wa maagizo: AES kwenye maunzi maalum haiwezi kurekebisha njia inayokosekana na haitasaidia ikiwa handaki halifanyi kazi kwa sababu utatuzi wa majina unashindikana.
Mahali zote mbili zinatumika, zinaungana. Njia ya kernel inaweza kutumia usambazaji huo wa kiwango cha maagizo ndani ya API ya crypto ya kernel, na njia ya nafasi ya mtumiaji yenye maktaba iliyochaguliwa vizuri tayari inaitumia. Uamuzi si ipi iliyo haraka kwa njia ya kufikirika; ni kwa gharama ipi unayo ushahidi.
Andika ukweli nne kabla ya kubadilisha kitu
Andika binary ya huduma na maktaba ya crypto iliyounganishwa nayo, kwa sababu hizo huamua mhimili wa kwanza. Kisha andika ulinzi wa data uliokubaliwa, kwa sababu cipher isiyo na njia maalum ya maagizo hujiendesha tofauti na iliyo nayo, na seti huchaguliwa na pande zote mbili.
Kisha, mwonekano wa uwezo kutoka ndani ya mazingira yanayoendesha, na mwisho njia hai ya pakiti pamoja na ushahidi kwamba hali unayofikiri imewashwa kweli ni hiyo. Moduli iliyopakiwa si ushahidi kwamba profaili inaitumia, na mstari wa usanidi si ushahidi kwamba kernel iliikubali.
Badilisha kitu kimoja, kisha linganisha na mzigo wa kazi thabiti wenye ncha zile zile na mwelekeo ule ule wa uhamishaji. Dai la kasi ambalo hukulipima lina thamani ndogo kuliko kidokezo kinachosema kwamba backend haikuwa kamwe kwenye shaka.