如何根据TLB大小和平均内存访问时间计算进程大小

时间:2017-03-16 00:26:04

标签: memory tlb page-tables

在分页内存系统中,整个进程被加载到内存中(而不是请求分页),你有一个35条目的TLB。假设存储器访问在任何一页中的概率是相同的(与正常情况不同)。如果TLB搜索时间是5nsec,内存访问时间是50nsec,那么如果有效访问时间是70nsec,页面中的进程有多大?

如何计算过程的大小??

1 个答案:

答案 0 :(得分:0)

该系统在进程中使用虚拟内存,并且为了访问内存,虚拟地址应该被转换为物理内存。使用"页表"的一些变体将该翻译存储在相同的物理存储器中。 (https://en.wikipedia.org/wiki/Page_table)。

在没有TLB(大小为零的TLB)的变体中,每个程序访问都需要在进行实际访问之前从页表读取转换条目。因此,有效(平均)内存访问时间将等于2 *主内存访问时间。

eff_time(TLB_size_0) = 2 * main_memory_access_time

TLB是优化(检查http://ostep.org书以获取更多details of real world TLB),其中缓存了几个最近使用的翻译(并且每个翻译条目描述了1页)。在理想情况下,程序使用的所有虚拟地址都将命中TLB,并且只有TLB的延迟被添加到内存访问时间。使用35条TLB时,对于不超过35页的程序(或时间段)都是如此。

但是当程序执行统一内存访问并使用更多页面(页面数量更大)而不是存储在TLB中时,某些访问需要执行"页表行走" (在1级页表的情况下 - 1个额外的内存访问)来重新填充一些TLB条目。如果1/5的程序存储器访问错过TLB(并且4/5不等),则意味着有效访问时间将类似

eff_time (TLB_miss_rate_of_1_over_5) = (1-1/5) * full_access_time_with_TLB_hit + 1/5 * full_access_time_with_TLB_miss

其中full_access_time_with_TLB_hit是在TLB中成功搜索并执行1次主内存访问的时间,而full_access_time_with_TLB_miss是时间进行不成功的TLB搜索,访问页表(通过读取主内存),(可能重新填充TLB,并重做搜索,如果你MMU未经优化)然后访问应用程序所需的内存。