• Linux下的buff/cache



    一、buff/cache

    按照Linux内核文档所说的,buff/cache是Linux内核用于缓存文件系统数据的算法

    换句话说,buff/cache 就是Linux内核的缓存机制,用于存储被频繁读取的文件系统数据,包括但不限于文件系统的元数据和文件内容。因为读取缓存相较于从磁盘读取的速度要快得多,所以buff/cache 可以大大提升操作系统的整体性能,尤其是IO性能。

    buff/cache 是用于性能提升的一种技术手段,它通常与之相对应的是swap(虚拟内存)。swap 是用于内存管理的一种技术,通常用于解决内存不足的问题。


    二、buff/cache与内存管理

    在Linux系统中,内存管理是一项极为重要的任务,内核通过分配页面来管理系统的内存。在保证内存有足够的空闲页可用的前提下,内核会尽量将页面分配给进程,以便进行内存管理。但是,当进程的内存需求超过了系统可用内存,内核就需要进行一些特殊的处理,通常是将部分进程的页置换到磁盘上的swap分区中。

    buff/cache 则在内核获得了足够的可用空闲页面之后,利用这些页面创建缓存,并将被频繁读取的文件系统数据存储在缓存中。如果内核需要更多的空间来执行其他任务,可以终止缓存并释放内存。

    buff/cacheswap的功能截然不同,但它们都可以用于解决内存管理问题。Linux中内存管理是一门复杂的科学,buff/cache只是其中的一部分。


    三、buff/cache对系统性能的影响

    buff/cache对系统性能的影响直接取决于数据的读取情况。如果大部分数据都被频繁读取,那么buff/cache对系统性能的提升就会更加显著。

    在Linux系统中,当进程需要访问文件系统时,内核会首先在buff/cache中查找是否存在所需数据的缓存,如果找到了,就直接从缓存中读取。如果没有找到,那么内核就需要从磁盘中读取数据。相比于从磁盘中读取数据,从缓存中读取数据的速度要快得多。这就是buff/cache对系统性能的提升。

    在实际应用中,buff/cache对系统性能的提升可以非常显著。特别是在IO密集型应用中,buff/cache可以大大提高磁盘IO的速度,从而提升整个应用的响应速度。


    四、优化buff/cache

    为了最大化地利用buff/cache,管理员可以采取以下几种优化策略:

    1、调整vm.dirty_ratio和vm.dirty_background_ratio

    这两个参数用于控制内核将数据写入磁盘之前可用的内存大小。默认值设置得很保守,可以根据系统的需求进行调整,以提高系统的性能。

    /etc/sysctl.conf:

    # 修改 /etc/sysctl.conf 文件中的参数
    vm.dirty_ratio = 40
    vm.dirty_background_ratio = 10
    
    • 1
    • 2
    • 3

    2、配置vm.swappiness

    vm.swappiness控制内核在内存不足的情况下将数据交换到磁盘的速度。可以根据系统的实际情况进行调整,以提高系统的内存利用率。

    /etc/sysctl.conf:

    # 修改 /etc/sysctl.conf 文件中的参数
    vm.swappiness = 10
    
    • 1
    • 2

    3、配置vm.vfs_cache_pressure

    vm.vfs_cache_pressure用于控制内核缓存元数据和内容的程度。可以根据系统的实际情况进行调整,以提高系统的性能。
    /etc/sysctl.conf:

    # 修改 /etc/sysctl.conf 文件中的参数
    vm.vfs_cache_pressure = 50
    
    • 1
    • 2

    五、释放buff/cache

    清理脚本:

    #!/bin/bash
    echo "开始清理缓存"
    # 写入硬盘,防止数据丢失
    sync;sync;sync; 
    # 延迟10S
    sleep 10
    echo 1 > /proc/sys/vm/drop_caches
    echo 2 > /proc/sys/vm/drop_caches
    echo 3 > /proc/sys/vm/drop_caches
    echo "清理缓存结束"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    可使用 free -h 命令查看是否释放成功,详细说明查看:Linux命令:free命令

  • 相关阅读:
    代码随想录算法训练营第三十九天 |● 62.不同路径 ● 63. 不同路径 II
    论文笔记:A survey on zero knowledge range proofs and applications
    1、javaweb学习知识简析
    table标签、表格的跨行跨列、ifarme标签
    基于vue2.x搭建组件库的流程
    VAE, the principle and the code
    二叉树的详细实现(含递归展开图)
    他做国外LEAD,用了一年时间,把所有房贷都还清了
    通过QGIS下载高程数据并进行矢量数据高程的计算
    HTML简单介绍
  • 原文地址:https://blog.csdn.net/wangzhongshun/article/details/132949015