首页 > 系统相关 >Linux的磁盘缓存和刷脏页

Linux的磁盘缓存和刷脏页

时间:2023-05-20 14:55:47浏览次数:69  
标签:缓存 ratio 刷脏页 写入 vm dirty Linux 磁盘

导读 无论您选择哪种路线,您都应该始终收集硬数据来支持您的更改,并帮助您确定是正在改进还是使事情变得更糟。在这种情况下,您可以从许多不同的位置获取数据,包括应用程序本身、/proc/vmstat、/proc/meminfo、iostat、vmstat 以及 /proc/sys/vm 中的许多内容。

我们讨论了Linux客户机上的内存如何用于操作系统本身(内核,缓冲区等),应用程序以及文件缓存。文件缓存是一项重要的性能改进,在大多数情况下,读取缓存是一个明显的胜利,与直接使用 RAM 的应用程序相比,这是平衡的。写入缓存更棘手。Linux 内核将磁盘写入暂存到缓存中,并随着时间的推移将它们异步刷新到磁盘。这在加速磁盘 I/O 方面有很好的效果,但存在风险。当数据未写入磁盘时,丢失数据的可能性会增加。也有可能大量 I/O 也会使缓存不堪重负。是否曾经一次将大量数据写入磁盘,并在尝试处理所有这些数据时看到系统上出现大量暂停?这些暂停是缓存决定有太多数据要异步写入(作为非阻塞后台操作,让应用程序进程继续)并切换到同步写入(阻塞并使进程等待 I/O 提交到磁盘)的结果。当然,文件系统还必须保留写入顺序,因此当它开始同步写入时,它首先必须转储缓存。因此长时间停顿。好消息是,这些都是可控的选项,根据您的工作负载和数据,您可以决定如何设置它们。一起来看看:

$ sysctl -a | grep dirty
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000

​vm.dirty_background_ratio是在 pdflush/flush/kdmflush 后台进程启动将其写入磁盘之前,可以用“脏”页(仍需要写入磁盘的内存页)填充的空闲内存和缓存和的百分比。我的例子是 10%,所以如果我的虚拟服务器有 32 GB 的内存,那就是 3.2 GB 的数据,可以在完成某些操作之前驻留在 RAM 中。vm.dirty_ratio 是在必须将所有内容提交到磁盘之前可以用脏页填充的绝对最大系统内存量。当系统到达此时,所有新的 I/O 块,直到脏页已写入磁盘。这通常是长时间 I/O 暂停的根源,但可以防止在内存中不安全地缓存过多数据。vm.dirty_background_bytes和vm.dirty_bytes是指定这些参数的另一种方法。如果设置_bytes版本,则_ratio版本将变为 0,反之亦然。vm.dirty_expire_centisecs是某些内容在需要写入之前可以在缓存中存在多长时间。在本例中为 30 秒。当 pdflush/flush/kdmflush 进程启动时,它们将检查脏页的年龄,如果它早于此值,它将异步写入磁盘。由于在内存中保存脏页是不安全的,这也是防止数据丢失的一种保护措施。vm.dirty_writeback_centisecs是 pdflush/flush/kdmflush 进程唤醒并检查是否需要完成工作的频率。​您还可以在 /proc/vmstat 中查看有关页面缓存的统计信息:

$ cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty 878
nr_writeback 0
nr_writeback_temp 0

就我而言,我有 878 个脏页等待写入磁盘。方法 1:减少缓存与计算机世界中的大多数事情一样,如何调整这些取决于您要做什么。在许多情况下,我们有快速磁盘子系统,它们有自己的大型电池备份 NVRAM 缓存,因此将内容保留在操作系统页面缓存中是有风险的。让我们尝试更及时地将 I/O 发送到阵列,并减少我们的本地操作系统(借用服务行业的一句话)“陷入困境”的可能性。为此,我们通过向 /etc/sysctl.conf 添加新数字并使用 “sysctl –p” 重新加载来降低vm.dirty_background_ratio和vm.dirty_ratio:

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

这是虚拟机以及基于 Linux 的虚拟机管理程序的典型方法。我不建议将这些参数设置为零,因为某些后台 I/O 可以将应用程序性能与磁盘阵列和 SAN 上短时间的高延迟(“峰值”)分离。方法 2:增加缓存在某些情况下,显著提高缓存会对性能产生积极影响。在这些情况下,Linux 来宾上包含的数据并不重要并且可能会丢失,并且通常是应用程序重复或以可重复的突发方式写入相同的文件。从理论上讲,通过允许内存中存在更多的脏页,您将在缓存中一遍又一遍地重写相同的块,并且只需要每隔一段时间对实际磁盘进行一次写入。为此,我们提高了参数:

vm.dirty_background_ratio = 50
vm.dirty_ratio = 80

