linux硬盘IO优化相关资料整理

内核相关参数

相关内核参数,有条件的话可以修改参数测试验证一下。

1、/proc/sys/vm/dirty_ratio

这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。

增大参数会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但当需要持续、恒定的写入场合时,应该降低其数值:

echo ‘1‘ > /proc/sys/vm/dirty_ratio

对数据强一致性要求较高的系统,并且长期系统IO压力不大时,建议降低该值,可以理解为类似direct_io 。

2、/proc/sys/vm/dirty_background_ratio

这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存。

增大时会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但当需要持续、恒定的写入场合时,应该降低其数值:

echo ‘1‘ > /proc/sys/vm/dirty_background_ratio

dirty_ratio vs dirty_background_ratio通常系统会先达到dirty_background_ratio的条件然后触发flush进程进行异步的回写操作,但是这一过程中应用进程仍然可以进行写操作,如果多个应用进程写入的量大于flush进程刷出的量那就会达到dirty_ratio这个参数所设定的值,此时操作系统会 转入同步地处理脏页的过程,阻塞应用进程。

3、/proc/sys/vm/dirty_writeback_centisecs

该参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:

echo "100" > /proc/sys/vm/dirty_writeback_centisecs

如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:

echo "1000" > /proc/sys/vm/dirty_writeback_centisecs

4、/proc/sys/vm/dirty_expire_centisecs

该参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提交太快。

echo "100" > /proc/sys/vm/dirty_expire_centisecs

当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。

5、/proc/sys/vm/vfs_cache_pressure

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

6、 /proc/sys/vm/min_free_kbytes

该文件表示强制Linux   VM最低保留多少空闲内存(Kbytes)。

缺省设置:724(512M物理内存)

7、/proc/sys/vm/nr_pdflush_threads

该文件表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。   缺省设置:2(只读)

8、/proc/sys/vm/swapiness

该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。控制swappness 参数,尽量减少应用的内存被交换到交换分区中,默认是60。

I/O性能分析工具:

vmstat

iostat

I/O性能调优工具:sysctl

I/O调度器

一) I/O调度的4种算法

1) CFQ(Completely Fair Queuing, 完全公平排队)

在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择。CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中。CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择。

2) NOOP(电梯式调度程序)

NOOP实现了一个FIFO队列,它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质。NOOP对于闪存设备,RAM,嵌入式系统是最好的选择。

3) Deadline(截止时间调度程序)

Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象。Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择。

4) AS(预料I/O调度程序)

本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其它I/O请求进行调度。可以从应用程序中预订一个新的读请求,改进读操作的执行,但以一些写操作为代价。它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量。

AS适合于写入较多的环境,比如文件服务器。AS对数据库环境表现很差。

二) I/O调度方法的查看与设置

1) 查看当前系统的I/O调度

[root@test1 tmp]# cat /sys/block/sda/queue/scheduler

noop anticipatory deadline [cfq]

2) 临时更改I/O调度

例如:想更改到noop电梯调度算法:

echo noop > /sys/block/sda/queue/scheduler

3) 永久更改I/O调度

修改内核引导参数,加入elevator=调度程序名

[root@test1 tmp]# vi /boot/grub/menu.lst

更改到如下内容:

kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

重启之后,查看调度方法:

[root@test1 ~]# cat /sys/block/sda/queue/scheduler

noop anticipatory [deadline] cfq

文件系统基本属性

1.在对于上G的这种大文件做I/O时,各种通用文件系统间的性能差距较小,性能瓶颈

往往在磁盘上。小文件读写瓶颈是磁盘的寻址(tps),大文件读写的性能瓶颈是带宽。

如果文件系统中是一些比较大的文件的话,设置较大的块大小将得到较好的性能。

2、三种日志模式:

日志(Journal )
文件系统所有数据和元数据的改变都记入日志。这种模式减少了丢失每个文件所作修

改的机会,但是它需要很多额外的磁盘访问。这是最安全和最慢的日志模式。

预定(Ordered )
只有对文件系统元数据的改变才记入日志。是缺省的日志模式。

写回(Writeback )

不执行任何形式的数据日志记录。

3、Ext4

 Ext4对ext3主要作了两方面的优化:

 一是inode预分配。这使得inode具有很好的局部性特 征,同一目录文件inode尽量放在一起,加速了目录寻址与操作性能。因此在小文件应用方面也具有很好的性能表现。

 二是extent/delay/multi的数据块分配策 略。这些策略使得大文件的数据块保持连续存储在磁盘上,数据寻址次数大大减少,显著提高I/O吞吐量。

