通过 getauxval 检测 Power8 核心加密?

2024-02-14

我使用的是 GCC112,它是运行 Linux 的小端 Power8 机器。 Power8有核心加密 https://www.ibm.com/developerworks/library/se-power8-in-core-cryptography/index.html提供 AES、SHA 和一些其他有用的功能。我正在尝试使用以下命令确定运行时功能的可用性getauxval。用例是为“最小”功能的机器构建发行版,我们需要在运行时换入更快的功能。

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

我不清楚的是,Power8 核心加密是否可选,就像 ARMv8 下的 ARM 加密一样。我找不到明确说明要求的文件,而且我没有会员资格开放电源 https://openpowerfoundation.org访问 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()将是做到这一点的最佳方式;这HWCAP & HWCAP2值正好用于确定硬件特性。您的列表中缺少的是PPC_FEATURE2_VEC_CRYPTO,这表明存在向量加密指令,这听起来像是您需要的指令。

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

详细一点,Linux 的 cputable 条目指定了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 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/powerpc/include/asm/cputable.h在内核中(它还提供了可以在 aux 向量中设置的实际 hwcap 位)。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 getauxval 检测 Power8 核心加密? 的相关文章

随机推荐

  • 为什么在预提交挂钩中执行 git add 后索引没有更新?

    我有一个预提交钩子 检查我的版本文件是否需要更新 修改所述文件 对此文件执行 git add 这允许我将更新的版本文件添加到同一提交中 我遇到的唯一问题是 在钩子运行后 工作树和 HEAD 会使用新版本文件进行更新 但索引不会 我需要手动暂
  • Firebase 推送通知在某些设备上无法正常工作

    对于推送通知 我使用 FCM 我在 VIVO V3 手机中遇到一些问题 相同的代码适用于其他设备 黑莓 华为 三星 适用于以下所有场景我已经测试了 3 个场景 当应用程序位于前台时 当应用程序处于后台时 当应用程序完全杀死时 前 2 个条件
  • ConsoleAppender 实例化不起作用:具有私有访问权限

    我的 ConsoleAppender 类实例化不起作用 import org apache logging log4j core appender ConsoleAppender public class Application priva
  • 如何在 PHP 中将 PDF 版本 1.5 转换为版本 1.4

    如何在 PHP 中将 PDF 版本 1 5 转换为版本 1 4 有人能指出我正确的方向吗 我有类似的需求 发现Ghostscript可以修改PDF版本 文档在这里 http ghostscript com doc current Use h
  • 如何使用setCamera(MediaRecorder)?

    根据Android SDK MediaRecorder setCamera可以用于回收现有的相机实例进行视频捕获和预览 而无需重置预览 我无法找到任何示例 并且我所有的尝试都是徒劳的 我要么得到错误的状态异常 要么 MediaRecorde
  • 从 ASP.NET 应用程序写入 IIS 日志

    我想让我的 ASP NET 应用程序将行写入日志中的某个位置 IIS 是否提供任何内置方式来记录 ASP NET 日志消息 我在想可能有一种方法可以捕获对 System Diagnostics Debug WriteLine 的调用 但我找
  • SQLite 外部查询返回内部查询中找不到的结果

    我只是想知道是否有人遇到过 SQLite 3 7 4 中的情况 其中查询将返回一组结果 而当它成为子查询时 结果完全不同 我在更复杂的查询中发现了问题 但这里有一个更简单的示例 演示了相同的行为 数据库设置 CREATE TABLE tes
  • 如何使用 Paramiko 从 SFTP 服务器仅下载最新文件?

    我想编写连接到我的大学 SFTP 服务器并下载最新文件和练习的脚本 到目前为止 我已经对 Paramiko 示例中的代码进行了一些更改 但我不知道如何下载最新的文件 这是我的代码 import functools import parami
  • Laravel 多态多对多关系数据透视表与另一个模型的关系

    I have the following table structure as shown in the diagram 简而言之 它由几个多对多的多态关系组成 如下所示 many resources可以有很多sources和数据透视表so
  • C11 GCCthreads.h 未找到?

    下面的代码 include
  • JDialog:删除标题栏,保留边框

    是否可以从 JDialog 中删除标题栏 但保留边框 基本 SSCCE 如下所示 package test import javax swing JDialog import javax swing JFrame import javax
  • 通过 createPattern() 使用精灵表

    我似乎找不到任何有关如何执行此操作的可靠信息 所以我想知道是否有人可以为我指出正确的方向 我有一个大的精灵表 我们称之为textures png 每个纹理都是 64x64 像素 我需要能够根据这些纹理创建图案 createPattern 是
  • 找不到类型或命名空间名称“OpenIddictDbContext<,>”

    我有个问题 今天早上我打开我的项目并收到错误 找不到类型或命名空间名称 OpenIddictDbContext 您是否缺少 using 指令或程序集引用 netcoreapp1 1 当我恢复并构建项目时发生此错误 这很奇怪 因为我确实有 O
  • 使用 Python 的 headless-selenium-for-win

    我从这个github项目中找到了一个无头IE无头硒求赢 https github com kybu headless selenium for win releases 其中有以下文件 desktop utils exe headless
  • 使用 GEKKO python 时的负自由度

    我正在尝试解决上述优化问题 我的代码如下 它有效 但我得到了负自由度问题 而且客观价值也是负数 这是我没想到的 我期待着积极的一面 我不明白为什么会发生这种情况 也不知道如何解决这个问题 有人可以给我一个建议吗 Code Import pa
  • Ruby Array - 使用下一个和之前的元素进行反向迭代

    如何使用当前元素的下一个和之前的元素反向迭代数组 是否可以使用each cons with reverse each 对的 这是可能的 1 2 3 4 5 6 reverse each each cons 3 before current
  • 如何使用一组通用键正确散列字典以实现重复数据删除目的?

    我有一些日志数据 例如 logs id 1234 error None fruit orange id 12345 error None fruit apple 每个字典都有相同的键 id error and fruit 在本例中 我想要删
  • 如何使用 Visual Studio Code 创建并链接另一个网页?

    目前 我正在遵循在线教程 该教程使用 1 个 index html 文件和 1 个 app js 文件 仅生成 1 个页面 但是 我想要多个页面 只需单击一个按钮即可来回链接 如何拥有多个页面 我是否必须在同一个index html 文件中
  • 使用 MAMP 和 php 脚本发送电子邮件

    您好 我正在我的 Mac 上运行 MAMP 以在本地托管一个网站 我想使用 php 脚本发送电子邮件 我在网上查看的内容告诉我有关电子邮件的 php 脚本 但我无法发送电子邮件 我猜这与 MAMP 设置有关 或者可能我必须对 php ini
  • 通过 getauxval 检测 Power8 核心加密?

    我使用的是 GCC112 它是运行 Linux 的小端 Power8 机器 Power8有核心加密 https www ibm com developerworks library se power8 in core cryptograph