首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈Linux内核中缓存和块缓存

Page Cache高速缓存使用的是物理帧,以为单位将文件内容缓存,逻辑文件(struct file)中每一个可以划分为块单位,将每个块映射到磁盘的盘块,因此一个文件的可以和多个Buffer Cache...块缓存缓存的单个块大小是以磁盘扇区大小,默认是512个字节。无论应用程序读取多少个字节,在最终访问磁盘的时候,都必须以扇区大小(512个字节)读取;对应的块缓存缓存块大小是扇区的大小。...Page Cache(缓存) Linux高速缓存任何基于的数据,所缓存的Page包括普通文件内容、块设备文件、内存映射文件的读写。缓存中一个帧的文件数据锁对应的磁盘块不必是连续的。...针对块设备文件的缓存则是磁盘盘块在物理磁盘上是连续的。 缓存中采用了struct address_space数据结构来管理。它特指一个文件内容所形成的的缓存空间。...) 块缓存缓存是相对独立的两种缓存机制,通常也可以结合在一起共同描述缓存中保存文件的数据,向上以为单位于缓存交互,向下以块缓存为单位和通用设备层进行交互。

2.8K30

Buffer Pool缓存不够时,如何淘汰缓存

Buffer Pool缓存不够时,如何淘汰缓存? 若BP缓存不够了,咋办?...执行CRUD都会将磁盘数据加载到缓存,那在加载数据到缓存时,必然是要加载到空闲缓存,所以必须要从free中找个空闲缓存,然后把磁盘数据加载到该空闲缓存 随着不断将磁盘数据加载到空闲缓存...若所有缓存都有数据了,那就无法再从磁盘加载新数据缓存了,则只能淘汰一些缓存:把一个缓存里被修改过的数据,刷到磁盘的数据,然后该缓存就能被清空, 变回空闲。...如此,当无空闲缓存时候,就能轻易找出最近最少被访问的缓存去刷盘,即LRU链尾的缓存,将其刷盘,然后把你需要的磁盘数据加载到这刚空出的缓存。...现有两个空闲缓存,加载一个数据时,连带着把他的一个相邻数据也加载到缓存,正好每个数据放入一个空闲缓存! 然后呢?

33540
您找到你想要的搜索结果了吗?
是的
没有找到

Vue KeepAlive表单缓存场景

