《Tuning I/O Performance》,文章地址:http://doc.opensuse.org/products/draft/SLES/SLES-tuning_sd_draft/cha.tuning.io.html

大家在读了原文后若有更好的见解,请不吝赐教,谢谢!

文章以SUSE Linux Enterprise Server为例讲解了Linux系统的IO调度策略及调优,可适应于其他Linux操作系统,如CentOS、UBUNTU等。

1、查看当前IO调度策略(大多数Linux发行版的默认策略是CFQ)

命令:cat /sys/block/sda/queue/scheduler

结果:noop anticipatory deadline [cfq]   #CentOS系统,可知可用的调度策略和当前调度策略,[]中的为当前系统采用的调度策略

2、更改当前调度策略

a、在系统启动时加入elevator=SCHEDULER 的内核参数

b、直接修改内核参数:echo SCHEDULER > /sys/block/DEVICE/queue/scheduler

3、策略调优

各个策略均有参数可以调优,参数路径大致相同,在 /sys/block/DEVICE/queue/iosched/目录下

命令:echo VALUE > /sys/block/DEVICE/queue/iosched/TUNABLE

4、各主要策略调优

a、CFQ(Completely Fair Queuing)

i、CFQ是一个公平的算法,每个线程都有一个时间片来提交I/O请求,不同的任务也可以分配不同的I/O优先级(man 1 ionice)

ii、可调优的参数

/sys/block/<device>/queue/iosched/slice_idle

#就算一个任务当前没有I/O请求了,采用此策略仍然会等待一段时间才切换到下一个线程。

#针对 SSDs、多磁盘SAN等当前磁道位置(不用额外花费时间寻址)不是特别重要的,只可以把此参数设置为0可以明显提高吞吐量。

/sys/block/<device>/queue/iosched/quantum
                      #限制设备同时处理的请求数量,默认值是4
                      #调高此值虽然可以提高性能,但因为并发处理量增多了,可能会增加某些I/O的延时

#所以可调整/sys/block/<device>/queue/iosched/slice_async_rq(默认是2,限制同一时间片的异步写请求数量)

/sys/block/<device>/queue/iosched/low_latency
                      #对I/O延迟要求非常高的负载环境中,可以将此值设置为1会好一些

b、NOOP

i、它是一种非常普通的调度策略,有I/O请求时它就处理,它可以用来检测其它调度算法在复杂I/O环境下是否引起了I/O性能。

ii、有自身的的调度算法的设备,如智能存储设备、SSDs等,虽然一般情况下DEADLINE更适合这些设备,但在较低负载下它的性能可能会更好。

c、DEADLINE

i、DEADLINE是为降低延时而设计的,每个I/O请求分配了一个结束时间,超时后便会暂存到队列(读和写两个队列)中,当没有超时的请求时再处理这些队                    列里的请求,这个算法对读的好处大于写。

ii、在并发读写及优先级不是非常重要的情况下,此调试要比CFQ策略性能好许多。

iii、调优参数

/sys/block/<device>/queue/iosched/writes_starved

#控制在多少个读请求后可以处理一个写请求,设置为3表示处理3个请求后可以处理一个写请求

/sys/block/<device>/queue/iosched/read_expire
                       #以毫秒为单位,默认值是500,设置读操作的超时时间(当前时间往后推read_expire值便是超时的时间点)

/sys/block/<device>/queue/iosched/write_expire
                       #同上,控制写请求超时时间

5、I/O Barrier调优

Write Barriers 是一种内核机制,可以保证文件系统元数据正确有序地写入持久化存储,哪怕持久化存储掉电的情况也能保证。大多数文件系统(XFS、ext3、ext4、reiserfs)在fsync或事务提交的时候便会触发 Write Barriers 。可在有备用电池的磁盘关闭 Write Barriers 来提高性能。

可在ext3、ext4、reiserfs文件系统挂载时加上barrier=0的选项,XFS挂载时使用nobarrier选项。

转载于:https://blog.51cto.com/wxiaowu/1547122

