首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过getauxval检测Power8核心密码?

通过getauxval检测Power8核心密码?
EN

Stack Overflow用户
提问于 2017-09-10 19:22:40
回答 1查看 312关注 0票数 3

我在GCC112上,这是一台运行Linux的小型终端Power8机器。Power8有核心密码提供AES、SHA和其他一些有用的特性。我试图使用getauxval在运行时确定这些特性的可用性。用例是为“最低”能力的机器构建的发行版,我们需要在运行时换一个更快的函数。

hwcaps.h的转储如下所示,但是它缺乏Power8、AES、SHA和其他特定的位。然而,我相信Power8是ISA 2.07,而ISA 2.07有位PPC_FEATURE2_ARCH_2_07

我不清楚的是,Power8的核心密码是可选的,就像ARMv8下的ARM密码。我找不到明确说明需求的文档,我也没有访问OpenPower文档的成员资格。(另一种可能是,它被声明了,但我在文档中漏掉了)。

是否可以使用getauxval查询运行时环境中的特性?如果没有,那么如何在运行时确定特性可用性?CPU探测是唯一可用的选择吗?

也许更广泛地说,我们如何确定Power6、Power7和Power8运行时环境?

auxv.h大多是空的。头文件包括hwcaps.h

代码语言:javascript
运行
复制
$ cat /usr/include/bits/hwcap.h
...

/* The bit numbers must match those in the kernel's asm/cputable.h.  */

/* Feature definitions in AT_HWCAP.  */
#define PPC_FEATURE_32              0x80000000 /* 32-bit mode. */
#define PPC_FEATURE_64              0x40000000 /* 64-bit mode. */
#define PPC_FEATURE_601_INSTR       0x20000000 /* 601 chip, Old POWER ISA.  */
#define PPC_FEATURE_HAS_ALTIVEC     0x10000000 /* SIMD/Vector Unit.  */
#define PPC_FEATURE_HAS_FPU         0x08000000 /* Floating Point Unit.  */
#define PPC_FEATURE_HAS_MMU         0x04000000 /* Memory Management Unit.  */
#define PPC_FEATURE_HAS_4xxMAC      0x02000000 /* 4xx Multiply Accumulator.  */
#define PPC_FEATURE_UNIFIED_CACHE   0x01000000 /* Unified I/D cache.  */
#define PPC_FEATURE_HAS_SPE         0x00800000 /* Signal Processing ext.  */
#define PPC_FEATURE_HAS_EFP_SINGLE  0x00400000 /* SPE Float.  */
#define PPC_FEATURE_HAS_EFP_DOUBLE  0x00200000 /* SPE Double.  */
#define PPC_FEATURE_NO_TB           0x00100000 /* 601/403gx have no timebase */
#define PPC_FEATURE_POWER4          0x00080000 /* POWER4 ISA 2.00 */
#define PPC_FEATURE_POWER5          0x00040000 /* POWER5 ISA 2.02 */
#define PPC_FEATURE_POWER5_PLUS     0x00020000 /* POWER5+ ISA 2.03 */
#define PPC_FEATURE_CELL_BE         0x00010000 /* CELL Broadband Engine */
#define PPC_FEATURE_BOOKE           0x00008000 /* ISA Category Embedded */
#define PPC_FEATURE_SMT             0x00004000 /* Simultaneous
                                                  Multi-Threading */
#define PPC_FEATURE_ICACHE_SNOOP    0x00002000
#define PPC_FEATURE_ARCH_2_05       0x00001000 /* ISA 2.05 */
#define PPC_FEATURE_PA6T            0x00000800 /* PA Semi 6T Core */
#define PPC_FEATURE_HAS_DFP         0x00000400 /* Decimal FP Unit */
#define PPC_FEATURE_POWER6_EXT      0x00000200 /* P6 + mffgpr/mftgpr */
#define PPC_FEATURE_ARCH_2_06       0x00000100 /* ISA 2.06 */
#define PPC_FEATURE_HAS_VSX         0x00000080 /* P7 Vector Extension.  */
#define PPC_FEATURE_PSERIES_PERFMON_COMPAT  0x00000040
#define PPC_FEATURE_TRUE_LE         0x00000002
#define PPC_FEATURE_PPC_LE          0x00000001

/* Feature definitions in AT_HWCAP2.  */
#define PPC_FEATURE2_ARCH_2_07     0x80000000 /* ISA 2.07 */
#define PPC_FEATURE2_HAS_HTM       0x40000000 /* Hardware Transactional
                                                 Memory */
#define PPC_FEATURE2_HAS_DSCR      0x20000000 /* Data Stream Control
                                                 Register */
#define PPC_FEATURE2_HAS_EBB       0x10000000 /* Event Base Branching */
#define PPC_FEATURE2_HAS_ISEL      0x08000000 /* Integer Select */
#define PPC_FEATURE2_HAS_TAR       0x04000000 /* Target Address Register */
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 06:40:43

我要说的是,getauxval()是最好的方法;HWCAPHWCAP2值正是用来确定硬件特性的。列表中缺少的是PPC_FEATURE2_VEC_CRYPTO,它表示矢量密码指令的存在,听起来就像你需要的那样。

顺便提一句:您可能不希望检测处理器实现,而是希望检测处理器特性。具体而言,检查单个特性,而不是尝试检查提供该功能的进程。(例如,直接检测VEC_CRYPTO,而不是试图检查POWER8,并假定这意味着密码功能)。

作为一些细节,Linux的cputable条目指定了HWCAP/HWCAP2值。以POWER8为例:

代码语言:javascript
运行
复制
#define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \
                 PPC_FEATURE2_HTM_COMP | \
                 PPC_FEATURE2_HTM_NOSC_COMP | \
                 PPC_FEATURE2_DSCR | \
                 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
                 PPC_FEATURE2_VEC_CRYPTO)

这来自内核中的arch/powerpc/include/asm/cputable.h (它还提供了可以在aux向量中设置的实际hwcap )。

最后,我很肯定你不需要成为OpenPOWER基金会成员就可以下载ISA (最新的是3.0B) --你只需要在网站上注册一个帐户。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46144668

复制
相关文章

相似问题

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