写这篇博文的目的是整理思路,KeepAlive动态修改目前有局限性,只使用改变 状态修改页面是否缓存,无法彻底删除上次缓存。...一、业务场景 ---- 一个表单页面 填写表单 点击查看协议,返回时候缓存 点击提交之后,下次进入不应该缓存就那么简单 我们是在app.vue 添加keepAlive缓存,通过路由配置开关 {...KeepAlive存在问题:提交完表单之后,下一次提交的时候,如何删除上一次缓存问题。 解决方案(尝试): 通过路由守卫动态修改KeepAlive属性,结果下次进来页面还是被缓存了。...------- 【X】 提交表单的时候,销毁页面,下次进入的时候缓存还在。 ------- 【X】 找到Cache,删除指定缓存页面。...三、实践代码 ---- 伪代码: 路由守卫离开函数{ if 离开去缓存的页面 { 本页面keepAlive 打开 }else{ 销毁这次缓存 } } 路由守卫进入函数{ 打开本页面的

1.1K10

Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 分配器 | 不连续分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 缓存 | 高速缓存 )

文章目录 一、Linux 内核中的内存管理模块 二、硬件设备内存管理 一、Linux 内核中的内存管理模块 ---- Linux 内核还需要处理如下内容 : ① 错误异常处理 ② 表管理 ③ 引导内存分配器...: 分配器 , 块分配器 , 不连续分配器 , 连续内存分配器 , 每处理器内存分配器 ; " 分配器 " 负责分配 内存物理 , 使用的是 " 伙伴分配器 " ; " 不连续分配器 " 提供了...回收内存 ; ⑦ 回收处理 二、硬件设备内存管理 ---- 硬件设备内存管理 : ① CPU 处理器 中的 " 内存管理单元 " ( MMU ) 和 高速缓存 ; ② 物理内存 在 " 内存管理单元..." ( MMU ) 中 , 还有一个 " 缓存 " ; 缓存缓存了 最近使用的 " 表映射 “ , 该映射的作用是 将 ” 物理地址 " 映射为 " 虚拟地址 " ; CPU 处理器...与 内存 访问速度不匹配 , 增加了 " 高速缓存 " 机制 ; 一级缓存 : 数据缓存 , 指令缓存 ; 二级缓存 : 协调 内存 与 一级缓存 ;

1.4K40

Linux 标准大和透明大

Huge pages ( 标准大 ) 和 Transparent Huge pages( 透明大 ) 在 Linux 中大分为两种:Huge pages ( 标准大 ) 和 Transparent...内存是以块即的方式进行管理的,当前大部分系统默认的大小为 4096 bytes 即 4K。1MB 内存等于 256 ;1GB 内存等于 256000 。...Huge Pages Huge pages 是从 Linux Kernel 2.6 后被引入的,目的是通过使用大内存来取代传统的 4kb 内存页面, 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能...Transparent Huge Pages Transparent Huge Pages 缩写 THP ,这个是 RHEL 6 开始引入的一个功能,在 Linux6 上透明大是默认启用的。...No Swapping: We must avoidswapping to happen on Linux OS at all Document 1295478.1.

4.9K50

缓存击穿,商详进不去了

坐他旁边的哥们在一旁抱怨,“啥情况,我就想给公司助助力,买点咱自家公司的产品,咋商详咋点来点去进不了,你看看你的呢?”。...缓存并没有及时更新。...(下次就不说小猫踩坑了,让他缓几天,哈哈) 聊聊缓存击穿 在此我们对小猫表示同情,但是这是一个很好的例子,老猫还是和大家一起聊聊缓存击穿雪崩的话题。 咱们就从以下几个方面聊聊缓存雪崩击穿的问题。...那么还有一种导致缓存失效的原因就是缓存中间件直接宕机。这种情况是运维层面需要解决的,可能要求对缓存中间件做好高可用,如何做高可用,我们在此不做深究。...缓存流程 从上述的流程图中我们可以看到,当有请求过来的时候,首先会尝试从缓存中去读取,当缓存中没有读到的时候,这个时候咱们就会回源到数据库再次查找,当查到相关商品数据之后返回给客户端,之后并将该数据继续缓存到数据库中

10510

Linux缓存机制bufferscached

当一个新进程需要内存上的空闲时,内核将检查是否有任何缓存中,相应地内核将通过将文件从缓存同步到本地磁盘来回收空闲,并为新进程释放内存。 为什么缓存会占用这么多内存?...根据Linux虚拟内存管理机制,这种行为是正常的。要理解为什么缓存会变得如此之高,以及为什么这不是一个问题,就必须了解I/O在Linux上是如何工作的。...如果用户只读取文件,则此将标记为“干净”缓存。但是,一旦用户写入文件,页面将被标记为“dirty”。...因为已经从磁盘读取缓存可以加快I/O,而且由于清除干净的缓存与分配空闲一样容易,而且由于空闲对系统的性能和功能没有任何帮助,因此没有理由将缓存转换为空闲。...如果内存充满了缓存,下一次内核需要内存时,它将简单地逐出最近最少使用的干净缓存并重新使用它们。 如何进行手动 buffer/cached回收?

4.6K10

Yii2缓存详解 转

页面缓存指的是在服务器端缓存整个页面的内容。随后当同一个页面 被请求时,内容将从缓存中取出,而不是重新生成。...index 页面中生效,并且页面最多缓存 100秒 ,并且会随着robots.txt文件的变化,而使缓存失效。...--------------------- 参数说明     class:定义需要加载的缓存配置文件。     only:定义仅仅只需要在哪个页面设置缓存。...如上列举例中,仅仅只有index页面会缓存下来,其他页面则不会缓存。     duration:定义缓存过期秒数。如上列举例中,100秒之后缓存将过期。    ...如上列举例中,使用的是文件依赖,当 “robots.txt” 文件内容改变时,缓存将失效。当然,还有其他的依赖关系,可以在数据缓存中查看。

51420

Linux 透明大 THP 和标准大 HP

作者 | JiekeXu 大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Linux 透明大 THP 和标准大 HP 目 录 标准大(HugePages) 透明大(Transparent...在 Linux 中大分为两种: Huge pages (标准大) 和 Transparent Huge pages(透明大)。...标准大(HugePages) 标准大(HugePages)是从 Linux Kernel 2.6 后被引入的,Huge Pages 可以称为大内存或者大页面,有时候也翻译成大/标准大/传统大...内核试图尽可能分配巨大的页面,主内核地址空间本身被映射为巨大的页面,减少了内核代码的 TLB(Translation Lookaside Buffer CPU中一小块缓存)压力。...透明大存在的问题: Oracle Linux team 在测试的过程中发现,如果 linux 开启透明大 THP,则 I/O 读写性能降低 30%;如果关闭透明大 THP,I/O 读写性能则恢复正常

2.3K20

linux中透明巨与巨的区别

Linux中,透明巨(Transparent HugePage)和巨(HugePage)是两种不同的内存管理技术。 透明巨Linux内核中的一项特性,旨在提高内存的利用率和性能。...它通过将内存分配为更大的巨(通常为2MB或1GB),减少了对内存表的访问次数,从而提高了内存访问的效率。透明巨是透明的,应用程序无需进行任何修改即可受益于这种内存管理技术。...而巨是指一种更大尺寸的内存,在Linux中可以使用不同的页面大小,常见的巨大小是2MB或1GB。...巨可以提供更高的内存访问性能,因为它减少了表的数量,降低了TLB(Translation Lookaside Buffer)缓存的压力,从而减少了内存访问的开销。...巨需要应用程序进行适当的修改和配置才能使用。 因此,透明巨和巨都是通过增加内存的尺寸来提高内存访问性能,但透明巨不需要应用程序的修改,而巨需要应用程序的支持和配置。

24210

Linux 匿名的反向映射

我们知道LINUX的内存管理系统中有”反向映射“这一说,目的是为了快速去查找出一个特定的物理在哪些进程中被映射到了什么地址,这样如果我们想把这一换出(SWAP),或是迁移(Migrate)的时候,就能相应该更改所有相关进程的表来达到这个目的...1、为什么要使用反向映射   物理内存的分页机制,一个PTE(Page Table Entry)对应一个物理,但一个物理可以由多个PTE与之相对应,当该页要被回收时,Linux2.4的做法是遍历每个进程的所有...2、Linux2.6中是如何实现反向映射 2.1 与RM(Reverse Mapping)相关的结构 page, address_space, vm_area_struct, mm_struct, anon_vma...Linux采用三级表: PGD:顶级表,由pgd_t项组成的数组,其中第一项指向一个二级表。...PMD:二级表,由pmd_t项组成的数组,其中第一项指向一个三级表(两级处理器没有物理的PMD)。 PTE:是一个对齐的数组,第一项称为一个表项,由pte_t类型表示。

3.6K31

Linux内核透明巨型支持

使用虚拟化和嵌套分页只有KVM和Linux客户端同时支持映射更大的TLB正在使用大页面,但显著的速度已经发生了,如果其中一个使用大页面只是因为TLB miss会跑得更快。...) 透明大支持最大限度地利用空闲内存,如果与hugetlbfs的保留方法相比,允许所有 未使用的内存用作缓存或其他可移动(甚至不可移动的对象)。...如果您没有遍历表,但是遇到了一个物理的大,但是您不能在代码中原生地处理它, 您可以通过调用split_huge_page(page)来分裂它。这就是Linux VM在尝试切换大页面之前所做的。...文件页面在带有PTE和的页面的第一个映射上设置PG_double_map ,当页面从页面缓存中被驱逐时,该页面就会消失。...参考⽂献 Linux-5.10.50源码 Documentation/vm/transhuge.rst Documentation/admin-guide/mm/transhuge.rst

2.6K40

Mongodb 缓存结构, 为什么我那么快 (1)

MONGODB 的数据库引擎WiredTiger, 使用PAGE 的方式,来存储数据,但是磁盘和内存的页面的结构是不一致的, 内存的页面的结构为B-TREE 结构。...这里根据官方给出的说明 internal page 的大小在 4kb , Leaf page 的大小在 32KB 在leaf page 中存在 dirty leaf page 区域,在插入数据后脏分为两种...当在数据库中存在脏后,通过checkpoint 来将脏刷新到磁盘,在刷新时避免影响当前的业务,内存中会将需要刷新页面以及他的上层节点和根节点产生一个新的内存的 COPY , 继续工作,老的脏会进行刷新的操作...什么是跳表 https://www.jianshu.com/p/9d8296562806 除定时刷新以外,缓存中的脏超过阀值,都会触发刷新的工作....这里的缓存页面主要有 1 memory_page_max 在内存中的最大的内存页面的大小, 首先这个页面定义成整型的页面,默认值为5MB,这个值主要的作用在于,当对于内存的页面的大小设置,这个页面的大小的设置在于整体内存页面在内存中的申请和分割的原则

70330

系统内存管理:虚拟内存、内存分段与分页、缓存TLB以及Linux内存管理

内存分页内存分页是将整个虚拟和物理内存空间划分为固定大小的连续内存块,称为(Page)。在Linux下,每一的大小通常为4KB。...缓存TLB(Translation Lookaside Buffer)TLB(Translation Lookaside Buffer)是一个位于CPU芯片中的缓存,用于存储程序中最常访问的表项,...因此,通过将最常访问的表项存储到TLB这个硬件缓存中,可以更快地进行地址转换。在CPU芯片中,内存管理单元(Memory Management Unit)芯片负责处理地址转换和TLB的访问与交互。...这是因为程序执行过程中,访问的表项相对固定。通过利用TLB,可以大大提高地址转换的速度,加快程序的执行效率。Linux内存管理Linux内存管理涉及逻辑地址和线性地址的转换。...虚拟内存的实现方式有分段和分页,其中分页机制更为常用,采用多级表的方式节约了内存空间。缓存TLB能够加快虚拟地址到物理地址的转换速度。

45580

一文看懂 | 什么是缓存(Page Cache)

由于读写硬盘的速度比读写内存要慢很多(DDR4 内存读写速度是机械硬盘500倍,是固态硬盘的200倍),所以为了避免每次读写文件时,都需要对硬盘进行读写操作,Linux 内核使用 缓存(Page Cache...本文使用的 Linux 内核版本为:Linux-2.6.23 什么是缓存 为了提升对文件的读写效率,Linux 内核会以大小(4KB)为单位,将文件划分为多数据块。...否则,内核首先会申请一个空闲的内存缓存),然后从文件中读取数据到缓存,并且把缓存的数据拷贝给用户。...当向文件中写入数据时,如果要写入的数据所在的缓存已经存在,那么直接把新数据写入到缓存即可。否则,内核首先会申请一个空闲的内存缓存),然后从文件中读取数据到缓存,并且把新数据写入到缓存中。...对于被修改的缓存,内核会定时把这些缓存刷新到文件中。 缓存的实现 前面主要介绍了缓存的作用和原理,接下来我们将会分析 Linux 内核是怎么实现缓存机制的。