《Tuning I/O Performance》读后笔记相关推荐

  1. Best practice for JVM Tuning[转]

    原文地址:https://backstage.forgerock.com/knowledge/kb/article/a35746010 JVM tuning considerations Before ...

  2. kernel: TCP: out of memory -- consider tuning tcp_mem 问题处理记录

    问题:           1.通过/var/log/messages定位到原因,大概意思是TCP发送缓冲区满了 2.查看其默认tcp_mem配置:  解决办法: 1.vim /etc/sysctl. ...

  3. How Kafka’s Storage Internals Work

    In this post I'm going to help you understand how Kafka stores its data. I've found understanding th ...

  4. 对比学习系列论文SDCLR(二)-Self-Damaging Contrastive Learning

    目录 0.Abstract 0.1逐句翻译 0.2总结 1. Introduction 1.1. Background and Research Gaps 1.1.1逐句翻译 第一段(引出对比学习是否 ...

  5. weedfs java_初窥weedfs分布式文件系统

    介绍 Seaweedfs是一个简单,高扩展性的分布式文件系统,它的两个目标分别是: 存储数十亿级的文件 快速响应文件. seaweedfs选择以键值对(key->file)的实现方式,这有点像& ...

  6. 深度学习之对象检测_深度学习时代您应该阅读的12篇文章,以了解对象检测

    深度学习之对象检测 前言 (Foreword) As the second article in the "Papers You Should Read" series, we a ...

  7. OpenstackNova-KVM性能调优

    前言:请勿轻易调优,除非很清楚在干什么 KVM 作为 Nova 的虚拟化 Driver,是真正意义上负责虚拟机生命周期管理虚拟化基础设施,所以,如果清楚 KVM 的某些调优参数和策略,就有可能为 No ...

  8. nginx documentation | Development guide

    Table of Contents nginx documentation Development guide Nginx distributions ▪️ OpenResty   ▪️ The Te ...

  9. oracle中慢sql优化思路

    参考资料:官方文档SQL Tuning Guide https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tgsql/sql- ...

最新文章

  1. 记一次错误的伪静态配置文件
  2. 使用expdp导出时评估所需存储容量大小
  3. 纯php mysql_【总结】纯php 操作 mysql 数据库
  4. oracle11 删除表空间,oracle11g启动停止服务,修改字符集,导入导出,创建删除表空间,卸载oracle等...
  5. qemu-kvm磁盘读写的缓冲(cache)的五种模式
  6. org.apache.struts2.json.JSONWriter can not access a member of class
  7. Python库:Imageio库(待完善)
  8. 机器学习-octave使用
  9. Spring 应用开发框架 Spring Boot 2.3.0 最新版本发布
  10. 【手把手教你】股市技术分析利器之TA-Lib
  11. 张正友标定算法原理详解
  12. 大数据处理需要用到的九种编程语言
  13. 2018-2019-2 网络对抗技术 20165322 Exp4 恶意代码分析
  14. java金额转换函数_将阿拉伯数字转换成人民币大写形式的JAVA工具类
  15. 门店私域运营,突围线上冲击
  16. 用友NC65产品portal新增按钮
  17. 【机器学习】机器学习30个笔试题
  18. spark master web ui 端口8080被占用解决方法
  19. fread函数详解和fwrite函数详解
  20. 大数据 BigData

热门文章

  1. 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 周期性分析 | 卷积运算规律 | 交换律 | 结合律 | 分配率 | 冲击不变性 )
  2. 【Groovy】集合遍历 ( 使用 for 循环遍历集合 | 使用集合的 each 方法遍历集合 | 集合的 each 方法返回值分析 )
  3. 【C 语言】文件操作 ( 文件加密解密 | 加密解密原理 | 对称加密 | 非对称加密 | 散列函数 )
  4. 【Android 逆向】Frida 框架 ( 安装 frida 12.7.5 | 安装 frida-tools 5.1.0 | PC 端 frida 与 安卓模拟器端 frida-server )
  5. 【EventBus】发布-订阅模式 ( EventBus 组成模块 | 观察者模式 )
  6. 【数据挖掘】关联规则挖掘 Apriori 算法 ( Apriori 算法过程 | Apriori 算法示例 )
  7. 【运筹学】线性规划 单纯形法 案例二 ( 案例解析 | 标准形转化 | 查找初始基可行解 | 最优解判定 | 查找入基变量与出基变量 | 第一次迭代 )
  8. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )
  9. 【网站建设】Linux上安装MySQL - 12条命令搞定MySql
  10. 上下文 及 执行上下文