[转帖]dirty_ratio与dirty_background_ratio的区别

dirty,ratio,background,区别 · 浏览次数 : 0

小编点评

## Clean Ratio and Dirty Background Ratio **Introduction:** This blog post explores the concepts of **clean ratio** and **dirty background ratio** in Linux disk caching and performance optimization. By understanding these metrics, we can configure the system to optimize disk access and improve system responsiveness. **Clean Ratio:** * The **clean ratio** indicates the percentage of clean (unused) pages in memory that can be reused. * Setting a low **clean ratio** restricts the system from reclaiming memory for other purposes, potentially leading to a higher number of dirty pages and slower performance. * However, a high clean ratio also implies a larger amount of memory can be utilized, potentially leading to improved performance. **Dirty Background Ratio:** * The **dirty background ratio** specifies the maximum percentage of dirty pages allowed in memory before the system starts dropping inactive pages. * This value acts as a safety measure to prevent out-of-memory errors. * A low dirty background ratio allows more memory to be used, but it can lead to higher memory consumption and slower performance when the ratio is high. **Setting Dirty Ratio Values:** * By default, the **dirty background ratio** is set to 10%. * This means that up to 10% of dirty pages are allowed in memory before the system starts dropping inactive pages. * A value of 50% would allow for 50% of the memory to be used with a higher number of dirty pages, but this can be detrimental to performance. * A value of 80% is often used to balance performance and memory usage. **Conclusion:** Understanding the concepts of clean ratio and dirty background ratio allows us to optimize our Linux system by controlling the amount of memory allocated to dirty pages. By adjusting these values, we can achieve the desired balance between performance and memory usage.

正文

间接转自:https://feichashao.com/dirty_ratio_and_dirty_background_ratio/


我是搬运工,搬运Better Linux Disk Caching & Performance with vm.dirty_ratio & vm.dirty_background_ratio这篇博客。
本人实验环境:Red Hat Enterprise Linux Server release 6.5 (Santiago)

参考文档

http://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/


有关Cache

文件缓存是提升性能的重要手段。毋庸置疑,读缓存(Read caching)在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据),而写缓存(Write caching)则相对复杂。Linux内核将写磁盘的操作分解成了,先写缓存,每隔一段时间再异步地将缓存写入磁盘。这提升了IO读写的速度,但存在一定风险。数据没有及时写入磁盘,所以存在数据丢失的风险。

同样,也存在cache被写爆的情况。还可能出现一次性往磁盘写入过多数据,以致使系统卡顿。之所以卡顿,是因为系统认为,缓存太大用异步的方式来不及把它们都写进磁盘,于是切换到同步的方式写入。(异步,即写入的同时进程能正常运行;同步,即写完之前其他进程不能工作)。

好消息是,你可以根据实际情况,对写缓存进行配置。
可以看一下这些参数:

[root@host ~]# 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这些后台进程会稍后清理脏数据。举一个例子,我有32G内存,那么有3.2G的内存可以待着内存里,超过3.2G的话就会有后来进程来清理它。

vm.dirty_ratio 是绝对的脏数据限制,内存里的脏数据百分比不能超过这个值。如果脏数据超过这个数量,新的IO请求将会被阻挡,直到脏数据被写进磁盘。这是造成IO卡顿的重要原因,但这也是保证内存中不会存在过量脏数据的保护机制。

vm.dirty_expire_centisecs 指定脏数据能存活的时间。在这里它的值是30秒。当 pdflush/flush/kdmflush 进行起来时,它会检查是否有数据超过这个时限,如果有则会把它异步地写到磁盘中。毕竟数据在内存里待太久也会有丢失风险。

vm.dirty_writeback_centisecs 指定多长时间 pdflush/flush/kdmflush 这些进程会起来一次。

可以通过下面方式看内存中有多少脏数据:

[root@host ~]# cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty 69
nr_writeback 0
nr_writeback_temp 0

这说明了,我有69页的脏数据要写到磁盘里。


情景1:减少Cache

你可以针对要做的事情,来制定一个合适的值。
在一些情况下,我们有快速的磁盘子系统,它们有自带的带备用电池的NVRAM caches,这时候把数据放在操作系统层面就显得相对高风险了。所以我们希望系统更及时地往磁盘写数据。
可以在/etc/sysctl.conf中加入下面两行,并执行"sysctl -p"

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

这是虚拟机的典型应用。不建议将它设置成0,毕竟有点后台IO可以提升一些程序的性能。


情景2:增加Cache

在一些场景中增加Cache是有好处的。例如,数据不重要丢了也没关系,而且有程序重复地读写一个文件。允许更多的cache,你可以更多地在内存上进行读写,提高速度。

vm.dirty_background_ratio = 50
vm.dirty_ratio = 80

有时候还会提高vm.dirty_expire_centisecs 这个参数的值,来允许脏数据更长时间地停留。


情景3:增减兼有

有时候系统需要应对突如其来的高峰数据,它可能会拖慢磁盘。(比如说,每个小时开始时进行的批量操作等)
这个时候需要容许更多的脏数据存到内存,让后台进程慢慢地通过异步方式将数据写到磁盘当中。

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

这个时候,后台进行在脏数据达到5%时就开始异步清理,但在80%之前系统不会强制同步写磁盘。这样可以使IO变得更加平滑。


从/proc/vmstat, /proc/meminfo, /proc/sys/vm中可以获得更多资讯来作出调整。

与[转帖]dirty_ratio与dirty_background_ratio的区别相似的内容:

[转帖]dirty_ratio与dirty_background_ratio的区别

间接转自:https://feichashao.com/dirty_ratio_and_dirty_background_ratio/ 我是搬运工,搬运Better Linux Disk Caching & Performance with vm.dirty_ratio & vm.dirty_bac

[转帖]Linux磁盘I/O(二):使用vm.dirty_ratio和vm.dirty_background_ratio优化磁盘性能

文件缓存是一项重要的性能改进,在大多数情况下,读缓存在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据)。写缓存比较复杂,Linux内核将磁盘写入缓存,过段时间再异步将它们刷新到磁盘。这对加速磁盘I/O有很好的效果,但是当数据未写入磁盘时,丢失数据的可能性会增加。 当然,也存在缓存被写爆的

[转帖]writeback mmap-ed dirty page

https://zhuanlan.zhihu.com/p/517122285 问题 文件系统接口写脏的page cache, 因为主动调用了syscall, os知道该dirty page并在inode上进行标记, 之后合适的时间会进行writeback, 那么对于mmap后直接对地址进行写的数据,

[转帖]Linux内存管理 -- /proc/{pid}/smaps讲解

https://www.jianshu.com/p/8203457a11cc 本文包括如下三部分: 基本介绍与输出介绍 第一行基础信息讲解 详细信息讲解3.1 Size3.2 Rss3.3 Pss、Shared/Private_Clean/Dirty3.4 Referenced3.5 Anonymo

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地