Overview分享关于Linux磁盘I/O的优化,中间插入一个rac报错的解决方法。文件系统优化**动态调整请求队列数量,提高效率。默认请求队列数为:128,可配置为512**[root@boqueue]#cat/sys/block/sda/queue/nr_requests128**read_ahead,将数据预读并记录到随机存取存储器,提高磁盘读取操作,默认值为128,ceph配置:8192**[root@boqueue]#cat/sys/block/sda/queue/read_ahead_kb128**close***oneaccessfileTimestampof(directory)**Example:mount-txfs-odefaults,noatime,nodiratime/dev/sda5/data**大文件,大容量,文件量大,推荐使用xfs文件系统**调整I/O调度算法磁盘IO调度算法[root@boqueue]#cat/sys/block/sda/queue/schedulernoopanticipatorydeadline[cfq]centos6.x默认cfq并调整到deadline[root@boqueue]#echodeadline>/sys/block/sda/queue/scheduler[root@boqueue]#cat/sys/block/sda/queue/schedulernoopanticipatory[deadline]cfqPS:这里用redhat6部署rac时,如果没有配置,会提示I/0scheduler的警告,然后e以上配置即可解决。I/0调度器报告有多少错误和多少磁盘写入**I/O调度算法介绍**CFQ(CompletelyFairQueuingI/OScheduler)默认特性:CFQ试图平均分配访问I/O带宽,避免进程饿死和实现更低的延迟是deadline和asscheduler之间的折衷。CFQ给I/O请求一个优先级,I/O优先级请求与进程优先级无关,高优先级进程读写不能自动继承高I/O优先级。工作原理:CFQ为每个进程/线程建立一个单独的队列来管理进程产生的请求,也就是说每个进程都有一个队列,每个队列之间的调度使用时间片进行调度,保证每个进程都能被很好地分配给I/O带宽。I/O调度器每次为一个进程执行4个请求。NOOP(elevatortypeScheduler)特点:在Linux2.4或更早版本的调度器中,当时只有这种I/O调度算法。NOOP实现了一个简单的FIFO队列,这与I/O电梯的工作方式相同O请求被组织起来。当有新的请求到来时,它将请求合并到最新的请求中,以确保请求相同的媒体。NOOP倾向于饿死读写。NOOP对于闪存设备、RAM、嵌入式系统是最好的选择。电梯算法饿死读请求的解释:因为写请求比读请求容易。写入请求通过文件系统缓存,无需等待写入完成即可开始下一次写入操作。写请求通过合并,累积在I/O队列中。读取请求需要等到前面的读取操作全部完成后,才能进行下一次读取操作。读操作之间有几毫秒的间隔,中间有写请求到达,饿了后面的读请求就死了。Deadline(截止日期调度程序)特点:按时间和硬盘区域分类。这种分类合并需要类似noop的调度器。截止日期确保请求在截止日期内得到满足。这个deadline是可调的,默认读deadline比writedeadline短。这可以防止写操作因为无法读取而饿死。Deadline是数据库环境(ORACLERAC、MYSQL等)的最佳选择。AS(ExpectedI/Oscheduler)特点:本质上和Deadline是一样的,但是在最后一次读操作之后,要等待6ms才能继续调度其他的I/O请求。您可以从应用程序预订一个新的读取请求,提高读取操作的执行,但以牺牲一些写入操作为代价。它会每隔6ms插入新的I/O操作,并将一些小的写流合并为一个大的写流,使用Writedelay来换取最大的写吞吐量。AS适用于写入比较多的环境,比如文件服务器服务器AS在数据库环境上的性能很差。**I/O调度算法总结**AnticipatoryI/O调度器适用于大多数环境,但不适用于数据库应用。DeadlineI/Oscheduler通常等同于Anticipatory,但更简洁Compact,更适合数据库应用,CFQI/OschedulerforDATA/SASdisks为所有进程分配相等的带宽,适用于桌面多任务和多媒体应用,默认IOschedulerNOOPI/Oscheduler适用于SSD盘,有RAID卡,带READ的disk**sysctl.conf针对disk优化**vm.swappiness=[0-10]默认60,太高了。如果是缓存服务器,建议配置为0,用于SSD优化1.关闭Log功能2.在fstab中添加挂载参数data=writeback3.启用TRIM功能Linux内核从2.6.33开始提供TRIM支持,所以首先运行“uname-a”命令查看自己的内核版本,如果内核版本低于2.6。33、请先升级内核再运行“hdparm-I/dev/sda”查看您的硬盘是否支持TRIM技术。如果支持,您将看到支持数据集管理TRIM。如果满足以上两个条件,可以在fstab中添加discard来启用TRIM功能,如:originalUUID=2f6be0cf-2f54-4646-b8c6-5fb0aa01ef23/ext4defaults,errors=remount-ro01modifiedUUID=2f6be0cf-2f54-4646-b8c6-5fb0aa01ef23/ext4丢弃、默认、错误=remount-ro01
