linux I/O优化 磁盘读写参数设置

vm内核参数之内存脏页dirty_writeback_centisecs和dirty_expire_centisecs 注:本文分析基于3.10.0-693.el7内核版本,即CentOS 7.4 1、背景 在《BDI writeback脏页回写》中我们了解了BDI的一些基本结构以及初始化和一些触发路径,现在我们要更深了解下脏页的writeback,一个是脏页什么时候会被处理,另一个是多久会触发脏页的writeback。 2、脏页形成路径 脏页由写操作引,毕竟读操作不会引起数据的不一致性。不管应用层以什么方式将数据变脏,最终都会调用__mark_inode_dirty将inode标记dirty。而调用__mark_ino 阅读详情

转载:http://wlservers.blog.163.com/blog/static/120622304201241715945256/


关于页面缓存的信息,可以用
cat /proc/meminfo 
看到。其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加。
一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。

Linux 用pdflush进程把数据从缓存页写入硬盘,查看有多少个pdflush进程
cat /proc/sys/vm/nr_pdflush_threads

pdflush的行为受/proc/sys/vm中的参数的控制
/proc/sys/vm/dirty_writeback_centisecs (default 500): 
1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个(更多个)线程。
如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题。

pdflush的第一件事是读取
/proc/sys/vm/dirty_expire_centiseconds (default 3000)
1/100秒。缓存页里数据的过期时间(旧数据),在下一个周期内被写入硬盘。默认30秒是一个很长的时间。

第二件事是判断内存是否到了要写入硬盘的限额,由参数决定:
/proc/sys/vm/dirty_background_ratio (default 10)
百分值,保留过期页缓存(脏页缓存)的最大值。是以MmeFree+Cached-Mapped的值为基准的

pdflush写入硬盘看两个参数:
1 数据在页缓存中是否超出30秒,如果是,标记为脏页缓存;
2 脏页缓存是否达到工作内存的10%;

以下参数也会影响到pdflush
/proc/sys/vm/dirty_ratio (default 40)
总内存的最大百分比,系统所能拥有的最大脏页缓存的总量。超过这个值,开启pdflush写入硬盘。如果cache增长快于pdflush,那么整个系统在40%的时候遇到I/O瓶颈,所有的I/O都要等待cache被pdflush进硬盘后才能重新开始。

对于有高度写入操作的系统
dirty_background_ratio: 主要调整参数。如果需要把缓存持续的而不是一下子大量的写入硬盘,降低这个值。
dirty_ratio:        第二调整参数。

Swapping参数
/proc/sys/vm/swappiness
默认,linux倾向于从物理内存映射到硬盘缓存,保持硬盘缓存尽可能大。未用的页缓存会被放进swap区。
数值为0,将会避免使用swapping
100,将会尽量使用swapping
少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。

如果有大量的写操作,为避免I/O的长时间等待,可以设置:
$ echo 5 > /proc/sys/vm/dirty_background_ratio
$ echo 10 > /proc/sys/vm/dirty_ratio

文件系统数据缓冲需要频繁的内存分配。加大保留内存的值能提升系统速度和稳定。小于8G的内存,保留内存为64M,大于8G的设置为256M
$ echo 65536 > /proc/sys/vm/min_free_kbytes


I/O 调度器
cat /sys/block/[disk]/queue/scheduler

4中调度算法
noop anticipatory deadline [cfq] 
deadline :    deadline 算法保证对既定的IO请求以最小的延迟时间。
anticipatory:    有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。
        对数据库应用很糟糕,而对于Web Server等则会表现不错。
cfq:        对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。
noop:        对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。

改变调度器
$ echo deadline > /sys/block/sdX/queue/scheduler
对于数据库服务器,deadline算法是推荐的。

提高调度器请求队列的
$ echo 4096 > /sys/block/sdX/queue/nr_requests

有大量的读请求,默认的请求队列应付不过来,可以提高这个值。缺点是要牺牲一定的内存。
为了增加连续读取的吞吐量,可以增加预读数据量。预读的实际值是自适应的,所以使用一个较高的值,不会降低小型随机存取的性能。
$ echo 4096 > /sys/block/sdX/queue/read_ahead_kb
如果LINUX判断一个进程在顺序读取文件,那么它会提前读取进程所需文件的数据,放在缓存中。
  


服务器遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。

/proc/sys/vm/dirty_ratio

