目录
Cache 和 Buffer 的区别在哪里?
Cache 和 Buffer 是两个不同的概念,简单的说,Cache 是加速 “读”,而 Buffer 是缓冲 “写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为 buffer/ cache。
为什么需要缓存?
可以看到,CPU 最快,一个时钟周期是 0.3 纳秒,内存访问需要 120 纳秒,固态硬盘访问需要 50-150 微秒,传统硬盘访问需要 1-10 毫秒, 网络访问最慢,都是几十毫秒。
如果一个时钟周期如果按 1 秒算:
- 内存访问就是 6 分钟
- 固态硬盘是 2-6 天
- 传统硬盘是 1-12 个月
- 网络访问就是几年了!
如果你是 CPU,你会觉得这个世界真是慢死了!从硬盘访问数据得等待 “几天” 甚至 “几个月”!
所以存储器的层级关系出来了,存储器越往上速度越快,但是价格越来越贵, 越往下速度越慢,但是价格越来越便宜。
Linux 缓存机制
在 Linux 系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓存区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
-
buffers 用来缓存 metadata 及 pages,可以理解为系统缓存,例如:vi 打开一个文件。
-
cached 用来给文件做缓存,可以理解为数据块缓存,例如:dd if=/dev/zero of=/tmp/test count=1bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。
-
Swap 是交换分区,即通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到 Swap 中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到 Swap。
缓存机制优点: 减少系统调用次数,降低 CPU 上下文切换和磁盘访问频率。
CPU上下文切换: CPU 给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。
查看到系统内存的使用情况:
可以看出,系统内存为 16G,Swap 内存 16G,mem free 虽然显示为 1118,因缓存的存在,不能认为系统目前内剩下这么多内存。而应该把 buffers、cached 的也算上,即 free+cached+buffers=1118+7110+430=8658,总内存再减去 8658=7314,与 buffers/cache 行中对应 free 列的 7312 和 8659 基本一致。
相关阅读: