首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在gem5中访问Linux进程的逻辑软件用户线程ID?

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

Stack Overflow用户
提问于 2019-01-11 00:55:56
回答 1查看 225关注 0票数 2

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

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

非常提前感谢您。

EN

回答 1

Stack Overflow用户

发布于 2019-01-11 19:48:30

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

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

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

代码语言:javascript
复制
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

虽然这不会立即对统计数据有所帮助,但它为以下两种情况提供了一个合理的起点:

  • 查看内核以尝试对其进行检测,
  • 尝试仅通过使统计数据依赖于#en0#来执行此操作

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

相关信息:

请始终澄清您是否正在使用完整系统或syscall仿真,如果这似乎有区别,因为回复可能会有很大的不同。

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

https://stackoverflow.com/questions/54133479

复制
相关文章

相似问题

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