控制文件系统的写缓冲区的大小,单位是百分比,表示占系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值。
/proc/sys/vm/dirty_background_ratio
控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘.每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘.增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值:
/proc/sys/vm/dirty_writeback_centisecs
控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。
如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值。
该参数的设置应该小于dirty_expire_centisecs,但也不能太小,太小I/O太频繁,反而
使系统性能下降。具体可能需要在生产环境上测试。据说1:6 (dirty_expire_centisecs  : dirty_writeback_centisecs )的比例比较好。

/proc/sys/vm/dirty_expire_centisecs

声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。
当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。

/proc/sys/vm/vfs_cache_pressure

表示内核回收用于directory和inode   cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode   cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode   cache;增加该值超过100,将导致内核倾向于回收directory和inode   cache

/proc/sys/vm/min_free_kbytes

表示强制Linux   VM最低保留多少空闲内存(Kbytes)。
缺省设置:724(512M物理内存)

/proc/sys/vm/nr_pdflush_threads

表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。
/proc/sys/vm/overcommit_memory
指定了内核针对内存分配的策略,其值可以是0、1、2。

0,   表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1,   表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2,   表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。

缺省设置:0
/proc/sys/vm/overcommit_ratio
如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:50(%)

/proc/sys/vm/page-cluster

表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:3(2的3次方,8页)
/proc/sys/vm/swapiness
表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

更改:
/etc/sysctl.conf

vm.dirty_ratio = 40

sysctl -p

查看:
find /proc/sys/vm  -name dirty*  -print   | while  read   name; do  echo $name ;cat ${name}; done

Linux:/proc/sys/vm/目录各文件详解 proc/sys/vm/ 目录是 Linux 系统中的一个特殊目录,它包含了与虚拟内存子系统相关的系统内核参数。这些参数可以用来配置系统的虚拟内存管理策略,包括内存分配、页面置换、内存压缩、NUMA 等方面的设置。用户和系统管理员可以通过修改这些内核参数来调整系统的内存管理行为,以优化系统性能或满足特定的应用需求。 阅读详情

相关推荐

linux中cgroup的简单使用

Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存磁盘输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。

Java+GO+JS全栈工程师-鹤冲天的博客:编程辅导~商务合作~技术交流 4336

Page Cache性能优化

对于回写方式在之前的2.4内核中,使用 bdflush的线程专门负责writeback的操作,因为磁盘I/O操作很慢,而现代操作系统通常具有多个块设备,如果bdflush在其中一个块设备上等待I/O操作的完成,可能需要很长的时间,此时其他块设备还处于空闲状态,这时候,单线程模式的bdflush就称为了影响性能的瓶颈。这样的配置,通过增大Cache总容量,更加频繁唤醒回的方式,解决IO峰值的问题,此时能保证脏数据比例保持在一个比较低的水平,当突然出现峰值,也有足够的Cache来缓存数据。

生活需要深度 1083

Tableau 组合图表实战:双柱图与折线图的动态对比分析

本文详细介绍了如何在Tableau中创建双柱图与折线图的组合图表,实现数据的动态对比分析。通过实战案例和分步教程,帮助用户掌握数据准备、图表构建和美化技巧,提升业务汇报效果。特别适合需要同时展示绝对数值和变化趋势的场景,如销售分析和库存管理。

weixin_27310417的博客 258

writeback bdi脏页回写原理linux内核源码解析

说起脏页回写,大部分文章介绍的是与脏页回写有关的参数,讲解内核源码的并不多,本文主要讲解脏页回写的内核源码,顺便会把这些脏页回写参数与内核源码结合起来。 文章正式开始前,先把这些与脏页回写有关的参数列一下: 1 dirty_writeback_centisecs:脏页回写周期,默认5s执行一次脏页回写。 2 dirty_expire_centisecs:控制脏页在内存中停留的时间,默认30s。就是说,当一个page被标记为脏页后,30s后就要被回写到磁盘。 3 dirty_background_byt.

dongzhiyan_hjp 4800

题解 | #统计字符#C++ unordered_map实现

接到一个小公司的软测offer,后续发展目标是后端或者测开,不知道值不值得去 #不给转正的实习,你还。现在就业环境太恶劣了,尤其是计算机,java开发,好多小公司直接不给一金,甚至只有一险,这样的公司值。一路磕磕绊绊到面试,做笔试的时候,这家公司的网站出问题了,几个小时后才完成,第二天就收到面试邀请,约。昨天刚在牛客许愿,今天就收到offer了,面经都在我的动态的文章,等我有时间把自己的八股整理一下回馈。有没有去过景嘉微日常的伙伴,我是硬件的,说六个月,可以干两个月跑路嘛,9月准备秋招#引流 字节 美团。

