在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统会先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据发给应用程序;当需要往文件中写数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。
下面是分析过程:先用 strace 跟踪 free 命令,看看它是如何计算 “buffers” 和 “cached” 的:显然 free 命令是从 /proc/meminfo 中读取信息的,跟我们直接读到的结果一样:那么 /proc/meminfo 中的 “Buffers” 和 “Cached” 又是如何得来的呢?
TLB 是 MMU 中页表的高速缓存,由于进程的虚拟地址空间是独立的,而 TLB 的访问速度又比 MMU 快得多,因此通过减少进程的上下文切换,减少 TLB 的刷新次数,可以提高 TLB 缓存的使用率,进而提高 CPU 的内存访问性能;
缓冲区的主要目的是进行流量整形,将大量的小规模I/O组织成稳定的少量大规模I/O,从而减少响应次数。换句话说,缓冲区用于平衡系统两端的处理速度。比如你不能用一点点数据写入硬盘,而是积累一定量的数据,一起写入一个块。cache和buffer的存储结构不同。
指标 描述 资源 Resource 服务器中的硬件资源 利用率 Utilization 资源提供服务的平均时间 饱和度 Saturation 资源承担额外工作量的能力,这类工作通常 排队 错误 Errors 错误事件数量。
buffers和cached被算在used里,因此第一行系统已使用内存used = buffers + cached + 第二行系统已使用内存used由于buffers和cached在系统需要时可以被回收使用,因此系统可用内存 = free + buffers + cached;