码迷,mamicode.com
首页 > 系统相关 > 详细

linux系统调优之IO、cpu

时间:2015-08-29 18:56:29      阅读:381      评论:0      收藏:0      [点我收藏+]

标签:

首先先要再次强调一个概念:系统调优的目的不是怎样去吧那一部分做的特别优化。而是整体的全局的考虑。性能优化是为了找到系统的瓶颈并且想办法提高瓶颈最好能够去除。(个人认为万事皆有利弊,在计算机的世界里同样如此所以完美是不现实的。。) 调优的终极目标是为了让计算机个各个子系统达到一种平衡状态。。 子系统:cpu  memory  Io network 此处不多赘述。。

下来首先来解决io的优化,其实这个优化就是由内核控制选择一种相对较好的io策略对应您的实际环境。

下面给出我们IO调度在系统调用中的位置:

技术分享

下面详细介绍系统IO调度算法

设备写入或者读取数据快的请求都在队列中等待完成,每个块设备都有自己的队列,

内核会先确认该队列的请求数量,在进行调度。IO调度器的目标:让总往一个方向移动,移动到底再往反向走,类似现实生活中的电梯elevator

  1. cfq完全公平队列,deadline和 AS的折中,原理类似cpu时间分片。。为每个进程/线程单独创建一个队列来管理 该进程所产生的请求,每个进程一个队列,各个队列之间时间片调度,保证每个进程很好的分配到IO带宽,IO调度棋每次执行一个进程的额4次请求。

  2. noop电梯调度。 FIFO队列,有新请求到来时,把新的请求合并到最近的请求之后,保证同一介质,利于写不利于读,写可以通过文件系统cache不需要等待下一次就可完成,然后请求合并。读要等到前面完了才可以读取,此时写在这之前到来,会导致以后没法正确读取,适用于闪存设备,ram嵌入式系统

  3. deadline截止时间调度,通过时间和硬盘区域分类,适用于数据库,确保集诶将诶之时间内的服务请求,截止时间可以调整,默认读期限小于写,保证写的顺利进行,不因不能读饿死

  4. anticipatory:可查觉,预先决定,每次读操作会稍等一会,看看是否有人想读附近的数据,适合于大量的顺序读操作,kernel 2.6.33 已经去掉,可以修改cfq 算法来实现其功能。、、

查看调度算法命令

[#2#dty@localhost ~]$cat /sys/block/sda/queue/scheduler
noop deadline [cfq]

更改命令:echo noop > /sys/block/sda/queue/scheduler

Io通过实际情况选择相应的调度算法就可以

下来是cpu的 优化,

多数监控工具关于cpu的分类有以下几个

  1. usertime 用户进程时间,userspace中被执行进程在cpu开销时间比。

  2. systemtime 内核中线程和中断在icpu开销时间百分比

  3. wait io io请求等待时间,所有进程线程数阻塞等待完成。

  4. idle 空闲 。。  一个完整空闲进程在cpu开销时间百分比

我们可以通过各种监控工具实时检测cpu的状态

cpu的调度策略,这里不做赘述,计算机基本知识,时间分片优先级处理~~~~内核使用调度算法控制

sched_RR :轮询进行

sched_FIFO :一直运行,直到发生IO等待自己让出cpu,或被更高优先级顶掉

SCHED_NORMAL 普通应用使用,标准轮询

SCHED_NATCH 大量操作不打断,更好的利用缓存。

SCHED_IDLE 为低优先级应用使用,比nice值19的优先级还要低


使用实时调度的方法,

1.编程时使用sched_setcheduler 函数

2.chrt -f  命令FIFO

 chrt -r 命令 轮询rr

nice -n 优先级 命令 。。指定优先级并运行命令。




linux系统调优之IO、cpu

标签:

原文地址:http://my.oschina.net/loveleaf/blog/499005

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!