华鑫的专栏 1150

题解 | #用两个栈实现队列#C++暴力栈实现队列解法

1. 闲扯项目,一个很简单的东西,解释了好几遍,面试官就是听不懂,听不懂还要继续问,浪费巨多时间,我:“您说的对”。# 运营商,上班不到五年就开始有躺平打算,里面有些都是接班制的,很可能冲他爷爷那辈就开始在这上班了,家里都在这个系统内,十年寒。现在实习的部门是架构核心,但是就我观察离职率高,干的事偏打杂,晋升偏慢,+2要求非常严格,做的事需要自己驱动去想,不过背书强,业务实例数几万,qps接近亿级,+如题,违约去理想,收到了理想的offer letter 就算是签了两方吗?请广大牛友给点建议。

2301_79125431的博客 906

题解 | #没有重复项数字的全排列#C++暴力全排列函数解法

江苏大艺科技股份有限公司的待遇问题想问问各位有在这个公司上班的uu们,是做SQE方向的,有点不太明白做啥,当时面试的时候以为自己没戏,也没多问这个公司的加班和待。4.JVM内存模型?找到日常实习啦,公司规模还可以,想出售一下简历项目,提供简历编写,项目不算复杂适合找日常实习,适合门FPGA不久,没有项目和技术一般的友友(一个千兆以太网,一。前两天收到了oc和意向书,告知我被开了13级,在上海研究所那边,目前offer正在审批HR说现在不能换base了,想调到东莞那边去,包括面试时主管也有提到,各位。

2301_78234743的博客 962

打造高颜值智慧零售数据大屏:Vue+ECharts 实战教程 从零开始实现实时数据更新的零售分析仪表盘 零售商超数据可视化:技术栈选型与实现详解 ECharts 与 Vue 的完美结合:智慧零售大屏开

打造高颜值智慧零售数据大屏:Vue+ECharts 实战教程 从零开始实现实时数据更新的零售分析仪表盘 零售商超数据可视化:技术栈选型与实现详解 ECharts 与 Vue 的完美结合:智慧零售大屏开发全流程 动态数据驱动:智慧商超的数据大屏开发秘籍 如何构建实时销售和库存可视化的零售数据中心 智能零售数据分析:前端开发实战指南 Vue.js x ECharts:轻松实现动态商超数据大屏 零售数据分析的未来:构建可交互的智能大屏 5分钟搭建一个动态更新的零售数据仪表盘打造高颜值智慧零售数据大屏:Vue+EC

南北极之间 440

基于k8s Deployment的弹性扩缩容及滚动发布机制

1.同时按住win+R,输cmd,回车,进命令提示符窗口。怎么回事,从 12 月底到现在,怎么面试机会变得越来越多了,字节,腾讯,虾皮,京东,百度都约面了?材料在半导体挺吃香的啊。#给25届材料人的秋招建议# 秋招一定要多跑线下招聘会(有现场投简历十面试),宣讲会(听公司的福利待遇,方便以后有个对比,还可能有面试机会),反正要抓住一切可以。本人陕西双非二本,现在大二,参加过一些比赛,比如计挑赛、大学生数学建模大赛、还有一些小比赛,计挑赛也获得过C语言、office省二,然后国赛C语言落榜,只有of。

每天多一点干货 913

频繁项集算法实现-商品购物篮

商品购物篮 购物篮分析是商业领域最前沿、最具挑战性的问题之一,也是许多企业研究的重点问题。购物篮分析是通过发现顾客在一次购买行为中放购物篮中不同商品之间的关联,研究客户的购买行为,从而辅助零售企业制定营销策略的一种数据分析方法。 本章使用Apriori关联规则算法实现购物篮分析,发现超市不同商品之间的关联关系,并根据商品之间的关联规则制定销售策略。 购物篮关联规则挖掘主要步骤如下: 1)对原始数据进行数据探索性分析,分析商品的热销情况与商品结构。 2)对原始数据进行数据预处理,转换数据形式,使之符合Apr

weixin_45609831的博客 1489
上一篇: What is the difference between a processor, a chip, a socket, and a core?
下一篇: mac 地址限制 DHCPD 配置
user_friendly
博客等级 码龄15年 10粉丝 9原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值