首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在默认情况下启用AES-NI本质?

在默认情况下启用AES-NI本质?
EN

Stack Overflow用户
提问于 2014-04-14 10:56:39
回答 2查看 21.2K关注 0票数 32

关于AES-NI,Oracle对Java 8有这样的看法:

硬件本质被添加到使用高级加密标准(AES)。UseAES和UseAESIntrinsics标志可用于为Intel硬件启用基于硬件的AES本质。硬件必须是2010年或更新的韦斯特米尔硬件。例如,若要启用硬件AES,请使用以下标志: -XX:+UseAES -XX:+UseAESIntrinsics 若要禁用硬件AES,请使用下列标志: -XX:-UseAES -XX:-UseAESIntrinsics

但它并不表示在默认情况下(对于支持AES的处理器)是否启用了AES本质。所以问题很简单:如果处理器支持AES-NI,那么AES的本质是否被使用?

附加问题:是否有任何方法来测试AES-NI是否被使用?我想您可以根据性能进行猜测,但这并不是一种最佳或肯定的测试方法。

对于不熟悉AES-NI本质的readerS :它使用AES-NI指令集,用预编译的机器代码替换字节代码。这是由JVM实现的,因此它不会出现在Java运行时或字节码的API中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 15:58:38

该标志的默认值为true,如果检测失败,它将被设置为false,因此您可以简单地使用+PrintFlagsFinal来查看是否使用它:

我的笔记本电脑没有 AES-NI:

代码语言:javascript
复制
C:\>"C:\Program Files\Java\jdk1.7.0_51\bin\java" -XX:+PrintFlagsFinal -version | find "UseAES"
     bool UseAES                                    = false           {product}
     bool UseAESIntrinsics                          = false           {product}
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

桌面AES-NI相同:

代码语言:javascript
复制
C:\>"C:\Program Files\Java\jdk7\bin\java" -XX:+PrintFlagsFinal -version | find "AES"
     bool UseAES                                    = true            {product}
     bool UseAESIntrinsics                          = true            {product}

java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

C:\>"C:\Program Files (x86)\Java\jre7\bin\java" -XX:+PrintFlagsFinal -version | find "AES"
     bool UseAES                                    = true            {product}
     bool UseAESIntrinsics                          = true            {product}

java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing)

因此,它既适用于x64和i686 (WOW64),也适用于最近的Java7。该特性是在https://bugs.openjdk.java.net/browse/JDK-7184394中引入的,并支持7u 40和7u 45。

重要事项: AES-NI可能只在服务器VM上可用.

甲骨文在一份错误报告被归档之后承认了这一点。当他们创建Java 8的特性列表时,缺少了这段重要的信息(后来,它也被移植到了7中)。通过在-serverjavaw命令行上提供java选项,可以显式地选择服务器VM。

票数 34
EN

Stack Overflow用户

发布于 2014-04-30 11:49:37

这个来自openjdk的邮件线程说,在默认情况下,所有AES本质都是启用的。虽然我不确定Oracle核心VM代码有多少与openjdk共享。如果您阅读了整个线程,他们也会讨论32位VM上的挑战,这可能解释了您在第二次测试运行时遇到的问题。

  • 关于你的测试,你不认为CPU之间的差异有很大的不同吗?内核i7是四核的,总体上具有更好的时钟速度。那不会有什么区别吗?我猜从21s (核心i5,32位is,AES-NI关闭)到8s (核心i7,64位is,AES-NI关闭)是i5和i7的区别。
  • 从8s提高到3s,虽然不是7倍,但确实值得一试!:)
  • 关于检测机制-似乎没有一个简单的方法。如果启用了标志,如果无法找到AES支持,JVM会抛出一个警告“该CPU上不可用的AES本质”-- 根据这个错误报告
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23058309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档