对于顺序大I/O读写,EXT4是较好的选择。ext4 支持最大 16 TB 的文件(假设由 4KB 的块组成)。

时间: 2024-08-02 02:51:33

linux硬盘IO优化相关资料整理的相关文章

http连接优化与浏览器允许的并发请求资源数相关资料(整理转载)

网页性能优化相关资料: https://developer.yahoo.com/performance/rules.html#page-nav 前端技术的逐渐成熟,还衍生了domain hash, cookie free, css sprites, js/css combine, max expires time, loading images on demand等等技术.这些技术的出现和大量使用都和并发资源数有关. 按照普通设计,当网站cookie信息有1 KB.网站首页共150个资源时,用户

archlinux相关资料整理

Arch linux Arch Linux Wiki Arch linux Wiki Markdown Arch Wiki python continuing ... archlinux相关资料整理,布布扣,bubuko.com

linux系统IO优化

Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据. 基本使用 $iostat -d -k 1 10 参数 -d 表示,显示设备(磁盘)使用状态:-k某些使用block为单位的列强制使用Kilobytes为单位:1 10表示,数据显示每隔1秒刷新一次,共显示10次. # iostat -x 1 10 Linux 2.6.18-92.el5xen    02/03/2009 avg-c

商代王后妇好、玉器及特展相关资料整理

1.展览的相关说明 展览: 玉鸣锵锵--商代王后妇好玉器特展 时间: 2016.12.27-2017.3.26 地点: 三楼书画厅 本展览为收费展览,全票30元,半票15元. 半票优惠人群: 教师.学生.军人(购票时出示相关证件:60岁以上老人(购票时出示身份证或老人证):1.2-1.4米儿童:20人以上团体. 免票范围: 1.2米以下小童(需在成人陪同下参观):博物馆同行.博物馆协会成员(检票时出示相关证件):残障人士(检票时出示相关证件). 2.展览分为五个部分 第一部分:"发现妇好&quo

SQLServer 学习相关资料整理【转】

存储过程: SQL Server 存储过程 博客园上的一篇文章,讲解的非常详细,有测试代码,很实用. sqlserver存储过程中执行动态sql语句  The Curse and Blessings of Dynamic SQL 存储过程及游标学习笔记 博客园,很基础,很细致,不错的文章. T_SQL语句: sqlserver跨服务器查询的实现  详细讲述了如何实现跨服务器的增删查改. sqlserver事务处理  包含了如何在sql语句中写以及在C#中写事务,不 sqlserver字段类型详解

微信小程序事件始末及相关资料整理

转载请注明来源:前端之巅 微信公众号 小道消息 昨晚(9月21日晚)10:51,冯大辉在他的知名微信公众号小道消息上发了一篇7字标题的文章<微信应用号来了>,并加了“微信是一个操作系统”这么一句导语,瞬间刷爆尾尾的朋友圈. 微信应用号来了.jpg 冯大辉何许人也?大家可以看下他在2016 GTLC全球技术领导力峰会上的演讲<冯大辉最后一次CTO演讲:如何抓住技术浪潮变革的红利?>感受下. 文章简短,列出了应用号的定义:“微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程

检测Linux硬盘IO数据

首先安装sysstat(有些系统会预装): apt install sysstat 然后使用命令: iostat -x -k 2 x选项用于显示和io有关的扩展数据 k某些使用block为单位的字段改为用Kilobytes做单位显示. 2表示刷新时间,2秒一次 如果不加时间则只显示一次

Atom相关资料整理

官网地址 https://atom.io/ Atom 中文社区 https://atom-china.org/ 常用插件 Emmet 这款插件是用来支持zend-coding,Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度. linter linter是一个粗糙的检查,有很多针对专门项的代码检查,如linter-jshint.linter-csslint.lint

使用iostat来对linux硬盘IO性能进行检测

# iostat -x 1 10 rrqm/s:        每秒进行 merge 的读操作数目.即 delta(rmerge)/swrqm/s:        每秒进行 merge 的写操作数目.即 delta(wmerge)/sr/s:              每秒完成的读 I/O 设备次数.即 delta(rio)/sw/s:             每秒完成的写 I/O 设备次数.即 delta(wio)/srsec/s:           每秒读扇区数.即 delta(rsect