Дзве назвы ўжываюцца так, нібыта гэта адно і тое ж: апаратна паскораны і вынесены ў ядро. Першая апісвае, якія інструкцыі выконвае AES-працэдура бібліятэкі, другая — дзе адбываецца апрацоўка пакетаў. VPN можа мець першую без другой, другую без першай або абедзве адначасова. Любое рашэнне пра прадукцыйнасць павінна пачынацца з таго, якую з дзвюх вы насамрэч змяняеце.

Дзве восі, а не адзін бал

Першая вось — рэалізацыя: ці код, які выконвае AES-256-GCM, пераходзіць да версіі, што ўжывае спецыялізаваныя інструкцыі працэсара, ці да пераноснай працэдуры, якая выконвае іх як звычайную арыфметыку. Гэты выбар жыве ўнутры крыптаграфічнай бібліятэкі і робіцца пры яе ініцыялізацыі.

Другая вось — размяшчэнне: ці пакет праходзіць праз шлях пераўтварэння ядра, ці дэман у прасторы карыстальніка чытае з тунельнага прыстасавання, шыфруе і запісвае назад.

Ні адна вось не абмяжоўвае другую. VPN у прасторы карыстальніка на працэсары з інструкцыямі AES можа ўжываць іх увесь час, а шлях праз ядро на працэсары без іх вяртаецца да праграмнай рэалізацыі. Назвы ў матэрыялах пастаўшчыкоў рэдка робяць гэтае размежаванне, таму парады па наладцы, перанесеныя паміж дзвюма сітуацыямі, часта не даюць нічога.

Вось першая: які код выконвае шыфраванне

OpenSSL выяўляе асаблівасці працэсара падчас ініцыялізацыі і ўжывае вынік, каб выбраць аптымізаваныя шляхі кода, як апісвае дакументацыя магчымасцяў x86. AES-NI — адна з дакументаваных магчымасцяў за гэтым размеркаваннем. Нішто з гэтага не патрабуе, каб бібліятэка стала кампанентам ядра.

Пераканайцеся, што асаблівасць бачная працэсу, перш чым меркаваць, што хуткі шлях ужыты. У Linux крыніцай з’яўляецца поле flags у /proc/cpuinfo, а ўнутры гасцявой сістэмы яно адлюстроўвае тое, што паказвае гіпервізар, а не назву мадэлі фізічнага хоста.

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

Другая каманда называе пастаўшчыкоў, загружаных у гэтай зборцы. Яна не кажа, якую бібліятэку сканчаў сэрвіс VPN, і адзін хост можа несці дзве ўсталёўкі OpenSSL, хаця працэс выкарыстоўвае толькі адну з іх.

Вось другая: дзе працуе шлях пакета

Размяшчэнне ў ядры азначае, што пераўтварэнне адбываецца ў механізме IPsec самога ядра або ў драйверы тунеля ўнутры ядра, таму пакетам не патрэбна падарожжа туды і назад праз працэс у прасторы карыстальніка для кожнай порцыі. Гэта можа скараціць капіраванні і пераключэнні кантэксту і размеркаваць працу па ядрах так, як гэтага не можа адзіны паток дэмана. Яно таксама пераносіць лічыльнікі і трасіроўкі, якія вы будзеце чытаць, калі прапускная здольнасць падае, бо праца цяпер адбываецца па іншы бок мяжы, якую вы не кантралюеце. Разглядайце гэта як выдатак на адладку, а не толькі як рашэнне пра прадукцыйнасць.

Яно не стварае падтрымку інструкцый, не наладжвае шыфр і не робіць працоўным існуючы маршрут.

Віртуалізацыя дадае зморшку і на гэтую вось. Госцю могуць даць замаскіраваную мадэль працэсара, якая хавае асаблівасці хоста, а ўкладзены госць можа бачыць яшчэ менш. Чытайце від магчымасцяў знутры асяроддзя, дзе VPN сапраўды працуе, а не з кансолі гіпервізара.

Што кожны выбар дае і чаго не можа

Практычнае пытанне — куды сыходзіць час. Калі прапускную здольнасць абмяжоўвае адзін заняты паток, паўторныя капіраванні буфера або сістэмны выклік на кожны пакет, перанос пераўтварэння ў шлях, які прыбірае гэтыя выдаткі, можа дапамагчы, пры ўмове, што ядро рэалізуе патрэбнае вам пераўтварэнне.

Калі ж абмежаваннем з’яўляецца перагружаны ўзыходны канал, шлях са стратамі, доўгі час кругавога шляху, насычаны сэрвіс прызначэння або адзін паток, прымацаваны да аднаго ядра, размяшчэнне не змяняе нічога важнага. Тое ж датычыцца выбару інструкцый: AES на спецыялізаваным абсталяванні не выправіць адсутны маршрут і не дапаможа, калі тунель прастойвае праз няўдалае развязанне імёнаў.

Там, дзе дзейнічаюць абодва, яны спалучаюцца. Шлях праз ядро можа ўжываць тое ж размеркаванне на ўзроўні інструкцый унутры крыптаграфічнага API ядра, а шлях у прасторы карыстальніка з добра выбранай бібліятэкай ужо ўжывае яго. Рашэнне не пра тое, які з іх хутчэйшы ў абстракцыі; яно пра тое, для якога выдатку ў вас ёсць доказ.

Запішыце чатыры факты, перш чым нешта змяняць

Запішыце бінарны файл сэрвісу і крыптаграфічную бібліятэку, з якой ён сканчаны, бо менавіта яны вызначаюць першую вось. Затым запішыце ўзгоджаную абарону даных, бо шыфр без спецыяльнага шляху інструкцый паводзіць сябе інакш, чым з ім, і набор выбіраюць абодва бакі.

Далей — від магчымасцяў знутры працуючага асяроддзя, і нарэшце актыўны шлях пакета з доказам, што рэжым, які вы лічыце ўключаным, сапраўды такі. Загружаны модуль не доказ таго, што профіль яго ўжывае, а радок канфігурацыі не доказ таго, што ядро яго прыняло.

Змяніце адну рэч, потым параўнайце з паслядоўнай нагрузкай з тымі ж канчатковымі пунктамі і тым жа кірункам перадачы. Заява пра хуткасць, якую вы не мералі, каштуе менш за нататку, што бэкенд ніколі не быў пад сумневам.

Падобныя артыкулы