繁体   English   中英

我如何知道何时将内存请求转发到另一个numa节点?

[英]How can I know when a memory request is forwarded to another numa node, which node is it?

当在节点A中发生内存访问时,它是一个远程访问,通过QuickPath Interconnect控制器转发到节点B。

不同的节点具有不同的内存地址范围,因此我当然可以使用内存地址来识别此范围。

如果我不知道内存地址,可以使用一些硬件寄存器或性能计数器来执行此操作吗?

如果您没有address ,请使用perf框架收集总体统计信息(您寻求的事件称为node- *)。 该工具将显示加载,存储和预取的未命中/总体事件数。

可以在每个线程收集模式下从用户空间调用perf,因此您可以使用rdpmc汇编指令并读取单个性能计数器。 即在访问内存前后读取计数器并计算差值。

我使用旧代码创建了一个小样本,但是我现在无法对其进行测试:(这是: https : //gist.github.com/myaut/cd67ea5143615264b2e6

如果有address ,则可以使用page_zone()virt_to_page()内核函数来获取地址的nodeid(其中ptr是虚拟地址):

struct zone* z = page_zone(virt_to_page((void*) ptr));
return z->node;

我使用SystemTap跟踪内核中的内存访问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM