OpenSSL@APOS@de AES-NI mi çekirdeğe devretme mi: hangisi gerekli?
CPU komut desteğini paketlerin işlendiği yerden ayırın: ayar yapmadan önce kripto arka ucunu, anlaşılan şifreleme yöntemini ve etkin yolu denetleyin.
İki etiket sanki aynı şeymiş gibi kullanılıyor: donanımla hızlandırılmış ve çekirdeğe devredilmiş. Biri bir kitaplığın AES yordamının hangi komutları yürüttüğünü, diğeri paket işlemenin nerede gerçekleştiğini anlatır. Bir VPN birincisine ikincisi olmadan, ikincisine birincisi olmadan ya da ikisine birden sahip olabilir. Performansla ilgili her karar, bu ikisinden hangisini gerçekten değiştirdiğinizi adlandırmakla başlamalıdır.
İki eksen, tek bir puan değil
Birinci eksen uygulamadır: AES-256-GCM yapan kod, işlemcinin özel komutlarını kullanan sürüme mi yoksa bunları sıradan aritmetik olarak yürüten taşınabilir bir yordama mı yönlendiriliyor. Bu seçim kriptografik kitaplığın içinde yaşar ve kitaplık ilklenirken yapılır.
İkinci eksen yerleşimdir: paket çekirdeğin dönüşüm yolundan mı geçiyor, yoksa kullanıcı alanındaki bir artalan süreci tünel aygıtından okuyup şifreleyip geri mi yazıyor.
Hiçbir eksen diğerini kısıtlamaz. AES komutları olan bir CPU üzerindeki kullanıcı alanı VPN’i bunları sürekli kullanabilir; bu komutlar olmayan bir CPU üzerindeki çekirdek yolu ise yazılım uygulamasına geri döner. Satıcı belgelerindeki etiketler bu ayrımı nadiren yapar; bu yüzden iki durum arasında kopyalanan ayar önerileri çoğu zaman hiçbir şey yapmaz.
Birinci eksen: şifrelemeyi hangi kod yapıyor
OpenSSL ilklenme sırasında işlemci özelliklerini algılar ve sonucu iyileştirilmiş kod yollarını seçmek için kullanır; x86 yetenekleri belgesi bunu açıklar. AES-NI bu yönlendirmenin arkasındaki belgelenmiş yeteneklerden biridir. Bunların hiçbiri kitaplığın çekirdek bileşeni olmasını gerektirmez.
Hızlı yolun kullanıldığını varsaymadan önce özelliğin süreç tarafından görülebildiğini doğrulayın. Linux’ta kaynak /proc/cpuinfo içindeki flags alanıdır ve bir konuk içinde hiper yöneticinin açığa çıkardığını yansıtır, fiziksel ana makinenin model adını değil.
grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verboseİkinci komut o derlemede yüklenen sağlayıcıları adlandırır. VPN hizmetinin hangi kitaplığa bağlandığını söylemez ve bir ana makine iki OpenSSL kurulumu taşıyabilirken çalışan süreç bunlardan yalnızca birini kullanıyor olabilir.
İkinci eksen: paket yolu nerede çalışıyor
Çekirdeğe yerleştirmek, dönüşümün çekirdeğin kendi IPsec mekanizmasında ya da çekirdek içindeki tünel sürücüsünde gerçekleşmesi demektir; böylece paketler her yığın için kullanıcı alanı sürecinden gidip gelmek zorunda kalmaz. Bu, kopyaları ve bağlam değiştirmeleri azaltabilir ve işi tek iş parçacıklı bir artalan sürecinin yapamayacağı biçimde çekirdeklere yayabilir. Ayrıca, iş artık denetlemediğiniz bir sınırın diğer tarafında gerçekleştiği için, verim düştüğünde okuyacağınız sayaçları ve izleri de taşır. Bunu yalnızca performans kararı değil, hata ayıklama maliyeti olarak görün.
Komut desteği oluşturmaz, şifreleme yöntemi yapılandırmaz ve var olan bir yolu çalışır hale getirmez.
Sanallaştırma bu eksende de bir kıvrım ekler. Bir konuğa ana makinenin sahip olduğu özellikleri gizleyen maskelenmiş bir CPU modeli verilebilir ve iç içe konuk daha da azını görebilir. Yetenek görünümünü VPN’in gerçekten çalıştığı ortamın içinden okuyun, hiper yönetici konsolundan değil.
Her seçim ne satın alır ve ne yapamaz
Pratik soru zamanın nereye gittiğidir. Verimi tek bir meşgul iş parçacığı, yinelenen tampon kopyaları ya da paket başına bir sistem çağrısı sınırlıyorsa, dönüşümü bu maliyetleri ortadan kaldıran bir yola taşımak yardımcı olabilir; yeter ki çekirdek gereksinim duyduğunuz dönüşümü uygulasın.
Sınır tıkanmış bir yukarı bağlantı, kayıplı bir yol, uzun gidiş dönüş süresi, doymuş bir hedef hizmet ya da tek bir çekirdeğe sabitlenmiş tek bir iş parçacığıysa, yerleşim önemli hiçbir şeyi değiştirmez. Aynısı komut seçimi için de geçerlidir: özel donanımdaki AES eksik bir yolu onaramaz ve ad çözümlemesi başarısız olduğu için tünel boştaysa yardımcı olmaz.
İkisinin de geçerli olduğu yerde birbirlerini tamamlarlar. Çekirdek yolu, çekirdeğin kripto API’si içinde aynı komut düzeyi yönlendirmeyi kullanabilir; iyi seçilmiş bir kitaplığa sahip kullanıcı alanı yolu ise onu zaten kullanır. Karar, soyut olarak hangisinin daha hızlı olduğu değil, hangi maliyet için kanıtınız olduğudur.
Bir şeyi değiştirmeden önce dört olguyu yazın
Hizmetin ikili dosyasını ve bağlandığı kripto kitaplığını yazın, çünkü bunlar birinci ekseni belirler. Ardından anlaşılan veri korumasını kaydedin, çünkü özel komut yolu olmayan bir şifreleme yöntemi olanla farklı davranır ve paket her iki tarafça seçilir.
Sonra, çalışan ortamın içinden yetenek görünümü ve son olarak, etkin olduğunu düşündüğünüz kipin gerçekten öyle olduğuna dair kanıtla birlikte etkin paket yolu. Yüklenmiş bir modül, bir profilin onu kullandığının kanıtı değildir; bir yapılandırma satırı da çekirdeğin onu kabul ettiğinin kanıtı değildir.
Tek bir şeyi değiştirin ve ardından aynı uç noktalar ve aynı aktarım yönüyle tutarlı bir iş yüküyle karşılaştırın. Ölçmediğiniz bir hız iddiası, arka ucun hiçbir zaman sorgulanmadığını söyleyen bir nottan daha az değerlidir.