Dua label digunakan seolah-olah kedua-duanya sama: dipercepatkan perkakasan dan di-offload ke kernel. Satu menerangkan arahan mana yang dilaksanakan oleh rutin AES sesebuah pustaka, satu lagi menerangkan di mana pemprosesan paket berlaku. Sesebuah VPN boleh mempunyai yang pertama tanpa yang kedua, yang kedua tanpa yang pertama, atau kedua-duanya sekali. Apa-apa keputusan tentang prestasi mesti bermula dengan menamakan yang mana antara keduanya yang benar-benar anda ubah.

Dua paksi, bukan satu skor

Paksi pertama ialah pelaksanaan: adakah kod yang melakukan AES-256-GCM dihalakan ke versi yang menggunakan arahan khusus pemproses atau ke rutin mudah alih yang melaksanakannya sebagai aritmetik biasa. Pilihan itu hidup di dalam pustaka kriptografi dan dibuat apabila ia dimulakan.

Paksi kedua ialah penempatan: adakah paket melalui laluan transformasi kernel atau daemon dalam ruang pengguna membaca daripada peranti terowong, menyulitkan dan menulis semula.

Tiada paksi mengekang yang lain. VPN dalam ruang pengguna pada CPU dengan arahan AES boleh menggunakannya sepanjang masa, dan laluan kernel pada CPU tanpanya kembali kepada pelaksanaan perisian. Label dalam bahan vendor jarang membuat perbezaan itu, sebab itulah nasihat penalaan yang disalin antara dua situasi begitu kerap tidak melakukan apa-apa.

Paksi satu: kod mana yang melakukan penyulitan

OpenSSL mengesan ciri pemproses semasa pemulaan dan menggunakan hasilnya untuk memilih laluan kod yang dioptimumkan, seperti yang diterangkan oleh dokumentasi keupayaan x86. AES-NI ialah salah satu keupayaan berdokumen di sebalik penghalakan itu. Tiada satu pun daripada ini memerlukan pustaka menjadi komponen kernel.

Sahkan ciri itu kelihatan kepada proses sebelum menganggap laluan pantas digunakan. Pada Linux sumbernya ialah medan flags dalam /proc/cpuinfo, dan di dalam tetamu ia mencerminkan apa yang didedahkan oleh hypervisor dan bukan nama model hos fizikal.

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

Arahan kedua menamakan penyedia yang dimuatkan dalam binaan itu. Ia tidak memberitahu pustaka mana yang dipautkan oleh perkhidmatan VPN, dan satu hos boleh membawa dua pemasangan OpenSSL manakala proses yang berjalan hanya menggunakan satu daripadanya.

Paksi dua: di mana laluan paket berjalan

Penempatan dalam kernel bermakna transformasi berlaku dalam jentera IPsec kernel itu sendiri atau di dalam pemacu terowong dalam kernel, jadi paket tidak memerlukan perjalanan pergi balik melalui proses ruang pengguna untuk setiap kelompok. Ini boleh mengurangkan salinan dan pertukaran konteks, dan menyebarkan kerja merentas teras dengan cara yang tidak mampu dilakukan oleh daemon satu utas. Ia juga memindahkan pembilang dan surih yang akan anda baca apabila daya pemprosesan menurun, kerana kerja kini berlaku di sebelah sana sempadan yang anda tidak kawal. Anggap itu kos nyahpepijat, bukan sekadar keputusan prestasi.

Ia tidak mencipta sokongan arahan, tidak mengkonfigurasi sifer dan tidak menjadikan laluan sedia ada berfungsi.

Virtualisasi menambah lipatan pada paksi ini juga. Tetamu boleh diberi model CPU bertopeng yang menyembunyikan ciri yang ada pada hos, dan tetamu bersarang boleh melihat lebih sedikit lagi. Baca paparan keupayaan dari dalam persekitaran tempat VPN benar-benar berjalan, bukan dari konsol hypervisor.

Apa yang dibeli setiap pilihan, dan apa yang tidak mampu

Soalan praktikalnya ialah ke mana masa pergi. Jika satu utas sibuk, salinan penimbal berulang atau panggilan sistem bagi setiap paket mengehadkan daya pemprosesan, memindahkan transformasi ke laluan yang menghapuskan kos itu boleh membantu, asalkan kernel melaksanakan transformasi yang anda perlukan.

Jika hadnya ialah pautan atas yang sesak, laluan yang rugi, masa pergi balik yang panjang, perkhidmatan destinasi yang tepu atau satu utas yang dipaku pada satu teras, penempatan tidak mengubah apa-apa yang penting. Perkara yang sama berlaku untuk pemilihan arahan: AES pada perkakasan khusus tidak boleh membaiki laluan yang hilang dan tidak akan membantu jika terowong terbiar kerana penyelesaian nama gagal.

Di tempat kedua-duanya terpakai, ia bergabung. Laluan kernel boleh menggunakan penghalakan peringkat arahan yang sama di dalam API kripto kernel, dan laluan ruang pengguna dengan pustaka yang dipilih dengan baik sudah menggunakannya. Keputusan bukan yang mana lebih pantas secara abstrak; iaitu kos mana yang anda ada bukti.

Catat empat fakta sebelum mengubah apa-apa

Tulis binari perkhidmatan dan pustaka kriptografi yang dipautkannya, kerana itu yang menentukan paksi satu. Kemudian catat perlindungan data yang dirundingkan, kerana sifer tanpa laluan arahan khusus berkelakuan berbeza daripada yang memilikinya, dan sut itu dipilih oleh kedua-dua pihak.

Seterusnya, paparan keupayaan dari dalam persekitaran yang berjalan, dan akhir sekali laluan paket aktif dengan bukti bahawa mod yang anda fikirkan diaktifkan memang begitu. Modul yang dimuatkan bukan bukti bahawa sesuatu profil menggunakannya, dan baris konfigurasi bukan bukti bahawa kernel menerimanya.

Ubah satu perkara, kemudian bandingkan dengan beban kerja yang konsisten dengan titik akhir dan arah pemindahan yang sama. Dakwaan kelajuan yang anda tidak ukur bernilai kurang daripada nota yang menyatakan backend tidak pernah diragui.

Artikel berkaitan