> CentOS > CentOS入门 >

Centos 调优 I/O 优化

1   I/O 预先读请求的量(内核系统默认先响应读请求,所先响应的量可调):

 
   查看
      blockdev  --getra  /dev/sda     默认值是256   此为单向
   or     more /sys/block/sda/queue/read_ahead_kb     默认是512   是256的两倍   此为双向
 
   调整
      blockdev  --setra   512  /dev/sda
   or     echo   256  /sys/block/sda/queue/read_ahead_kb
 
 
2   I/O 请求队列长度(调大能增加硬盘吞吐量,但要占用更多内存):
 
      /sys/block/sda/queue/nr_requests
 
 
3   I/O调度算法
 
     more  /sys/block/sda/queue/scheduler
           noop   anticipatory   deadline   [cfg]
                (四种I/O调度算法,[]为选中算法)
 
     每种调度算法的可调参数位于  /sys/block/sda/queue/iosched
 
     变更四种算法
               cho  noop  >  /sys/block/sda/queue/scheduler
 
     四种算法详解
               deadline  (适合小文件读写,跳跃式读写,零散读写(数据库))
                          iosched  中若干参数说明: read_expire   默认500  此时间一到就写
                                            write_expire   默认5000  此时间一到就读
                                            在此时间内一定可以得到服务          
                                                    front_merges  0
                                                          1(默认)
                                                    当新请求与当前请求读写位置相近则可合并优先处理
 
 
               anticipatory  (适合大文件读写,整块式,重复读写(web server))
                              iosched  中若干参数说明: antic_expire 当一个请求结束后等待此时间长度 看是否有新请求与此请求读写位置近
                                                        read_expire  124(默认)
                                                        write_expire  248(默认)
 
               cfg (完全公平算法)  
                    iosched  中若干参数说明:queued  请求个数长度
                                             quantum  满多少个请求数写入一次磁盘
 
                                  优先级  class1 (real-time)实时 值0~7
                                  class2 (best-effort)轮询  值0~7
                                  class3  (idle) 只有空闲时才处理
                                  调整方法  ionice  -p 1(进程号)-n7(优先级值)-c2(class级)
                                  优先级值越低,优先级越高  
               noop(没有算法,适用于SAN架构,不在本地优化)
 
 
文件系统优化
 
1 查看
     filefrag  -v /file   查看某文件位于文件系统信息
     dumpe2fs  /dev/sda1  查看某分区信息
 
2 mke2fs  -m  5 /dev/sda1  在/dev/sda1中预留5%的block来防止数据分段
 tune2fs -m  10 /dev/sda1   将5%改成10%
 tune2fs  -r 1000 /dev/sda1   将5%改成具体block数
 
3 mount -o data=ordered  /dev/sda1  (默认) 文件系统日志区仅存放元数据
 mount -o data=journal  /dev/sda1  把数据与元数据都先写入日志区(安全,慢)
 mount -o data=writeback  /dev/sda1  不按日志区元数据顺序来写数据(不安全,快)
4 关闭文件系统访问时间更新
   mount -o notime  /dev/sda1
 每隔五秒按日志区元数据来写数据
   mount -o commit=5(默认)  /dev/sda1
 
RAID优化
1 yum install sysstat(提供iostat,sar等系统信息查看命令)  -y  
 iostat  -x /dev/sda(得到avgrq-sz(每秒平均请求扇区数))
 计算chunk size = avgrq-sz * 512 /1024 /RAID磁盘数  (chunk size 值只能取2的n次方)
2 mdadm  -C /dec/md0  -l1  -n2  -b /tmp/md0(外部位图)  --write-behind=256 /dev/sdc1  --write-mostly  /dev/sdd1
  (当请求满256时,多出的请求读写/dev/sdd1,否则只读写/dev/sdc1,此方式用于当/dev/sdc1性质优于/dev/sdd1)
3 /sys/block/md0/md/sync_speed_max(磁盘同步最大速度)
 /sys/block/md0/md/sync_speed_min(磁盘同步最小速度)
(责任编辑:IT)