我想知道是否有一种方法可以区分 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 中没有多进程统计框架,无论哪种情况你都需要添加它。
相关:
- https://www.mail-archive.com/[email protected]/msg16228.html其他拱门
- https://www.mail-archive.com/[email protected]/msg18064.html
- thread-aware gdb for the Linux kernel
- How can I access gem5 thread stats?
请始终澄清您是否正在处理完整的系统或系统调用模拟(如果这似乎有所不同),因为回复可能会完全不同。
关于gem5 - 如何在gem5中访问Linux进程的逻辑软件用户线程ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54133479/