网站建设成本核算模板,海外建站,在什么网站上做精帖,苏州广告设计制作公司目录 前言一、Cache二、Buffer三、Linux 系统中的 Cache 与 Buffer总结 前言
内存的作用是什么#xff1f;简单的理解#xff0c;内存的存在是为了解决高速传输设备与低速传输设备之间数据传输速度不和谐而设立的中间层#xff08;学过计算机网络的应该都知道#xff0c;这… 目录 前言一、Cache二、Buffer三、Linux 系统中的 Cache 与 Buffer总结 前言
内存的作用是什么简单的理解内存的存在是为了解决高速传输设备与低速传输设备之间数据传输速度不和谐而设立的中间层学过计算机网络的应该都知道这就类似于端到端通信链路的吞吐量问题吞吐量取决于小的那一端同时也是存在瓶颈的一端。我们都知道计算机硬件中主要由三大部分构成即 CPU、内存、磁盘如今的计算机系统的 CPU 运算读写速率是非常高的内存其次而磁盘的读写却相较 CPU 和内存却是很慢的尽管是现如今的 SSD 盘。
一、Cache
什么是 Cache 呢字面意思就是“缓存”。首先 CPU 执行程序的指令是从内存中取出的计算后的结果也是要写回内存而在 CPU 将计算结果写回内存时内存的响应速度跟不上 CPU 的写入速度的话CPU 只能等待这样一来就白白浪费了 CPU 资源无法为等待服务的进程服务。
然而我们计算的数据是最终是要落盘的此时又出现了一个问题内存的读写速度明显是要大于磁盘的读写速度的。因此如果程序/CPU 直接读取磁盘中的数据时显然是更慢的。因此就诞生了内存我们可以把内存想象为左右两边有不同的数据传输速率如下图内存左边提供一个与 CPU 传输速率接近的传输接口右边提供一个与磁盘传输速率接近的传输接口。
然后程序每次去磁盘读取数据首先程序的这个请求需求会先通知内存说我要去读取磁盘中的数据内存收到请求后会以大致相同的速率从磁盘读取了程序需要的数据内存从磁盘拿到数据后就会将数据发送给程序同时内存自己会保存一份数据如果下次程序在去磁盘读取相同数据时就直接读内存中的数据即可因为程序到内存这里读取速度是很快的就不会存在大量的 CPU 资源浪费。因此我们可发现内存实际上提供了一个缓存能力这个缓存就是我们说的 Cache。 因此 Cache缓存发生在 CPU/程序的读数据阶段。
二、Buffer
那 Buffer 又是什么呢字面意思就是“缓冲”。我们说了CPU 计算的结果最终是要落盘的即程序产生的应用数据最终是要写入物理磁盘的。而我们又说了 CPU 的计算/传输速率是远远高于磁盘的如果没有内存来做缓冲那 CPU/程序要一直等待数据被写入磁盘这同样也导致 CPU 资源的浪费了。
于是有没有这样一直方法程序的数据先写入某个缓冲里面如下图写完后程序就去干其他事情去了至于数据落盘就由这个缓冲根据操作系统机制最终写入磁盘如 Linux 系统中就有一个守护进程去定期清空缓冲内容即将内容写入磁盘或你手动执行 sync 命令将这部分缓冲的数据写入磁盘而无需等待操作系统自动写入。因此我们可发现内存实际上也提供了一个缓冲能力这个缓冲就是我们说的 Buffer。 因此 Buffer缓冲发生在 CPU/程序的写数据阶段。
三、Linux 系统中的 Cache 与 Buffer
在 Linux 操作系统中Page Cache 对应的就是 Cache。Page Cache 是文件系统层级的缓存从磁盘中读取的内容都会缓存在 Cache 中这样程序读取磁盘内容时读取的是 Cache 中缓存的内容加快了数据读取速率。
在 Linux 操作系统中Buffer Cache 对应的就是 Buffer。Buffer Cache 是磁盘等块设备的缓冲这部分缓冲的数据是要写入磁盘的但要注意的是缓冲中的数据不是即时写入物理磁盘的而是在操作系统空闲或 Buffer 达到一定大小时写入到磁盘中。同时也会存在一定风险如果突然断电或手动关机那缓冲中的数据就会丢失。因此为了防止数据丢失在正常关机前应该执行一下 sync 命令让位于 Buffer 的数据立刻写入到物理磁盘中。
如下图这就是 Linux 系统中 buff/cache 的基本情况 上图中 buff/cache 表示缓存与缓冲的总容量大小即这部分数据包含了程序要读取的数据与程序要写入磁盘的数据。
那我们如何释放 buff/cache 呢
注意释放前我们必须要先执行一下 sync 指令切记切记让缓冲的数据写入磁盘后我们在释放 buff/cache 容量否则释放后本来要写入磁盘的重要数据都被你释放了。
1、手动数据写入磁盘
sync2、释放 buff/cache 这里分为三个释放级别 echo 1 /proc/sys/vm/drop_caches 释放页缓存中的所有页包括可回收的页不可回收的页以及页表页。这意味着它会释放大部分页缓存使系统可以在需要时重新加载文件数据。 echo 2 /proc/sys/vm/drop_caches 释放页缓存中的不可回收的页和页表页但会保留可回收的页。这允许系统释放一些内存同时保持可回收的页以提高性能。 echo 3 /proc/sys/vm/drop_caches 只释放可回收的页缓存不会触及不可回收的页或页表页。这可以帮助系统释放一些内存同时尽量保持可回收的页以提高性能。 释放前的 buff/cache 容量 释放后的 buff/cache 容量 echo 1 /proc/sys/vm/drop_caches那么问题又来了实际应用中这三个命令我们如何选择呢
选择哪个命令取决于你的需求和系统性能。如果你希望尽量释放内存并且不关心性能可以使用第一个命令。如果你想释放一些内存但仍然保持较好的性能可以使用第二个命令。如果你只想释放可回收的页并最大程度地保持性能可以使用第三个命令。
总结
作为专业的 Linux 系统管理/维护人员我们对 Linux 的结构、性能一定是要掌握的包括对 Linux 系统的基础优化也是要掌握的。如果有能力的话我建议看看 Linux 系统底层相关知识。
—END