• 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命令

  • 相关阅读:
    前端基础(四十六):你不知道的JavaScript - 元编程 - 公开符号
    从react源码看hooks的原理
    Ubuntu 20.04 安装NVIDIA显卡驱动+cuda 11.7+cudnn
    从零开始手写一个Transformer
    【工作规划】未来自我学习计划及发展注意事项
    git、、
    Vim实用技巧_2.普通模式和插入模式
    一些没什么技巧的数据结构
    Elasticsearch Analyzer 内置分词器
    MySQL 上亿数据查询优化:策略与实践
  • 原文地址:https://blog.csdn.net/wangzhongshun/article/details/132949015