gpt4 book ai didi

c - 通过 getauxval 检测 Power8 核心加密?

转载 作者:太空狗 更新时间:2023-10-29 11:12:16 27 4
gpt4 key购买 nike

我在 GCC112 上,这是一台运行 Linux 的小端 Power8 机器。 Power8 有 in-core crypto提供 AES、SHA 和其他一些有用的功能。我正在尝试使用 getauxval 确定功能在运行时的可用性。用例是为“最小”能力的机器构建发行版,我们需要在运行时换入更快的功能。

hwcaps.h 的转储如下所示,但它缺少针对 Power8、AES、SHA 等的特定位。但是,我相信 Power8 是 ISA 2.07,而 ISA 2.07 有位 PPC_FEATURE2_ARCH_2_07

我不清楚的是,Power8 内核加密是否像 ARMv8 下的 ARM 加密一样是可选的。我找不到明确说明要求的文档,而且我没有 OpenPower 的成员(member)资格访问 ISA 文档。 (另一种可能性是,有说明但我在文档中遗漏了它)。

是否可以使用 getauxval 查询运行时环境的功能?如果不是,那么我们如何确定运行时的功能可用性? CPU 探测是唯一可用的替代方法吗?

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


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

$ 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 */

最佳答案

我会说 getauxval() 是最好的方法; HWCAPHWCAP2 值正是用于确定硬件特性。您的列表中缺少 PPC_FEATURE2_VEC_CRYPTO,它表示存在 vector 加密指令,这听起来正是您需要的。

附带说明:您可能不想检测处理器实现,而是检测处理器特性。具体来说,检查单个功能,而不是尝试检查提供该功能的进程。 (例如,直接检测 VEC_CRYPTO,而不是尝试检查 POWER8,并假设这意味着加密功能)。

作为细节,Linux 的可计算条目指定了HWCAP/HWCAP2 值。以 POWER8 为例:

#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在内核中(它还提供了可以在辅助 vector 中设置的实际 hwcap 位)。

最后,我相当确定您无需成为 OpenPOWER 基金会成员即可下载 ISA(最新版本为 3.0B)- 您只需要在网站上有一个帐户。

关于c - 通过 getauxval 检测 Power8 核心加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46144668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com