Linux kernel 性能优化(二)CPU 术语

CPU的使用很大程度上是依赖于什么资源试图使用它。内核有个调度器是用来调度两种资源:线程(单线程或多线程)和中断。调度器给予不同的资源不同的优先级。以下是从高到低的优先级排列:
• 硬件中断 --
这些请求是系统硬件产生。比如说,磁盘可能会在IO传输结束后产生一个中断信号或者一个NIC可能会在收到一个数据包后产生一个中断。
•软中断 --
这些内核软件中断是用来维护内核。比如内核时钟滴答的读取是一个软中断。它用来确保一个进程没有超过处理器所分配给改进程的时间。

•实时线程 --

实时线程比内核本身有更高的优先级。一个实时进程可能会占用一个CPU并且抢占内核。

•内核线程 --
所有的内核线程都在这个优先级上被处理。
•用户线程 --
这个空间更经常被认为是“userland"。所有个软件应用都在用户空间上运行。这个空间是在内核调度策略中最低优先级的。

为了搞清楚内核如何管理这些不同的资源,一些概念需要被介绍。以下会介绍上下文切换,运行队列,以及使用率。

2.1 上下文切换
大部分的现代处理器都是只能一次运行一个线程。n-way 超线程处理器拥有同时跑n个线程的能力。然而Linux内核视双核处理器上的每一个处理器核为一个独立的处理器。一个标准的Linux内核可以同时运行50 ~ 50,000个进程。由于只有一个CPU,内核需要调度和平衡这些处理器线程。每个线程有个使用CPU的时间片。一旦一个线程运行超过了时间片或者被更高优先级(譬如硬件中断)的资源抢占,这个线程就会在更高优先级的线程使用CPU的时候被放进一个队列。这个进程切换过程被称做上下文切换。
每一次内核进行上下文切换时,资源被用来将进程从CPU寄存器上移动到一个队列中。一个系统中的上下文切换越多,内核就需要花费更多在管理进程调度上。

2.2 运行队列
每个CPU都维护一个进程运行队列,理想中,调度器应该持续得运行闭关你且执行线程。进程要不就在休眠状态(被阻塞和等待IO)或者就是可运行状态。如果CPU子系统被高度占用,有可能内核调度器就无法跟上系统的需求。结果就是,可运行进程开始不断地填入云习惯你对列,运行队列越长,需要花费的执行时间就越长。一个流行的术语”负载“就是用来描述运行队列的状态。系统负载是当前执行的进程和运行队列中的进程的累加。如果两个进程正在一个双核系统上执行并且有四个在运行队列中,那么负载就是六。

2.3 CPU使用率
CPU使用率是用来定义CPU的使用百分比。这是一个重要的衡量系统的依据。大部分性能监控工具会将CPU使用率归类为以下几个目录:
•用户时间 -- 在用户空间上执行进程的时间比例
•系统时间 -- 在执行内核进程以及中断的时间比例、
•IO等待 -- CPU空闲,但是是因为线程被阻塞在等待IO请求结束。
• 空闲 -- CPU完全空闲的状态

2.4 时间片Time Slicing
时间片是代表一个进程在被抢占之前可以使用的时间。调度策略必须给出一个默认的时间片,并不简单。时间片如果设置成太长就会导致系统的交互性能变差;系统就不再会感觉到这些应用是同时被执行的。如果时间片太短,那么大量的时间都会被用来花费在上下文切换。而且,I/O消耗和处理器消耗的冲突目标就更加明显;I/O 消耗处理器不再需要长时间片,然而处理器消耗型进程却渴望时间片。

2.5 优先级 Priorities
一个通常的调度算法是基于优先级的调度。这个概念是将进程根据他们的价值和需要的处理器时间来排序。高优先级的进程将会比低优先级的进程先运行,相同优先级的进程将被循环调度。在包括Linux的一些系统上,高优先级的进程将会得到较长的时间片。内核和用户空间都会设置进程优先级来影响系统的进程调度行为。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值