TLB

TLB:Translation Lookaside Buffer.

根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理器要在主内存寻址时,不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,TLB就是负责将虚拟内存地址翻译成实际的物理内存地址,而CPU寻址时会优先在TLB中进行寻址。处理器的性能就和寻址的命中率有很大的关系。

映射机制必须使一个程序能断言某个地址在其自己的进程空间或地址空间内,并且能够高效的将其转换为真实的物理地址以访问内存。一个方法是使用一个含有整个空间内所有页的入口(entry)的表(即页表),每个入口包含这个页的正确物理地址。这很明显是个相当大的数据结构,因而不得不存放于主存之中。

由于CPU首先接到的是由程序传来的虚拟内存地址,所以CPU必须先到物理内存中取页表,然后对应程序传来的虚拟页面号,在表里找到对应的物理页面号,最后才能访问实际的物理内存地址,也就是说整个过程中CPU必须访问两次物理内存(实际上访问的次数更多)。因此,为了减少CPU访问物理内存的次数,引入TLB。

====================================================

     cpu                                         内存

      TLB   <============================>    内存页表

      L1 Cache <=====>L2 Cache<=========>    内存数据

====================================================

TLB种类

TLB在X86体系的CPU里的实际应用最早是从Intel的486CPU开始的,在X86体系的CPU里边,一般都设有如下4组TLB:

第一组:缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB);

第二组:缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB);

第三组:缓存大尺寸页表(2M/4M字节页面)的指令页表缓存(Instruction-TLB);

第四组:缓存大尺寸页表(2M/4M字节页面)的数据页表缓存(Instruction-TLB);

图中可见,当CPU执行机构收到应用程序发来的虚拟地址后,首先到TLB中查找相应的页表数据,如果TLB中正好存放着所需的页表,则称为TLB命中(TLB Hit),接下来CPU再依次看TLB中页表所对应的物理内存地址中的数据是不是已经在一级、二级缓存里了,若没有则到内存中取相应地址所存放的数据。如果TLB中没有所需的页表,则称为TLB失败(TLB Miss),接下来就必须访问物理内存中存放的页表,同时更新TLB的页表数据。

既然说TLB是内存里存放的页表的缓存,那么它里边存放的数据实际上和内存页表区的数据是一致的,在内存的页表区里,每一条记录虚拟页面和物理页框对应关系的记录称之为一个页表条目(Entry),同样地,在TLB里边也缓存了同样大小的页表条目(Entry)。由于页表条目的大小总是固定不变的,所以TLB的容量越大,则它所能存放的页表条目数越多(类似于增大CPU一级、二级缓存容量的作用),这就意味着缓存命中率的增加,这样,就能大大减少CPU直接访问内存的次数,实现了性能提升。

4. TLB的联合方式:

TLB内部存储空间被划分为大小相同的块(即TLB页表条目),这些块的大小=内存的页表区里页表条目的大小.

所以,就可以在TLB页表条目和内存页表条目间建立一定的相互对应关系。当CPU需要页表数据时,它必须迅速做出如下的2个判断:一个是所需要的页表是否已缓存在TLB内部(即判断TLB命中或是失败),另一个是所需要的页表在TLB内的哪个条目内。为了尽量减少CPU做出这些判断所需的时间,就必须在TLB页表条目和内存页表条目之间的对应方式上动点脑筋,下面是几种常见的对应关系。

名称

方式

应用

全联合方式

内存页表里的任何一个条目都可能被对应(缓存)到TLB的任何一个条目,TLB内所有条目都可能被对应到内存页表里的所有条目上。

Athlon XP在L1 指令TLB部分全是这种方式

4路联合方式

只有内存页表区的某些条目可能被缓存到TLB的某4个页表条目所在的块上。

P4处理器一般采用这种方式




http://hi.baidu.com/cqyiwjnnqobanzq/item/cbdefcc6d3db910bc710b2ef

### TLB 的工作原理 TLB 是 Translation Lookaside Buffer 的缩写,主要功能是在内存管理单元 (MMU) 中加速虚拟地址到物理地址的转换过程。当 CPU 请求访问某个虚拟地址时,MMU 需要通过页表查找对应的物理地址[^4]。然而,页表通常存储在主存中,频繁访问会显著增加延迟。因此,TLB 被设计为一种高速缓存机制来减少这种开销。 #### 组织形式及其影响 TLB 可以采用不同的组织方式,每种方式都有其优缺点: 1. **直接映射** 每个线性地址块可以通过模运算唯一对应到一个 TLB 表项。这种方式的优点在于只需要进行一次比较即可完成匹配操作,从而降低延迟。然而,由于冲突概率较高,可能导致较高的 TLB miss 率,进而降低整体性能[^1]。 2. **全相连结构** 在此模式下,TLB 缓存中的任何表项都可以与任意线性地址的页表项相关联。这最大限度地提高了 TLB 表项的空间利用率,但由于需要逐一对比所有可能的条目直至找到匹配项或遍历完毕,可能会带来较大的延时问题。尤其对于大容量的 TLB 来说更为明显[^3]。 3. **组相联结构** 这是一种折衷方案,在一定程度上平衡了前两种方法之间的矛盾点——既保持了一定程度上的灵活性又不会过分牺牲速度表现。具体实现细节可参见有关资料进一步探讨。 #### 使用次数分析 关于 TLB 的实际使用频率取决于多种因素,包括但不限于操作系统的设计、应用程序的行为以及硬件架构特性等。一般来说,现代计算机系统为了提高效率都会尽可能多地利用 TLB 减少昂贵的内存访问动作;但如果发生诸如上下文切换等情况,则有可能触发整个缓冲区清空事件即所谓的 "flush" 动作,此时之前积累起来的有效数据都将被丢弃并重新加载新任务所需的信息[^2]。 ```python def tlb_hit_rate(total_accesses, misses): """ 计算 TLB 命中率 参数: total_accesses -- 总共发生的地址翻译尝试数 misses -- 发生未命中的情况数量 返回值: float 类型表示的命中百分比 """ hits = total_accesses - misses rate = (hits / total_accesses) * 100 return round(rate, 2) # 示例调用 print(tlb_hit_rate(1000, 50)) # 输出应接近于95% ``` 上述函数展示了如何基于给定参数计算 TLB 的命中比率。通过监控这些指标可以帮助评估当前系统的运行状况,并据此做出相应的优化决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值