首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x2APIC中的MSR性能

x2APIC中的MSR性能
EN

Stack Overflow用户
提问于 2017-10-09 21:18:25
回答 1查看 510关注 0票数 1

正如我们所知道的,在x2APIC中,我们使用MSR而不是xAPIC使用的MMIO。但根据我的测试,我发现MSR的访问速度比MMIO慢得多。

例如,在我的环境中,我编写了一个简单的测试用例,如下所示:

代码语言:javascript
复制
static __inline__ void __loApicWrite
(
UINT32    * addr,
UINT32      value
)
{
__asm__ volatile
    (
    "movl    %1, %0"
    : "=m" (*(addr))
    : "ir" (value)
    );
}

void MSR_vs_MMIO(int way)
{
unsigned long a;
unsigned long b;
int i = 0;

msrReg = MSR_BASE_ADDRESS + (LOAPIC_ESR >> 4);

if (way == 0) /*MSR*/
    {
    for (i = 0; i < 1000; i++)
        {
        a = pentiumTscGet();    

        __asm__ volatile
        (
        "wrmsr\n"
        : : "c" (msrReg), "a"(0), "d" (0)
        );

        b =  pentiumTscGet();   

        if ( b > a ) 
            benchmark_record[i] = b - a ;
        }
    }

else         /*MMIO*/
    {
    for (i = 0; i < 1000; i++)
        {
        a =  pentiumTscGet();   

        __loApicWrite((UINT32 *)((0x82244000) + LOAPIC_ESR), 0);
        b =  pentiumTscGet();   

        if ( b > a )
            benchmark_record[i] = b - a ;
        }
    }

return;

}

如果我运行"MSR_vs_MMIO 0“,我得到的数字大约是310。如果我运行"MSR_vs_MMIO 1",我得到的数字大约是40。

我在启用和禁用x2APIC的情况下在我的系统上进行测试。当我在启用x2APIC的情况下引导系统时,我运行测试"MSR_vs_MMIO 0",当我在禁用x2APIC的情况下引导系统时,我运行测试"MSR_vs_MMIO 1“。然后我收集了数据,发现性能有很大的不同。

因此,MMIO似乎比MSR访问快8倍左右。

这个结果和预期的一样吗?英特尔手册上有没有什么文档描述x2APIC中的MSR和xAPIC中的MMIO之间的性能差异?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-10-09 22:57:16

假设您的系统是在x2apic模式下引导的,那么到APIC的MMIO接口是禁用的,因此您的MMIO代码实际上并没有访问APIC。请参阅英特尔SDM第10.12.2节。

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

https://stackoverflow.com/questions/46647468

复制
相关文章

相似问题

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