18.8K104

Linux申请大内存(mmap)

---- 1.为什么要使用大内存   了解操作系统内存管理的人一般都知道操作系统对内存采用多级表和分页进行管理,操作系统每个默认大小为4KB。...如果进程使用的内存过大,比如1GB,这样会在表中占用 1GB / 4KB = 262144个表项,而系统TLB可以容纳的表项远小于这个数量。...操作系统默认支持的大是2MB,当使用1GB内存时,在表中将占用 1GB / 2MB = 512个表项,可以大大提升TLB命中率,进而提升应用性能。...---- 2.怎样使用大内存 2.1 先预留一定量的大内存 #先查看系统有多少已经预留的大内存 # cat /proc/meminfo |grep -i huge #预留192个大 # sysctl...vm.nr_hugepages=192 #查看是否预留成功 # cat /proc/meminfo |grep -i huge 2.2 通过系统调用来从预留的大内存中申请大 #include <sys

11.4K110

Linux内核的冷热缓存

缓存为什么会有冷热? 究其原因,是因为对于内存的访问,可能是CPU发起的,也可以是DMA设备发起的。 如果是CPU发起的,在CPU的硬件缓存中,就会保存相应的内容。...如果这个本来没有存在于硬件缓存中,那么它的到来,势必会将原本为其他的缓存的内容挤出硬件缓存。...但是,如果对于内存的访问是由DMA设备发起的,那么该页不会被CPU访问,就不需要在CPU的硬件缓存中进行缓存,也不会对已经缓存在硬件缓存中的内容造成伤害。...在Linux操作系统中,每个内存区域(Zone)都分配了hot cache和cold cache,hot cache用来缓存那些很可能被CPU的硬件缓存收纳了的。...如果gfp_flags中指定的__GFP_COLD,则从冷缓存中分配一,否则,从热缓存中分配。

1.8K20
领券