numa_police_memory
Posted
技术标签:
【中文标题】numa_police_memory【英文标题】: 【发布时间】:2012-06-29 16:03:15 【问题描述】:我正在 MIPS 机器上调试 NUMACTL。在 () API 中,我们有:
void (void *mem, size_t size)
int pagesize = numa_pagesize_int();
unsigned long i;
for (i = 0; i < size; i += pagesize)
asm volatile("" :: "r" (((volatile unsigned char *)mem)[i]));
似乎“asm volatile("" :: "r" (((volatile unsigned char *)mem)[i]));"用于读取 VM,以便将先前 mmap 应用的所有内存分配到某些特定的物理内存上。但是这个 asm 代码是如何工作的呢?我看不懂汇编语言!为什么第一个双引号是空的???
谢谢
【问题讨论】:
有趣,您有一台具有多个内存域的 MIPS 计算机? 【参考方案1】:有趣的是,虽然使用了asm
语句,但这个sn-p 中根本没有汇编代码。它包含一个空白的汇编“程序”、一个空的输出列表和一个输入列表。输入规范强制((volatile unsigned char *)mem)[i]
在寄存器中。因此,所有这些魔法都会产生每个页面的第一个字节的负载(预先错误页面)。
【讨论】:
注册。有关更多信息,请参阅GCC manual。这里发生的是asm
语句告诉 GCC 在执行内联汇编之前该值需要在寄存器中。 GCC 并不关心汇编代码实际上是空白的,并且仍然会产生负载。以上是关于numa_police_memory的主要内容,如果未能解决你的问题,请参考以下文章