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



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

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

事先非常感谢。

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

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

默认情况下,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中有多进程stat框架,但在任何一种情况下都需要添加它。

相关:

  • https://www.mail-archive.com/gem5-users@gem5.org/msg16228.html其他拱门
  • https://www.mail-archive.com/gem5-users@gem5.org/msg18064.html
  • 用于Linux内核的线程感知gdb
  • 如何访问gem5线程统计数据

请始终澄清您是在全系统上工作,还是在系统调用模拟上工作(如果这有区别的话),因为回复可能会大不相同。

相关内容

最新更新