有时人们还会增加 vm.dirty_expire_centisecs 参数以允许缓存中更多时间。除了数据丢失的风险增加之外,如果缓存已满并需要转储,还面临长时间 I/O 暂停的风险,因为在大型 VM 上,缓存中会有大量数据。方法3:双向在某些情况下,系统必须处理不频繁的突发流量到慢速磁盘(整点顶部的批处理作业、午夜、写入 Raspberry Pi 上的 SD 卡等)。在这种情况下,一种方法可能是允许将所有写入 I/O 存放在缓存中,以便后台刷新操作可以随着时间的推移异步处理它:

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

在这里,后台进程在达到 5% 的上限时将立即开始写入,但系统不会强制同步 I/O,直到它达到 80% 满。从那里,您只需调整系统RAM的大小,vm.dirty_ratio就可以消耗所有写入的数据。同样,磁盘上的数据一致性需要权衡,这转化为数据风险。购买 UPS 并确保您可以在 UPS 断电之前转储缓存。:)无论您选择哪种路线,您都应该始终收集硬数据来支持您的更改,并帮助您确定是正在改进还是使事情变得更糟。在这种情况下,您可以从许多不同的位置获取数据,包括应用程序本身、/proc/vmstat、/proc/meminfo、iostat、vmstat 以及 /proc/sys/vm 中的许多内容。可以看到这个脏页配置也是一种艺术,需要根据实际情况下调整,注意vm.dirty_background_ratio配置的比例是缓存和空闲内存的比例,vm.dirty_ratio是总内存的比例。

本文地址:https://www.linuxprobe.com/linux-disk-io.html

标签:缓存,ratio,刷脏页,写入,vm,dirty,Linux,磁盘
From: https://www.cnblogs.com/linuxprobe19/p/17362726.html

相关文章

  • Android之ActionBar、Tabs、Fragment、ViewPager实现标签页切换并缓存页面
    感觉Android到处都是坑,每个地方都要把人折腾半天。今天来简单说说Android之ActionBar、Tabs、Fragment、ViewPager实现标签页切换并缓存页面关于他们的介绍就不多说了,网上到处都是,只说关键的部分:我在开发的时候遇到几个疑难问题,花费大量时间处理,总结如下:1.关于Fragment内部......
  • Linux串口映射
    Linux串口映射在进行Linux开发过程中,发现串口插入的顺序不同,串口号会随之变化,这是由于Linux的特性决定的。根据设备的上电顺序分配ID,但是这样在程序运行过程中,出现串口变化的话,会导致程序出现错误,因此我们采用串口映射的方式,给物理串口分配一个别名,利用别名来避免这种问题。......
  • Linux初识
        ......
  • linux用户和组命令
    1、用户和组用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的......
  • linux程序管理命令
    1、yum命令1.1介绍yum,yellowdogupdatermodified是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。(在centos中,默认使用该工具而非apt)基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁......
  • Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
    干货!文章有点长,建议先收藏引言一、性能怪兽-Nginx概念深入浅出二、Nginx环境搭建三、Nginx反向代理-负载均衡四、Nginx动静分离五、Nginx资源压缩六、Nginx缓冲区七、Nginx缓存机制八、Nginx实现IP黑白名单九、Nginx跨域配置十、Nginx防盗链设计十一、Nginx大文件传输配置十二、Ngi......
  • linux默认目录和常用文件、目录
    1、介绍各种linux发行版本之间遵循基本一致的文件命名和使用规则,目录本身不具备特殊性,而是系统默认运行、安装、配置等会将文件保存在各个约定的目录下,建议用户也遵循这一约定,方便管理。2、默认目录(1)binbinaries二进制文件的缩写,存放的是普通命令。比如cat,cd(2)sbinsuperbin......
  • linux文件和目录命令
    1、ls单词list的缩写,列举当前目录下的文件。ls列举文件ls-a列举所有文件,包括.和..ls-l列举ls涉及文件的详细信息,可以和-a同时使用ls-S根据文件大小排序ls-t根据更新时间排序lsa*列出以a开头的文件,如果是目录,会列出目录以及目录的一级子文件lsa*w*可以同时列出......
  • linux介绍
    Linux教程|菜鸟教程(runoob.com)1、操作系统技术的发展从根本上来说,是因为需要而形成的。操作系统也是如此。所谓操作系统,就是对三类对象服务的特殊程序:对普通用户,提供文件管理系统和统一规范的交互方式,分为命令式和图形化对开发者,提供对底层资源统一的调用方式,协调各程......
  • linux默认目录
    1、介绍在linux中,一切皆文件,即通过对文件的操作实现不同功能。(ll命令查看)目录是文件、网络访问也是文件、硬件设备还是文件。2、文件属性(1)文件类型第一个字符表示文件类型:d对应目录、-对应文件、l对应链接文档,b表示为装置文件里面的可供储存的接口设备(可随机存取装置);c......