Dua label dipakai seolah-olah keduanya sama: dipercepat perangkat keras dan di-offload ke kernel. Yang satu menjelaskan instruksi mana yang dijalankan rutin AES sebuah pustaka, yang lain menjelaskan di mana pemrosesan paket terjadi. Sebuah VPN bisa memiliki yang pertama tanpa yang kedua, yang kedua tanpa yang pertama, atau keduanya sekaligus. Setiap keputusan tentang kinerja harus dimulai dengan menyebutkan mana dari keduanya yang benar-benar Anda ubah.

Dua sumbu, bukan satu skor

Sumbu pertama adalah implementasi: apakah kode yang menjalankan AES-256-GCM diarahkan ke versi yang memakai instruksi khusus prosesor atau ke rutin portabel yang menjalankannya sebagai aritmetika biasa. Pilihan itu hidup di dalam pustaka kriptografi dan dibuat saat pustaka itu diinisialisasi.

Sumbu kedua adalah penempatan: apakah paket melewati jalur transformasi kernel atau sebuah daemon di ruang pengguna membaca dari perangkat terowongan, mengenkripsi, dan menulis kembali.

Tidak ada sumbu yang membatasi yang lain. VPN di ruang pengguna pada CPU dengan instruksi AES dapat memakainya sepanjang waktu, dan jalur kernel pada CPU tanpanya kembali ke implementasi perangkat lunak. Label pada materi vendor jarang membuat pembedaan itu, karena itulah saran penyetelan yang disalin antara dua situasi begitu sering tidak melakukan apa pun.

Sumbu satu: kode mana yang melakukan enkripsi

OpenSSL mendeteksi fitur prosesor selama inisialisasi dan memakai hasilnya untuk memilih jalur kode yang dioptimalkan, seperti dijelaskan dokumentasi kemampuan x86. AES-NI adalah salah satu kemampuan terdokumentasi di balik pengiriman itu. Tidak ada dari ini yang menuntut pustaka menjadi komponen kernel.

Pastikan fitur itu terlihat oleh proses sebelum menganggap jalur cepat dipakai. Di Linux sumbernya adalah bidang flags di /proc/cpuinfo, dan di dalam tamu ia mencerminkan apa yang diekspos hypervisor, bukan nama model host fisik.

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

Perintah kedua menyebutkan penyedia yang dimuat dalam build itu. Ia tidak memberi tahu pustaka mana yang ditautkan layanan VPN, dan satu host dapat membawa dua instalasi OpenSSL sementara proses yang berjalan hanya memakai salah satunya.

Sumbu dua: di mana jalur paket berjalan

Penempatan di kernel berarti transformasi terjadi di mesin IPsec kernel itu sendiri atau di dalam pengandar terowongan di kernel, sehingga paket tidak perlu perjalanan pulang-pergi melalui proses ruang pengguna untuk setiap kumpulan. Itu dapat memangkas salinan dan pergantian konteks, dan menyebarkan pekerjaan ke inti-inti dengan cara yang tidak bisa dilakukan daemon satu utas. Ia juga memindahkan penghitung dan jejak yang akan Anda baca saat throughput turun, karena pekerjaan kini terjadi di sisi lain batas yang tidak Anda kendalikan. Anggap itu biaya penelusuran kesalahan, bukan hanya keputusan kinerja.

Ia tidak membuat dukungan instruksi, tidak mengonfigurasi cipher, dan tidak membuat rute yang ada menjadi berfungsi.

Virtualisasi menambah lipatan pada sumbu ini juga. Tamu dapat diberi model CPU bertopeng yang menyembunyikan fitur yang dimiliki host, dan tamu bersarang bisa melihat lebih sedikit lagi. Bacalah tampilan kemampuan dari dalam lingkungan tempat VPN benar-benar berjalan, bukan dari konsol hypervisor.

Apa yang dibeli setiap pilihan, dan apa yang tidak bisa

Pertanyaan praktisnya adalah ke mana waktu pergi. Jika satu utas sibuk, salinan buffer berulang, atau panggilan sistem per paket membatasi throughput, memindahkan transformasi ke jalur yang menghapus biaya itu dapat membantu, asalkan kernel menerapkan transformasi yang Anda butuhkan.

Jika batasnya adalah uplink yang padat, jalur dengan kehilangan, waktu pulang-pergi yang panjang, layanan tujuan yang jenuh, atau satu utas yang dipatok ke satu inti, penempatan tidak mengubah apa pun yang penting. Hal yang sama berlaku untuk pemilihan instruksi: AES pada perangkat keras khusus tidak dapat memperbaiki rute yang hilang dan tidak akan membantu jika terowongan menganggur karena resolusi nama gagal.

Di tempat keduanya berlaku, keduanya saling melengkapi. Jalur kernel dapat memakai pengiriman tingkat instruksi yang sama di dalam API kripto kernel, dan jalur ruang pengguna dengan pustaka yang dipilih baik sudah memakainya. Keputusannya bukan mana yang lebih cepat secara abstrak; melainkan biaya mana yang Anda punya buktinya.

Catat empat fakta sebelum mengubah apa pun

Tuliskan biner layanan dan pustaka kriptografi yang ditautkannya, karena keduanya menentukan sumbu satu. Lalu catat perlindungan data yang dinegosiasikan, karena cipher tanpa jalur instruksi khusus berperilaku berbeda dari yang memilikinya, dan suite dipilih oleh kedua pihak.

Berikutnya, tampilan kemampuan dari dalam lingkungan yang berjalan, dan terakhir jalur paket aktif dengan bukti bahwa mode yang Anda anggap aktif memang demikian. Modul yang dimuat bukan bukti bahwa profil memakainya, dan baris konfigurasi bukan bukti bahwa kernel menerimanya.

Ubah satu hal, lalu bandingkan dengan beban kerja yang konsisten dengan titik akhir dan arah transfer yang sama. Klaim kecepatan yang tidak Anda ukur bernilai lebih rendah daripada catatan bahwa backend tidak pernah diragukan.

Artikel terkait