精华内容
下载资源
问答
  • TLB和cache关系

    千次阅读 2014-01-14 14:48:27
    一)TLB 1)TLB的概述 ...TLB是一个内存管理单元用于改进虚拟地址到...TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址取数据. 2)tlb的原理 当cpu对数据

    http://blog.csdn.net/witsmakemen/article/details/18222251

    一)TLB

    1)TLB的概述

    TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存.

    TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据.

    2)tlb的原理

    当cpu对数据进行读请求时,CPU根据虚拟地址(前20位)到TLB中查找.
    TLB中保存着虚拟地址(前20位)和页框号的对映关系,如果匹配到虚拟地址就可以迅速找到页框号(页框号可以理解为页表项),通过页框号与虚拟地址后12位的偏移组合得到最终的物理地址.

    如果没在TLB中匹配到虚拟地址,就出现TLB丢失,需要到页表中查询页表项,如果不在页表中,说明要读取的内容不在内存,需要到磁盘读取.

    TLB是MMU中的一块高速缓存,也是一种Cache.

    在分页机制中,TLB中的数据和页表的数据关联,不是由处理器维护,而是由OS来维护,TLB的刷新是通过装入处理器中的CR3寄存器来完成.

    如果MMU发现在TLB中没有命中,它在常规的页表查找后,用找到的页表项替换TLB中的一个条目.

    3)tlb的刷新原则

    当进程进行上下文切换时重新设置cr3寄存器,并且刷新tlb.

    有两种情况可以避免刷tlb.
     第一种情况是使用相同页表的进程切换.
     第二种情况是普通进程切换到内核线程.

    lazy-tlb(懒惰模式)的技术是为了避免进程切换导致tlb被刷新.
    当普通进程切换到内核线程时,系统进入lazy-tlb模式,切到普通进程时退出该模式.

     

     

    二)cache 
    1)cache的概念:
    cache是为了解决处理器与慢速DRAM(慢速DRAM即内存)设备之间巨大的速度差异而出现的.
    cache属于硬件系统,linux不能管理cache.但会提供flush整个cache的接口.
    cache分为一级cache,二级cache,三级cache等等.一级cache与cpu处于同一个指令周期.


    例如:查看当前系统的cache.

    dmidecode -t cache

    # dmidecode 2.9
    SMBIOS 2.6 present.

    Handle 0x0700, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 1
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 128 KB
            Maximum Size: 128 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Data
            Associativity: 8-way Set-associative

    Handle 0x0701, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 2
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 1024 KB
            Maximum Size: 2048 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 8-way Set-associative

    Handle 0x0702, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 3
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 4096 KB
            Maximum Size: 4096 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 16-way Set-associative

    分别是:
    1级cache:128KB
    2级cache:1024KB
    3级cache:4096KB

    2)Cache的存取单位(Cache Line)

    CPU从来不从DRAM直接读/写字节或字,从CPU到DRAM的每次读或写的第一步都要经过L1 cache,每次以整数行读或写到DRAM中.
    Cache Line是cache与DRAM同步的最小单位.
    典型的虚拟内存页面大小为4KB,而典型的Cache line通常的大小为32或64字节.
    CPU 读/写内存都要通过Cache,如果数据不在Cache中,需要把数据以Cache Line为单位去填充到Cache,即使是读/写一个字节.
    CPU 不存在直接读/写内存的情况,每次读/写内存都要经过Cache.

    3)Cache的工作模式

    数据回写(write-back):这是最高性能的模式,也是最典型的,在回写模式下,cache内容更改不需要每次都写回内存,直到一个新的 cache要刷新或软件要求刷新时,才写回内存.
    写通过(write-through):这种模式比回写模式效率低,因为它每次强制将内容写回内存,以额外地保存cache的结果,在这种模式写耗时,而读和回写模一样快,这都为了内存与cache相一致而付出的代价.
    预取 (prefectching):一些cache允许处理器对cache line进行预取,以响应读请求,这样被读取的相邻内容也同时被读出来,如果读是随机的,将会使CPU变慢,预取一般与软件进行配合以达到最高性能.


    注:
    大部分的cache允许软件在某个区域设置模式,一个区域可能是回写,另一个可能是预取.用户一般不能改变cache的模式, 这些通常由设备驱动程序来控制.
    预取通常由软件通过所谓的cache隐函数madvise进行控制.

    例如:查看当前系统的cache在哪种模式下工作

    dmidecode -t cache

    # dmidecode 2.9
    SMBIOS 2.6 present.

    Handle 0x0700, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 1
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 128 KB
            Maximum Size: 128 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Data
            Associativity: 8-way Set-associative

    Handle 0x0701, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 2
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 1024 KB
            Maximum Size: 2048 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 8-way Set-associative

    Handle 0x0702, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 3
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 4096 KB
            Maximum Size: 4096 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 16-way Set-associative
            
    结果表明都是回写,如下:
    Operational Mode: Write Back

     

    三)内存一致性

    write back会涉及内存一致性,涉有到一系列的问题:

    1)多处理要系统更新cache时,一个处理器修改了cache的内容,第二个处理器将不能访问这个cache,直到这个cache的内容被写内存.
    在现代处理器中硬件已经做了精心的设计,确保这种事情不会发生,硬件负责保持cache在各个CPU之间一致.

    2)外围硬件设备可以通过DMA(Direct Memory Access)访问内存,而不让处理器知道,也不会利用cache,这样在内存和cache之间就会出现不同步的情况.
    管理DMA的操作是操作系统的工作,比如设备驱动程序,它将保证内存与cache的一致性.

    3)当在cache中的数据比内存中的数据老时,称为stale.如果软件初始化DMA,使设备和RAM之间传递数据,那么软件必须告诉 CPU,cache中的条目必须失效.

    4)当在cache中的数据比内存中的数据新时,称为dirty.在设备驱动程序允许一个设备经DMA从内存读数据时,它必须确保所有的dirty 条目写进内存.也叫做flushing或sync cache.

    展开全文
  • TLB和cache关系

    万次阅读 2018-03-06 15:50:59
    一)TLB1)TLB的概述TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存.TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址取数据.分页与页表概念性...

    一)TLB

    1)TLB的概述

    TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存.

    TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据.


    分页与页表

    概念性内容不再阐述。直接给出解释。

    MMU为内存管理单元,其作为硬件用于将虚拟地址映射为物理地址。上图右边部分,箭头所述部分内容即采用MMU完成地址映射。

    虚拟地址通过多级页表映射后对应末级页表项,末级页表项中存放的是物理地址页框号。即一个虚拟地址,通过MMU找到对应的物理页框号,通过虚拟地址后12位作为页内偏移,索引到具体物理地址上的内容。

    页表项的结构:

    长度为32位,其中最后20位为页框号内容,“在/不在“位表示当前页表项对应的物理页框是位于内存中还是位于物理磁盘上,“保护”位指定当前页面是否可读、写、执行,“修改”位指明当前物理页面是否是一个脏页,即是否已经被写入到磁盘上。


    2)tlb的原理

    当cpu对数据进行读请求时,CPU根据虚拟地址(前20位)到TLB中查找.
    TLB中保存着虚拟地址(前20位)和页框号的对映关系,如果匹配到虚拟地址就可以迅速找到页框号(页框号可以理解为页表项),通过页框号与虚拟地址后12位的偏移组合得到最终的物理地址.

    如果没在TLB中匹配到虚拟地址,就出现TLB丢失,需要到页表中查询页表项,如果不在页表中,说明要读取的内容不在内存,需要到磁盘读取.

    TLB是MMU中的一块高速缓存,也是一种Cache.

    在分页机制中,TLB中的数据和页表的数据关联,不是由处理器维护,而是由OS来维护,TLB的刷新是通过装入处理器中的CR3寄存器来完成.

    如果MMU发现在TLB中没有命中,它在常规的页表查找后,用找到的页表项替换TLB中的一个条目.

    3)tlb的刷新原则

    当进程进行上下文切换时重新设置cr3寄存器,并且刷新tlb.

    有两种情况可以避免刷tlb.
     第一种情况是使用相同页表的进程切换.
     第二种情况是普通进程切换到内核线程.

    lazy-tlb(懒惰模式)的技术是为了避免进程切换导致tlb被刷新.
    当普通进程切换到内核线程时,系统进入lazy-tlb模式,切到普通进程时退出该模式.

     

     

    二)cache 
    1)cache的概念:
    cache是为了解决处理器与慢速DRAM(慢速DRAM即内存)设备之间巨大的速度差异而出现的.
    cache属于硬件系统,linux不能管理cache.但会提供flush整个cache的接口.
    cache分为一级cache,二级cache,三级cache等等.一级cache与cpu处于同一个指令周期.


    例如:查看当前系统的cache.

    dmidecode -t cache

    # dmidecode 2.9
    SMBIOS 2.6 present.

    Handle 0x0700, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 1
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 128 KB
            Maximum Size: 128 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Data
            Associativity: 8-way Set-associative

    Handle 0x0701, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 2
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 1024 KB
            Maximum Size: 2048 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 8-way Set-associative

    Handle 0x0702, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 3
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 4096 KB
            Maximum Size: 4096 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 16-way Set-associative

    分别是:
    1级cache:128KB
    2级cache:1024KB
    3级cache:4096KB

    2)Cache的存取单位(Cache Line)

    CPU从来不从DRAM直接读/写字节或字,从CPU到DRAM的每次读或写的第一步都要经过L1 cache,每次以整数行读或写到DRAM中.
    Cache Line是cache与DRAM同步的最小单位.
    典型的虚拟内存页面大小为4KB,而典型的Cache line通常的大小为32或64字节.
    CPU 读/写内存都要通过Cache,如果数据不在Cache中,需要把数据以Cache Line为单位去填充到Cache,即使是读/写一个字节.
    CPU 不存在直接读/写内存的情况,每次读/写内存都要经过Cache.

    3)Cache的工作模式

    数据回写(write-back):这是最高性能的模式,也是最典型的,在回写模式下,cache内容更改不需要每次都写回内存,直到一个新的 cache要刷新或软件要求刷新时,才写回内存.
    写通过(write-through):这种模式比回写模式效率低,因为它每次强制将内容写回内存,以额外地保存cache的结果,在这种模式写耗时,而读和回写模一样快,这都为了内存与cache相一致而付出的代价.
    预取 (prefectching):一些cache允许处理器对cache line进行预取,以响应读请求,这样被读取的相邻内容也同时被读出来,如果读是随机的,将会使CPU变慢,预取一般与软件进行配合以达到最高性能.


    注:
    大部分的cache允许软件在某个区域设置模式,一个区域可能是回写,另一个可能是预取.用户一般不能改变cache的模式, 这些通常由设备驱动程序来控制.
    预取通常由软件通过所谓的cache隐函数madvise进行控制.

    例如:查看当前系统的cache在哪种模式下工作

    dmidecode -t cache

    # dmidecode 2.9
    SMBIOS 2.6 present.

    Handle 0x0700, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 1
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 128 KB
            Maximum Size: 128 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Data
            Associativity: 8-way Set-associative

    Handle 0x0701, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 2
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 1024 KB
            Maximum Size: 2048 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 8-way Set-associative

    Handle 0x0702, DMI type 7, 19 bytes
    Cache Information
            Socket Designation: Not Specified
            Configuration: Enabled, Not Socketed, Level 3
            Operational Mode: Write Back
            Location: Internal
            Installed Size: 4096 KB
            Maximum Size: 4096 KB
            Supported SRAM Types:
                    Unknown
            Installed SRAM Type: Unknown
            Speed: Unknown
            Error Correction Type: Single-bit ECC
            System Type: Unified
            Associativity: 16-way Set-associative
            
    结果表明都是回写,如下:
    Operational Mode: Write Back

     

    三)内存一致性

    write back会涉及内存一致性,涉有到一系列的问题:

    1)多处理要系统更新cache时,一个处理器修改了cache的内容,第二个处理器将不能访问这个cache,直到这个cache的内容被写内存.
    在现代处理器中硬件已经做了精心的设计,确保这种事情不会发生,硬件负责保持cache在各个CPU之间一致.

    2)外围硬件设备可以通过DMA(Direct Memory Access)访问内存,而不让处理器知道,也不会利用cache,这样在内存和cache之间就会出现不同步的情况.
    管理DMA的操作是操作系统的工作,比如设备驱动程序,它将保证内存与cache的一致性.

    3)当在cache中的数据比内存中的数据老时,称为stale.如果软件初始化DMA,使设备和RAM之间传递数据,那么软件必须告诉 CPU,cache中的条目必须失效.

    4)当在cache中的数据比内存中的数据新时,称为dirty.在设备驱动程序允许一个设备经DMA从内存读数据时,它必须确保所有的dirty 条目写进内存.也叫做flushing或sync cache

    展开全文
  • TLBCache访问谁先访问?1 CacheTLB简介2 CacheTLB谁先访问? 1 CacheTLB简介 CacheTLB本质上都是利用数据访问的局部性原理,就是把最常用的数据放在最快可以访问的地方。具体而言,Cache是用于缓存CPU常用...

    TLB与Cache访问谁先访问?

    1 Cache与TLB简介

    Cache与TLB本质上都是利用数据访问的局部性原理,就是把最常用的数据放在最快可以访问的地方。具体而言,Cache是用于缓存CPU常用的数据和指令的,分别称为dcache(data cache)和icache(instruction cache)。Cache通常有多级,比如L1 Cache、L2 Cache和L3 Cache,只有L1 Cache中是将指令和数据分开存放的,L2/L3 Cache中指令和数据通常是混合存放的。TLB(Translation Lookaside Buffer)是用于缓存虚拟地址到物理地址的映射关系的,通常位于MMU中。在操作系统中,进程使用的虚拟地址需要转换成物理地址才能得到数据在物理内存中的真正存放位置,而内存管理单元MMU的一个功能就是进行虚拟地址到物理地址的转换。注意:多个虚拟地址可能会对应同一个物理地址。通常来说,CPU发出的数据访问请求都是虚拟地址的,那CPU发出的数据请求是先到Cache中查找有无该虚拟地址对应的数据还是先利用MMU进行虚拟地址到物理地址转换然后再查找Cache呢?

    2 Cache与TLB谁先访问?

    答案是上述2种情况都有可能,这取决于TLB与Cache的先后顺序。如果TLB介于 CPU 和 Cache之间,其实就是MMU介于CPU和Cache之间,则是先访问TLB后访问Cache且此时访问Cache使用的是物理地址,这种情况称为物理Cache。如果TLB介于 Cache和Memory之间,即MMU介于Cache与Memory之间,则是先访问Cache后访问TLB且此时访问Cache使用的是虚拟地址,这种情况称为逻辑Cache(注意:实际上此时可以同时向Cache发出请求,如果Cache命中则最好,如果Cache未命中此时MMU可以进行地址转换以便于Cache未命中后的从内存中获取数据)。具体示意如下图:
    逻辑Cache与物理Cache
    物理Cache与逻辑Cache各有优缺点。对于逻辑Cache:(1)CPU可以更快得知数据是否被cache,因为不需要等待MMU进行虚拟地址到物理地址的转换。(2)一方面,由于不同进程之间会存在相同的虚拟地址。另一方面,不同的虚拟地址可能会对应相同的物理地址。因此,逻辑Cache在进行进程上下文切换时需要flush cache或者通过在每一个cache line中添加额外的位来区分各个进程或者物理地址对应的Cache。对于物理Cache:(1)CPU获取被Cache缓存的数据速度更慢,因为需要先利用MMU进行虚拟地址到物理地址的转换,然后才查找cache。(2)每一个cache line的位数可以更少,因为物理地址是唯一的,不像虚拟地址那样会出现重复,而且在进程上下文切换时也不必flush cache。

    相关参考:
    加州大学北岭分校计算机课程 Cache Memory

    展开全文
  • TLB cache 原理

    千次阅读 2020-04-17 15:53:47
    虚拟地址物理地址的映射关系存储在页表中,而现在页表又是分级的。64位系统一般都是3~5级。常见的配置是4级页表,就以4级页表为例说明。分别是PGD、PUD、PMD、PTE四级页表。在硬件上会有一个叫做页表基地址寄存器...

    TLB是translation lookaside buffer的简称。首先,我们知道MMU的作用是把虚拟地址转换成物理地址。虚拟地址和物理地址的映射关系存储在页表中,而现在页表又是分级的。64位系统一般都是3~5级。常见的配置是4级页表,就以4级页表为例说明。分别是PGD、PUD、PMD、PTE四级页表。在硬件上会有一个叫做页表基地址寄存器,它存储PGD页表的首地址。MMU就是根据页表基地址寄存器从PGD页表一路查到PTE,最终找到物理地址(PTE页表中存储物理地址)。这就像在地图上显示你的家在哪一样,我为了找到你家的地址,先确定你是中国,再确定你是某个省,继续往下某个市,最后找到你家是一样的原理。一级一级找下去。这个过程你也看到了,非常繁琐。如果第一次查到你家的具体位置,我如果记下来你的姓名和你家的地址。下次查找时,是不是只需要跟我说你的姓名是什么,我就直接能够告诉你地址,而不需要一级一级查找。四级页表查找过程需要四次内存访问。延时可想而知,非常影响性能。页表查找过程的示例如下图所示。以后有机会详细展开,这里了解下即可。

    page table walk

    TLB的本质是什么

    TLB其实就是一块高速缓存。数据cache缓存地址(虚拟地址或者物理地址)和数据。TLB缓存虚拟地址和其映射的物理地址。TLB根据虚拟地址查找cache,它没得选,只能根据虚拟地址查找。所以TLB是一个虚拟高速缓存。既然是VIVT方式,是否存在别名和歧义问题呢?如果存在,软件和硬件是如何配合解决这些问题呢?后面我们再解答。 存在TLB后,虚拟地址到物理地址的转换过程发生了变化。虚拟地址首先发往TLB确认是否命中cache,如果cache hit直接可以得到物理地址。否则,一级一级查找页表获取物理地址。并将虚拟地址和物理地址的映射关系缓存到TLB中。

    TLB的特殊

    虚拟地址映射物理地址的最小单位是4KB。所以TLB其实不需要存储虚拟地址和物理地址的低12位(因为低12位是一样的,根本没必要存储)。另外,我们如果命中cache,肯定是一次性从cache中拿出整个数据。所以虚拟地址不需要offset域。index域是否需要呢?这取决于cache的组织形式。如果是全相连高速缓存。那么就不需要index。如果使用多路组相连高速缓存,依然需要index。下图就是一个四路组相连TLB的例子。现如今64位CPU寻址范围并没有扩大到64位。64位地址空间很大,现如今还用不到那么大。因此硬件为了设计简单或者解决成本,实际虚拟地址位数只使用了一部分。这里以48位地址总线为了例说明。

    TLB的别名问题

    我先来思考第一个问题,别名是否存在。我们知道PIPT的数据cache不存在别名问题。物理地址是唯一的,一个物理地址一定对应一个数据。但是不同的物理地址可能存储相同的数据。也就是说,物理地址对应数据是一对一关系,翻过来是多对一关系。由于TLB的特殊性,存储的是虚拟地址和物理地址的对应关系。因此,对于单进程来说,一个虚拟地址一定只对应一个物理地址。但是一个物理地址可以被多个虚拟地址映射。将PIPT数据cache类比TLB,我们可以知道TLB不存在别名问题。而VIVT Cache存在别名问题,原因是VA需要转换成PA,PA里面才存储着数据。中间多经传一手,所以引入了些问题。

    TLB的歧义问题

    我们知道不同的进程之间看到的虚拟地址范围是一样的,所以多个进程下,不同进程的相同的虚拟地址可以映射不同的物理地址。这就会造成歧义问题。例如,进程A将地址0x2000映射物理地址0x4000。进程B将地址0x2000映射物理地址0x5000。当进程A执行的时候将0x2000对应0x4000的映射关系缓存到TLB中。当切换B进程的时候,B进程访问0x2000的数据,会由于命中TLB从物理地址0x4000取数据。这就造成了歧义。如何消除这种歧义,我们可以借鉴VIVT数据cache的处理方式,在进程切换时将整个TLB无效。切换后的进程都不会命中TLB,但是会导致性能损失。

    如何尽可能的避免flush TLB

    首先需要说明的是,这里的flush理解成使无效的意思。我们知道进程切换的时候,为了避免歧义,我们需要主动flush整个TLB。如果我们能够区分不同的进程的TLB表项就可以避免flush TLB。我们知道Linux如何区分不同的进程?每个进程拥有一个独一无二的进程ID。如果TLB在判断是否命中的时候,除了比较tag以外,再额外比较进程ID该多好呢!这样就可以区分不同进程的TLB表项。进程A和B虽然虚拟地址一样,但是进程ID不一样,自然就不会发生进程B命中进程A的TLB表项。所以,TLB添加一项ASID(Address Space ID)的匹配。ASID就类似进程ID一样,用来区分不同进程的TLB表项。这样在进程切换的时候就不需要flush TLB。但是仍然需要软件管理和分配ASID。

    如何管理ASID

    ASID和进程ID肯定是不一样的,别混淆二者。进程ID取值范围很大。但是ASID一般是8或16 bit。所以只能区分256或65536个进程。我们的例子就以8位ASID说明。所以我们不可能将进程ID和ASID一一对应,我们必须为每个进程分配一个ASID,进程ID和每个进程的ASID一般是不相等的。每创建一个新进程,就为之分配一个新的ASID。当ASID分配完后,flush所有TLB,重新分配ASID。所以,如果想完全避免flush TLB的话,理想情况下,运行的进程数目必须小于等于256。然而事实并非如此,因此管理ASID上需要软硬结合。 Linux kernel为了管理每个进程会有个task_struct结构体,我们可以把分配给当前进程的ASID存储在这里。页表基地址寄存器有空闲位也可以用来存储ASID。当进程切换时,可以将页表基地址和ASID(可以从task_struct获得)共同存储在页表基地址寄存器中。当查找TLB时,硬件可以对比tag以及ASID是否相等(对比页表基地址寄存器存储的ASID和TLB表项存储的ASID)。如果都相等,代表TLB hit。否则TLB miss。当TLB miss时,需要多级遍历页表,查找物理地址。然后缓存到TLB中,同时缓存当前的ASID。

    更上一层楼

    我们知道内核空间和用户空间是分开的,并且内核空间是所有进程共享。既然内核空间是共享的,进程A切换进程B的时候,如果进程B访问的地址位于内核空间,完全可以使用进程A缓存的TLB。但是现在由于ASID不一样,导致TLB miss。我们针对内核空间这种全局共享的映射关系称之为global映射。针对每个进程的映射称之为non-global映射。所以,我们在最后一级页表中引入一个bit(non-global (nG) bit)代表是不是global映射。当虚拟地址映射物理地址关系缓存到TLB时,将nG bit也存储下来。当判断是否命中TLB时,当比较tag相等时,再判断是不是global映射,如果是的话,直接判断TLB hit,无需比较ASID。当不是global映射时,最后比较ASID判断是否TLB hit。

    什么时候应该flush TLB

    我们再来最后的总结,什么时候应该flush TLB。

    • 当ASID分配完的时候,需要flush全部TLB。ASID的管理可以使用bitmap管理,flush TLB后clear整个bitmap。
    • 当我们建立页表映射的时候,就需要flush虚拟地址对应的TLB表项。第一印象可能是修改页表映射的时候才需要flush TLB,但是实际情况是只要建立映射就需要flush TLB。原因是,建立映射时你并不知道之前是否存在映射。例如,建立虚拟地址A到物理地址B的映射,我们并不知道之前是否存在虚拟地址A到物理地址C的映射情况。所以就统一在建立映射关系的时候flush TLB。
    展开全文
  • TLB、页表、Cache、主存之间的访问关系

    千次阅读 多人点赞 2020-07-26 15:49:51
    TLB、页表、Cache、主存之间的访问关系 首先,程序员应该给出一个逻辑地址。通过逻辑地址去查询TLB和页表(一般是同时查询,TLB是页表的子集,所以TLB命中,页表一定命中;但是页表命中,TLB不一定命中),以确定该...
  • TLB - Cache - Page命中关系小结 前置知识——CPU根据虚地址访存流程 ①访问虚地址读取虚页号 → 访问基址寄存器读取页表起始地址 → 拼接起始地址虚页号得到页表地址 → 依据页表地址访问对应的页表项 → 根据...
  • TLB和Cache

    2012-09-06 14:10:15
    TLB和Cache  2012-09-04 00:45:16| 分类: RHCA_442 |字号 订阅 Redhat技术交流QQ群Redhat_CN(217245629) 一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度...
  • TLB Page Cache命中组合问题

    千次阅读 多人点赞 2018-11-11 22:56:57
    A.TLB未命中,CaChe命中,Page未命中 B.TLB未命中,CaChe未命中,Page命中 C.TLB命中,CaChe命中,Page未命中 D.TLB命中,CaChe未命中,Page未命中   解答:TLB,快表,放了一些经常用到的页表,也就是...
  • TLBcache的深入分析

    万次阅读 2014-06-17 14:56:30
    一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存. TLB是位于内存中的页表的cache,如果没有TLB,则每次...TLB中保存着虚拟地址(前20位)页框号的对映关系,如果匹配到虚拟地址就
  • 计组复习(四):cache,虚拟内存,页表与TLB

    千次阅读 多人点赞 2021-01-12 22:36:04
    首先引入 cache 高速缓存,来缓解高速的 cpu 低速的内存之间的拖带关系。然后是虚拟内存机制,虚拟内存能够很好的帮助程序员避免麻烦的内存管理与冲突等问题,并且将内存作为模块化独立出来。 上一篇博客回顾:计...
  • MMU和cache详解(TLB机制)

    千次阅读 2017-07-21 10:53:59
    因为TLB是MMU中的一块高速缓存(也是一种cache,是CPU内核物理内存之间的cache),它缓存最近查找过的VA对应的页表项,如果TLB里缓存了当前VA的页表项就不必做translation table walk了,否则就去物理内存中读出页表...
  • CPU Cache处理器通常会在芯片中包含硬件缓存以提高内存访问性能  L1: 通常分为指令缓存数据缓存  L2: 同时缓存指令数据  L3: 更大一级的缓存可选 一级缓存通常按虚拟内存地址空间寻址,二级及以上按...
  • TLb和硬件Cache

    2015-08-21 23:06:24
    转帖于 ... 一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存....TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址取数据. 2)
  • TLB和cache

    2014-06-24 23:33:09
    TLB和cache (2012-11-02 13:41:47) 转载▼ 标签: 杂谈   http://blog.csdn.net/hangbing0203/archive/2010/05/17/5600759.aspx 一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进...
  • TLB和CACHE

    千次阅读 2011-08-26 13:16:39
    转自http://blog.csdn.net/hangbing0203/article/details/5600759 一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存. TLB是位于内存中的页表的cache,如果没有TLB
  • 上图给出了CPU,MMU,Cache的布局,MMU应该包括了TLB和Translation Table Walk。TLB(Translation Lookaside Buffer)是一块高速缓存,缓存最近查找过的VA对应的页表项。如果TLB中有需要查表的VA,就不用Translation...
  • 一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存. ...TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要...TLB中保存着虚拟地址(前20位)页框号的对映关系,如果
  • 快表、页表和cache之间的关系

    千次阅读 多人点赞 2021-09-25 21:26:27
    快表、页表和cache之间的关系全相联映射快表命中全相联映射快表未命中四路组相连映射 在32位操作系统中,一个地址对应32位2进制数,则能寻址到4GB(232)的地址。 而在linux内存管理中,内存以页为单位进行管理,一般...
  • cache是体系结构中很重要的一个设计,也是有关存储体系中的一个重要环节,考虑到现实的应用中,由于开发了虚拟地址这个概念,即每个进程都可以拥有一个完整的虚拟地址空间,这样,CPU在执行两道不同的进程,而进程的...
  • cacheTLB

    2016-08-24 14:55:49
     ...  cache是一种高速缓存存储器,...在使用Cache技术的处理器上,当一条指令要访问内存的数据时,首先查询cache缓存中是否有数据以及数据是否过期,如果数据未过期则从cache读出数据。处理器会定期回写cach
  • Memory的分页机制,MMU,TLBCache,VA及PA,Virtual memory及Physical memory 最近读了一些关于内存管理系统的文章,感觉好多博主讲的很好,大概了解了一些知识,为了避免自己遗忘,根据自己对其他博主文章的理解...
  • TLBcache的深入分析》 已有 3332 次阅读 2010-5-8 15:23|关键词:cache tlb Cache 内核 lazy 技术 系统 硬件 linux 回写 软件 用户 操作系统 一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进虚拟地址到...
  • TLB原理

    千次阅读 2020-12-21 17:13:06
    虚拟地址物理地址的映射关系存储在页表中,而现在页表又是分级的。64位系统一般都是3~5级。常见的配置是4级页表,就以4级页表为例说明。分别是PGD、PUD、PMD、PTE四级页表。在硬件上会有一个叫做页表基地址寄存器...
  • 1. 寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件...2. 内存包含的范围非常广,一般分为只读存储器(ROM)、随机存储器(RAM)高速缓存存储器(cache)。\3. 寄存器是CPU内部的元件,寄存器拥
  • CPUID详解[增加TLBCache]

    千次阅读 2006-03-08 13:46:00
    这是文章最后一次更新,加入了TLBCache信息等资料前言:论坛上面有人不明白CPUID指令的用法,于是就萌生写这篇文章的想法,若有错误话请大侠指出,谢谢了 ^^论坛的式样貌似有问题,若式样问题导致阅读问题的话,可以在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,405
精华内容 2,562
关键字:

tlb和cache的关系