Oracle ma do powiedzenia na temat Java 8 w odniesieniu do AES-NI: intrinsicsWewnętrzne elementy AES-NI są domyślnie włączone?
sprzętowe zostały dodane do korzystania Advanced Encryption Standard (AES). Flagi UseAES i UseAESIntrinsics są dostępne, aby umożliwić sprzętową integrację AES dla sprzętu Intela. Sprzęt musi być 2010 lub nowszym sprzętem Westmere. Na przykład, aby umożliwić AES sprzętowych, należy użyć następujących znaczników:
-XX:+UseAES -XX:+UseAESIntrinsics
Aby wyłączyć AES sprzętowe użyć następujących znaczników:
-XX:-UseAES -XX:-UseAESIntrinsics
Ale to nie wskazują, czy intrinsics AES są włączone domyślny (dla procesorów, które go obsługują). Pytanie jest więc proste: czy procesor obsługuje AES-NI, czy używane są elementy wewnętrzne AES?
Pytanie dodatkowe: czy istnieje sposób sprawdzenia, czy używane jest AES-NI? Domyślam się, że możesz zgadnąć na podstawie wyników, ale nie jest to optymalny lub pewny sposób testowania ogniowego.
dla czytelników, które nie są zaznajomieni z intrinsics AES-NI: To zastępujących kod bajtowy z pre-kompilowane kodu maszynowego, stosując zestaw instrukcji AES-NI. Dzieje się tak przez maszynę JVM, więc nie pojawia się w interfejsie API środowiska wykonawczego Java ani kodu bajtowego.
AES CBC ma charakter ściśle liniowy, więc wiele rdzeni nie ma znaczenia (i oczywiście uruchamiam z włączonym harmonogramem zadań lub top). Ponadto na i5 wyraźnie widzę, że nie ma różnicy w odniesieniu do wydajności, włączonej lub wyłączonej. Na koniec wydaje się, że stare sprawdzenie dodatkowych instrukcji dotyczących procesora zostało naprawione w raporcie o błędzie. Nie widzę niczego rozstrzygającego, aby zobaczyć, dlaczego starszy procesor nie jest obsługiwany. Z 7-krotnym wzrostem: była to Java 8 działająca na 32-bitowym i nowszym i7-bitowym i5. Wciąż ogromny wzrost dla bajtów tej samej klasy :) –
Aha i i7 wydawało się, że wykonuje około 2x prędkość i5 dla zwykłych aplikacji (testowałem specjalnie kompilację C++), która jest znacznie szybsza, ale nie 7-krotna luka przez długa droga. Zauważ, że 64-bitowe zoptymalizowane aplikacje mogą uzyskać * dodatkowe * przyspieszenie. Te nowsze procesory robią różnicę, jak sądzę. –
OK. Ma sens. W moich własnych testach flagi AES nie wydają się być honorowane. Bez względu na to, czy włączam, czy wyłączam flagi, czasy wykonania są takie same. Tak więc, jeśli potrzebujemy rzeczywistej różnicy wprowadzonej przez obsługę CPU, możemy potrzebować identycznych procesorów - jednego z wyłączonym AES-NI i innego włączonego. Jeden facet ma tutaj interesujące wyniki (nie java), a jądro wyłącza AES-NI: https://ask.fedoraproject.org/en/question/29298/how-can-i-verify-that-my-luks-will -utilize-aes-ni-encryption-support-in-my-system/ Jego wyniki są bardzo bliskie twojemu (7x w wielu przypadkach) – user30622