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的主要内容,如果未能解决你的问题,请参考以下文章