gem5 - 如何在gem5中访问Linux进程的逻辑软件用户线程ID?

标签 gem5

我想知道是否有一种方法可以区分 gem5 中的不同逻辑(软件)线程。我正在尝试收集每个逻辑线程的一些统计信息,到目前为止我在 gem5 中能找到的只是对物理线程的访问。我知道逻辑线程是操作系统的责任,但是 gem5 是否可以访问逻辑线程 ID。

一种选择是将线程固定到核心,但这仅在核心数量至少等于逻辑线程数量时才有效。但是,我需要运行一些实验,其中逻辑线程的数量超过核心的数量,在这种情况下,多个逻辑线程将被分配给同一个核心,为了区分它们,我需要逻辑线程 ID。

提前非常感谢您。

最佳答案

不幸的是,我没有统计数据的解决方案。

但至少出于调试目的,在arm/arm64全系统Linux上,如果使用CONFIG_PID_IN_CONTEXTIDR构建内核,那么内核会将每个进程的PID保存在CONTEXTIDR_EL1中code> 在从调度程序运行进程之前进行系统注册。

并且 CONTEXTIDR_EL1 已经默认显示在 A 字段的 --debug-flag Exec 上,例如:

336757437500: ExecEnable: system.cpu: A39 T0 : 0x400ffc    :   ret                      : IntAlu :   flags=(IsInteger|IsControl|IsIndirectControl|IsUncondControl|IsReturn)

表示该指令针对进程 PID 39 运行。

这是我对该选项的精确设置和进一步解释:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/7235857b1b9ab3e646204d9e13df0104ce1a4174#config_pid_in_contextidr

虽然这并不能立即帮助统计数据,但它提供了一个合理的起点:

  • 查看内核并尝试对其进行检测
  • 尝试仅通过使统计数据依赖于 CONTEXTIDR_EL1 来在 gem5 端实现此目的

但是我认为 gem5 中没有多进程统计框架,无论哪种情况你都需要添加它。

相关:

请始终澄清您是否正在处理完整的系统或系统调用模拟(如果这似乎有所不同),因为回复可能会完全不同。

关于gem5 - 如何在gem5中访问Linux进程的逻辑软件用户线程ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54133479/

相关文章:

c++ - gem5 模拟 : error when goodbye. sayGoodbye(myName) 调用

ubuntu - 如何在 Ubuntu 20 上下载 gcc v4.4.3 版本?

c - 使用cachegrind和callgrind的不同读写计数

gem5 - 为什么在 gem5 中添加 DPRINTF(XXX 调试标志失败并显示 "error:' XXX' 未在此范围内声明”?

linux - gem5 构建失败, "error: ' printPFflags' was not declared in this scope”

scons - gem5 scons 构建失败,错误为 "TypeError: argument should be integer or bytes-like object, not ' str'"

gem5 - gem5 中的伪指令是什么?

qemu - 无法在 qemu 或 gem5 中打开/lib/ld-linux-aarch64.so.1

gem5 - 如何在 se 模式下使用 gem5 中的 m5ops,例如 m5_exit 和 m5_dump_stats

python - 使用 Pycharm 编写 gem5 配置脚本