调优之CPU调优

来源:互联网 发布:麟龙选股软件 编辑:程序博客网 时间:2024/05/23 00:29



09 Understand CPU Scheduling了解CPU调度

两个方面:拓扑结构
                cpu调度
==================================================================================

架构NUMA


无numa 0-3 4-7 共享内存区域 一致性内存访问
numa0-3自己有内存控制器 访问自己区域的内存 本地内存访问无法访问再访问远程内存

CPU Scheduling
在一个时间内,一个CPU仅能执行一个进程
多个进程通过共享CPU时间片time slices


调度策略有两个主要分类:
1. 实时策略     占用cpu时间多 快速响应的进程  所有实时线程调度完后会调度一般线程
                      实时策略用于必须无间断完成的关键字时间任务

SCHED_FIFO    1-99  先进先出  进程优先级高先做  静态优先调度
SCHED_RR       1-99  轮询       
2. 一般策略
SCHED_OTHER   默认,使用完全公平调度程序CFS(完全公平调度程序)进行调度。
SCHED_BATCH     以下两个用于低优先权调度
SCHED_IDLE

[root@uplook ~]# ps axo pid,command,cls
  PID COMMAND                  CLS
    1 /sbin/init                        TS                     //SCHED_OTHER
    2 [kthreadd]                    TS
    3 [ksoftirqd/0]                 TS
    5 [kworker/0:0H]               TS
    7 [migration/0]                FF                       //SCHED_FIFO
    8 [rcu_bh]                      TS
    9 [rcu_sched]                  TS
   10 [watchdog/0]                 FF
   11 [watchdog/1]                 FF
   12 [migration/1]                FF
   13 [ksoftirqd/1]                 TS
   14 [kworker/1:0]               TS
   15 [kworker/1:0H]             TS


实时调度策略:
- SCHED_FIFO      FIFO
- SCHED_RR   RR

[root@uplook ~]# chrt -h
Scheduling policies:
  -b | --batch          set policy to SCHED_BATCH  批处理
  -f  | --fifo          set policy to SCHED_FIFO
  -i  | --idle           set policy to SCHED_IDLE
  -o | --other          set policy to SCHED_OTHER
  -r  | --rr             set policy to SCHED_RR (default)

[root@uplook ~]# chrt -m  查看每种调度策略最大最小优先级
SCHED_OTHER min/max priority    : 0/0                           //nice值,-20 ------ 19
SCHED_FIFO min/max priority     : 1/99
SCHED_RR min/max priority       : 1/99
SCHED_BATCH min/max priority    : 0/0                            非实时都为0    
SCHED_IDLE min/max priority     : 0/0

pgrep sshd

[root@uplook ~]# chrt -p 2247  查询当前进程的策略和优先级
pid 2247's current scheduling policy: SCHED_OTHER
pid 2247's current scheduling priority: 0

[root@uplook ~]# chrt -p 7  可以通过axo查看实时
pid 7's current scheduling policy: SCHED_FIFO
pid 7's current scheduling priority: 99

[root@web1 ~]# chrt -p `which sshd`
pid 3177's current scheduling policy: SCHED_OTHER
pid 3177's current scheduling priority: 0

[root@uplook ~]# chrt -i 0 dd if=/dev/zero of=/dev/null & 设置某个进程的调度策略为idel  有人使用就会停止等其它优先级高的先运行
[root@uplook ~]# chrt -p 3451
pid 3451's current scheduling policy: SCHED_IDLE
pid 3451's current scheduling priority: 0

运行mdsum  /dev/zero

实验环境:虚拟机 1cpu
LAB1:
终端一:    chrt -f 10 md5sum /dev/zero
终端二:    chrt -f 10 sha1sum /dev/zero

先入先出  相同级别 也要遵循先入先出  第1个退出才会上第二个

LAB2:
终端一:    chrt -r 10 md5sum /dev/zero
终端二:    chrt -r 10 sha1sum /dev/zero

和平共处

实时调度策略 静态优先级 设置好固定
一般调度策略 动态优先级 可以灵活调整
一般调度策略的优先级没有实时调度策略的优先级高

一般调度策略:
- SCHED_OTHER, NORMAL 该策略使用完全公平调度程序(CFS) <默认>
- SCHED_BATCH           主要用于低优先权任务
- SCHED_IDLE               主要用于低优先权任务

由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多
数进程所使用的调度策略为 SCHED_OTHER (也称为SCHED_NORMAL),但还有其它一些调度策略用于不同的目的。

SCHED_OTHER 调度策略运行的进程的相对优先级称为进程的 nice 值,可以有40种不同级别的nice值。



nice 值越高:   表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低:   表示优先级越高,例如-20,该进程更不倾向于让出CPU。
 

查看进程的nice级别
1. 使用top查看nice级别
NI:  实际nice级别
PR:  将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39

3. 使用ps查看nice级别
[root@uplook ~]# ps axo pid,command,nice  --sort=-nice   -nice升序  nice降序
[root@uplook ~]# ps axo pid,command,nice,cls  --sort=-nice 调度策略
TS 表示该进程使用的调度策略为SCHED_OTHER

启动具有不同nice级别的进程
启动进程时,通常会继承父进程的 nice级别,默认为0。
父进程bash nice值为0 继承
[root@uplook ~]# nice -n -5 sleep 6000 &  
[root@uplook ~]# ps axo command,pid,nice |grep sleep

[root@uplook ~]# nice -n -20 service httpd start
[root@uplook ~]# ps axo pid,command,nice,cls |grep httpd
11116 /usr/sbin/httpd             -20  TS
11119 /usr/sbin/httpd             -20  TS
11120 /usr/sbin/httpd             -20  TS
11121 /usr/sbin/httpd             -20  TS
11122 /usr/sbin/httpd             -20  TS
11123 /usr/sbin/httpd             -20  TS
11124 /usr/sbin/httpd             -20  TS
11125 /usr/sbin/httpd             -20  TS
11126 /usr/sbin/httpd             -20  TS

top -d 1 -u apache  基于用户的进程

更改现有进程的nice级别
1. 使用top更改nice级别
r 调整进程的优先级(Nice Level) (-20高)  ---0--- (19低)

r pid 数字

2. 使用shell更改nice级别
[root@uplook ~]# sleep 7000 &
[3] 10089
[root@uplook ~]# renice -20 10089
10089: old priority 0, new priority -20



taskset实现CPU亲和力
进程和cpu捆绑
将减少上下文切换的次数
[root@uplook ~]# lscpu |grep 'On-line'
On-line CPU(s) list:   0-3
[root@uplook ~]# taskset -c 2-3 service httpd start   httpd运行在2-3号处理器上

[root@uplook ~]# top -d 1 -u apache   top --->f  ---j (P 显示在那个cpu上) 最后使用cpu的情况 shfit +W保存



cgroup: 利用cgroup实现CPU的亲和力
LAB1:
[root@uplook ~]# vim /etc/cgconfig.conf
 group nginx {
           cpuset {
                cpuset.cpus=0-7;
           }
}
 group mysql {
           cpuset {
                cpuset.cpus=8-15;
           }
}


LAB2:
[root@uplook ~]# vim /etc/cgconfig.conf
 group httpd {
           cpuset {
                cpuset.cpus=0-1; 
           }
}

[root@uplook ~]# vim /etc/cgrules.conf
*:/usr/sbin/httpd       cpuset      httpd/

[root@uplook ~]# service cgred restart
[root@uplook ~]# service cgconfig restart


Nginx配置文件实现CPU亲和力
==================================================================================










0 0
原创粉丝点击