linux内核 cpu io等待,linux系统调优之IO、cpu

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

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

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

a5afa082e48c4ee5e967e163e909d8c1.png

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

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

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

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

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

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

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的分类有以下几个

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

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

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

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 优先级 命令 。。指定优先级并运行命令。

cpu的优化涉及到了cpu缓存

首先简要介绍cpu缓存的级别:

一级缓存,分为指令缓存和数据缓存,有静态内存实现。

每一个位是6个晶体管制造的,动态内存1个位1个晶体管,6个可以保持点亮,1个不能,所以需要电流不停的刷,这就是内存速度比 缓存速度慢的原因。

二级缓存,cpu内 cpu核心私有或者cpu核心之间共存

三级缓存,主板上cpu核心间

四级缓存,物理cpu之间(即多个cpu)

工作过程:当cpu去内存去数据的时候,缓存控制器首先检查数据是否在缓存中,在就缓存命中cache-hit。不在cache-miss。并且从内存*(或者下一极缓存)中读取数据到缓存中,叫做缓存行填充。

每个cpu有自己独立的缓存控制器,cpu核心读取数据时,会在共享缓存中查看是否其他核心已将数据读到缓存中。它查看的方式有两种,snopping速度快,不扩展(广播) directory based 速度慢可扩展。

cpu保证cache 和memory一致的方法

write through :cpu向cache写入数据时,同时向memory也写一份,使cache和memory保持一致,缺点是每次访问memory速度慢。。。

write back :cpu更新cache时,把更新的cache区标记一下,不同步更新。。 如果cache区要被更新数据取代则在更新memory。。这样做考虑到很多时候的cache数据是中间数据,减少了没必要的同步更新,优点效率高,缺点,断电数据会部分丢失。。

\

cpu资源限制 编辑 /etc/security/limits.conf   或者使用 cgroup

未完待续。。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值