如何在代码片段中找到TLB未命中数?

时间:2013-10-27 01:26:25

标签: c memory memory-management paging tlb

如果页面大小为1KB,我如何计算代码中的TLB未命中数,如下面的代码片段:

int i;
int p[1024];
for (i=0; i<1024; i++)
    p[i]=0;

我很有兴趣知道能够计算几乎每个给定代码片段中TLB未命中数的一般规则,除了知道#TLB错过了这个。

1 个答案:

答案 0 :(得分:3)

没有任何直接的答案。从一个处理器到另一个处理器,答案将大不相同。首先,TLB的大小(条目数)不一样。其次,处理器倾向于使用算法来保留更多有价值的条目(因为它们被认为是)并丢弃其他条目。这些算法从未发布过。

除此之外,TLB的某些部分将用于读取指令,操作系统将使用某些内容。这意味着你无法知道确切的结果。

维基百科提供以下信息:

  • 大小:12 - 4,096个条目;
  • 命中时间:0.5 - 1个时钟周期;
  • 小姐罚款:10 - 100个时钟周期;
  • 小姐率:0.01 - 1%。

在您的示例中,1024个4字节整数的数组将需要5个页面,因为很可能您的数组不是页面边界对齐的。一旦循环访问,每个页面将在TLB中占据一席之地。这个初始位置可以被视为TLB未命中吗?据我所知,没有明确的答案。有些人可能会回答是,有些人会回答否定。我会回答否。

当TLB的大小不足以存储算法所需的所有页面时,这无疑被称为TLB未命中。在你的情况下,如果TLB只有2个条目,那么将有3个未命中。