进程就是一段执行的程序,每当一个程序执行时。对于操作系统本身来说,就创建了一个进程,而且分配了相应的资源。进程能够分为3个类别:

    1.交互式进程(I/O)

    2.批处理进程 (CPU)

    3.实时进程 (REAL-TIME)

    

    对于交互式进程来说,一般其占用的cpu时间片非常段,可是优先级偏高;批处理进程占用的cpu时间片非常长,可是优先级偏底;实时进程是内核所使用的,其优先级高于前面两种。



    上面说到了优先级,linux进程是具有优先级的,一般分为两种:

    1.实时优先级

    2.静态优先级



    实时优先级的取值范围是1-99,值越底。优先级越底。一般为系统内核所使用;静态优先级的取值范围为100-139。值越底优先级越高。一般为应用程序所使用,通过使用nice值能够调静态优先级的先后,其取值范围为-20到19,相应与100-139;而实时优先级比静态优先级的级别高。



    linux的内部支持3种调度类别:

    对于实时进程来说其支持两种调度类别:

    1.SCHED_FIFO:first in first out

    2.SCHED_RR:round robin

    对于FF类型的进程就通过SCHED_FIFO来调用;对于RR类型的进程就通过SCHED_RR来调用

    对于用户进程来说其支持1种调度类别:

    1.SCHED_OTHER

    对于OS类型的进程就通过SCHED_OTHER来调用



    那么怎样查看当前操作系统进程使用的是那些信息呢?能够通过例如以下命令来查看

    # ps -e -o class,rtprio,pri,nice,command



    CLS RTPRIO PRI  NI COMMAND

    TS       -  24   0 init [3]         

    FF      99 139   - [migration/0]

    TS       -   5  19 [ksoftirqd/0]

    TS       -  29  -5 [events/0]

    TS       -  28  -5 [khelper]

    TS       -  29  -5 [kthread]

    TS       -  29  -5 [kblockd/0]

    TS       -  19  -5 [kacpid]

    TS       -  20  -5 [cqueue/0]

    TS       -  29  -5 [khubd]

    TS       -  29  -5 [kseriod]

    TS       -  24   0 [khungtaskd]

    TS       -  24   0 [pdflush]

    TS       -  29  -5 [kswapd0]

    TS       -  19  -5 [aio/0]

    TS       -  28  -5 [kpsmoused]

    TS       -  29  -5 [mpt_poll_0]

    TS       -  19  -5 [mpt/0]

    TS       -  19  -5 [scsi_eh_0]

    TS       -  19  -5 [ata/0]

    TS       -  19  -5 [ata_aux]

    TS       -  19  -5 [kstriped]

    TS       -  21   0 /usr/local/php/bin/php server.php

    TS       -  21   0 /usr/local/php/bin/php server.php

    TS       -  21   0 /usr/local/php/bin/php server.php

    TS       -  21   0 /usr/local/apache/bin/httpd -k start

    TS       -  29  -5 [kjournald]

    TS       -  22   0 /usr/local/apache/bin/httpd -k start

    TS       -  22   0 /usr/local/apache/bin/httpd -k start

    TS       -  22   0 /usr/local/apache/bin/httpd -k start

    TS       -  29  -5 [kauditd]

    TS       -  24  -4 /sbin/udevd -d

    TS       -  21   0 /usr/local/apache/bin/httpd -k start

    TS       -  17   0 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data --pi

    TS       -  21   0 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --data

    TS       -  24   0 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth0.leas

    TS       -  20  -5 [kgameportd]

    TS       -  23   0 sshd: chenqiguo [priv]

    TS       -  24   0 sshd: chenqiguo@pts/0

    TS       -  24   0 -bash

    TS       -  23   0 su -

    TS       -  24   0 -bash

    TS       -  19  -5 [kmpathd/0]

    TS       -  19  -5 [kmpath_handlerd]

    TS       -  29  -5 [kjournald]

    TS       -  29  -5 [kjournald]

    TS       -  24   0 /usr/sbin/vmtoolsd

    TS       -  24   0 cupsd

    TS       -  24   0 tpvmlpd2

    TS       -  26  -5 [iscsi_eh]

    TS       -  22  -5 [cnic_wq]

    TS       -  36 -20 [bnx2i_thread/0]

    TS       -  29  -5 [ib_addr]

    TS       -  19  -5 [ib_mcast]

    TS       -  19  -5 [ib_inform]

    TS       -  19  -5 [local_sa]

    TS       -  19  -5 [iw_cm_wq]

    TS       -  19  -5 [ib_cm/0]

    TS       -  19  -5 [rdma_cm]

    TS       -  25 -10 iscsiuio

    TS       -  21   0 iscsid

    TS       -  34 -10 iscsid

    TS       -  28  -4 auditd

    TS       -  32  -8 /sbin/audispd

    TS       -  24   0 syslogd -m 0

    TS       -  24   0 klogd -x

    TS       -  24   0 portmap

    TS       -  29  -5 [rpciod/0]

    TS       -  14   0 rpc.statd

    TS       -  24   0 dbus-daemon --system

    TS       -  24   0 /usr/sbin/hcid

    TS       -  14   0 /usr/sbin/sdpd

    TS       -  30 -10 [krfcommd]

    TS       -  17   0 pcscd

    TS       -  21   0 /usr/sbin/acpid

    TS       -  24   0 hald

    TS       -  24   0 hald-runner

    TS       -  21   0 hald-addon-acpi: listening on acpid socket /var/run/acpid.soc

    TS       -  24   0 hald-addon-keyboard: listening on /dev/input/event0

    TS       -  23   0 hald-addon-storage: polling /dev/hdc

    TS       -  14   0 /usr/bin/hidd --server

    TS       -  17   0 automount --pid-file /var/run/autofs.pid

    TS       -  24   0 /usr/sbin/sshd

    TS       -  24   0 sendmail: accepting connections

    TS       -  24   0 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

    TS       -  24   0 gpm -m /dev/input/mice -t exps2

    TS       -  24   0 crond

    TS       -  21   0 xfs -droppriv -daemon

    TS       -  21   0 /usr/sbin/atd

    TS       -  21   0 libvirtd --daemon

    TS       -  24   0 avahi-daemon: running [localhost-2.local]

    TS       -  15   0 avahi-daemon: chroot helper

    TS       -  24   0 /usr/sbin/dnsmasq --strict-order --bind-interfaces --pid-file

    TS       -  24   0 /usr/sbin/smartd -q never

    TS       -  23   0 login -- root     

    TS       -  24   0 /sbin/mingetty tty2

    TS       -  24   0 /sbin/mingetty tty3

    TS       -  24   0 /sbin/mingetty tty4

    TS       -  19   0 /sbin/mingetty tty5

    TS       -  20   0 /sbin/mingetty tty6

    TS       -  24   0 -bash

    TS       -   5  19 /usr/bin/python -tt /usr/sbin/yum-updatesd

    TS       -   5  19 /usr/libexec/gam_server

    TS       -   5  19 /usr/bin/python -tt /usr/libexec/yum-updatesd-helper --check

    TS       -  22   0 ps -e -o class,rtprio,pri,nice,command

    TS       -  21   0 rpc.idmapd

    TS       -  29  -5 [kjournald]

    TS       -  24   0 [pdflush]

    TS       -  24   0 /usr/sbin/snmptrapd -Lsd -p /var/run/snmptrapd.pid

    TS       -  24   0 smbd -D

    TS       -  24   0 nmbd -D

    TS       -  21   0 smbd -D

    TS       -  24   0 /usr/local/php/bin/php server.php

    TS       -  20   0 /usr/local/php/bin/php server.php

    TS       -  24   0 /usr/local/php/bin/php server.php

    TS       -  21   0 /usr/local/php/bin/php server.php

    TS       -  21   0 /usr/local/php/bin/php server.php

    TS       -  21   0 /usr/local/php/bin/php server.php

    TS       -  21   0 /usr/local/php/bin/php server.php

    TS       -  24   0 /usr/sbin/snmpd -Lsd -Lf /dev/null -p /var/run/snmpd.pid -a



    CLS相应内核的调度算法,RTPRIO相应实时优先级,PRI相应静态优先级,NICE相应静态优先级的指定级别,COMMAND相应进程的命令。注意上面[]都是内核的一些线程。

    因为进程具有优先级的概念,在极端的情况下可能会出现一种情况就是因为前面有着非常多优先级高的进程,导致优先级底的进程永远执行不上,所以又引出了动态优先级的概念。为了避免有些优先级偏底的进程执行不上,linux内核内部会暂时的调高这些优先级偏底的进程。当然相反。对于有些优先级偏高的进程,则会暂时的调底他的优先级。动态优先级作用在SCHED_OTHER上,主要就是用户空间的进程。

其算法为:dynamic priority = max (100,min(static priority - bonus + 5,139))。

bonux的取值范围为0-10



    当然动态优先级不是万能的,有些时候可能违背我们的意愿。比方我们如今正在执行一台webserver,其并发量相对较高,须要实时执行。而动态优先级可能有时候会减少我们的webserver的进程。显示这违背了我们的意愿,我们期待的是webserver本身就应该较高的获得cpu的使用权。所以能够手动调整一个进程的优先级。



    对于100-139的进程优先级能够使用nice和renice命令来调整。

nice表示启动一个进程的时候手动调整一个进程的优先级。renice表示更改一个正在执行的进程的优先级。

    比如对刚启动的httpd手运行优先级的命令:

    # nice --5 /usr/local/apache/bin/apachectl start

    # ps -e -o class,rtprio,pri,nice,command | grep httpd

    TS       -  24  -5 /usr/local/apache/bin/httpd -k start

    TS       -  23  -5 /usr/local/apache/bin/httpd -k start

    TS       -  23  -5 /usr/local/apache/bin/httpd -k start

    TS       -  23  -5 /usr/local/apache/bin/httpd -k start

    能够看到优先级已经被改成了-5。

对正在执行的进程改变优先级的命令:

    # ps -ef | grep httpd

    root      5474     1  0 06:50 ?

00:00:00 /usr/local/apache/bin/httpd -k start

    # renice -10 5474

    # ps -e -o class,rtprio,pri,nice,command | grep httpd

    TS       -  34 -10 /usr/local/apache/bin/httpd -k start

    能够看到曾经优先级为-5的httpd进程已经被改成了-10。



    对于1-99的进程能够使用chrt命令来改变优先级。而对于实时优先级来说。又分为sched_fifo和sched_rr。所以在调整优先级的时候还须要指定是那一个调度算法。

    这里我们来调整一个fifo类别的优先级:

    # ps -e -o class,rtprio,pri,nice,command,pid | grep FF

    FF      99 139   - [migration/0]  2

    # chrt -f -p 90 2 (-f指定是fifo类别的,-p指定级别,2指定进程的pid)

    # ps -e -o class,rtprio,pri,nice,command,pid | grep FF

    FF      90 130   - [migration/0]  2

    对于rr类别的使用给上面一样,仅仅须要把-f换成-r就可以。



    那么linux是怎样在众多进程中去选择当前须要使用的进程的呢?由于进程的优先级别总共同拥有139种,所以建立139个队列,每个队列中存放了当前相应级别的进程。当须要调用一个进程的时候,就依照进程的优先级去扫描整个队列的首部(第一个元素),假设当前较高的优先级中有了就取出,没有就继续往下寻找,直到找到一个为止。这样的寻找方式能够忽略进程的多少。促使进程的算法复杂度始终为0(1),以达到高速寻找到高优先级的进程。其实。每个队列又分为了两种情况,活动队列和过期队列。当一个进程被调度以后,可是又没有运行完毕的情况下,就会被放到过期队列中排队。

当活动队列中的全部进程运行完毕以后。再把活动队列和过期队列交换一下,又一次运行活动队列(老的过期队列)。



    在一个多cpu的操作系统上,因为内存是共同拥有资源,所以在訪问内存上的资源的时候可能会产生资源竞争,我们把这样的cpu的架构叫做SMP(Symmetric Multi-Processor。对称多处理器)

    一个cpu在訪问内存数据后至少须要3个cpu的时钟周期:

    1.向内存控制器传输一个寻址要求,内存控制器返回寻址指令。

    2.找到相应的内存地址,并施加一定的请求机制。

比如读锁和写锁。

    3.完毕读或者写的操作。

    因此一个cpu在给内存打交道的时候,其余cpu是不能訪问内存的。所以在smp架构下,cpu多了并不一定是好事。由于cpu越多,竞争资源的机会就越大。性能反而会减少。

因此产生了第二种cpu的架构numa( Non-Unified Memory Access,非一致内存訪问)



    硬件已经趋向使用多条系统总线,每条系统总线为一小组处理器提供服务。每组处理器都有自己的内存,并可能有自己的 I/O 通道。可是,每一个 CPU都能够通过一致的方式訪问与其它组关联的内存。每一个组称为一个“NUMA 节点”。NUMA 节点中的 CPU 数量取决于硬件供应商。

訪问本地内存比訪问与其它 NUMA 节点关联的内存快。这就是“非一致性内存訪问体系结构”名称的由来。



    在numa架构的cpu上。因为訪问其他“NUMA”节点内存的速率没有本地的快,所以要尽可能的使得cpu仅仅訪问自己控制的内存。因为内核自身会平衡进程,所以使得进程会在两个cpu之间频繁的切换,终于带来的结果就是一定会交叉内存訪问。即訪问不是自己的"NUMA"节点内存,从而造成性能的减少。

因此。在一个繁忙的server上。比如webserver,能够使用cpu绑定来让webserver固定的执行在某个cpu上来避免交叉内存的訪问。



    在有些时候,平衡是必定的,不然会产生一颗cpu非常闲,而另外一颗cpu非常忙的情况,所以必需要找到一个平衡点。一般来说,在numa架构下。当我们的内存本身命中次数非常低的情况下,这样的效果就非常实用了。

能够使用numastat命令来查看。

    # numastat

                               node0

    numa_hit                25102521

    numa_miss                      0

    numa_foreign                   0

    interleave_hit             46349

    local_node              25102521

    other_node                     0

    由于本机是非numa架构的cpu所以仅仅显示了node0。在真正的numa架构下,还会显示node1等等。numa_hit表示在本地的内存訪问命中的次数,numa_miss表示没有命中的次数。

由于仅仅有一段内存空间。所以这里所有命中。

假设在numa架构下,numa_miss的值过高的话,就应该把核心服务进程绑定到指定的cpu上,而且启动numad进程。numad能够在硬件级别将我们的进程和某些cpu绑定在一起。

要想达到将指定的进程和指定的cpu绑定,能够使用taskset命令,而且使用掩码的方式来标记cpu。0x0000 0001表示第0颗cpu。0x00000003表示第0颗和第一颗cpu。taskset的基本命令:taskset -p mask pid。比如我们想在5132这个进程绑定在1号cpu上的话能够使用:

    # taskset -p 0x00000002 5132

    可是这样的方法不够直观,所以能够使用-c选项直接指定绑定的cpu号数。

比如加了-c选项的上述写法为:

    # taskset -p -c 1 5132

    这样就直接将5132这个进程绑定在了第一号cpu上。

比如我如今的机子上有一颗2核心的cpu。

查看某些进程绑定在了那些cpu上能够使用:

    # ps -e -o pid,psr,command

     PID PSR COMMAND

    1   0 init [3]                             

    2   0 [migration/0]

    3   0 [ksoftirqd/0]

    4   1 [migration/1]

    5   1 [ksoftirqd/1]

    6   0 [events/0]

    7   1 [events/1]

    8   0 [khelper]

    因为篇幅限制就不列举完了。当中的PSR就是当前进程执行在了那颗cpu号上。观察当前mysql服务执行在了那颗cpu上:

    # ps -e -o pid,psr,command | grep mysql

    4498   0 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data --pid-file=/data/localhost.localdomain.pid

    能够看到mysql进程执行在了0号cpu上,于是我们实验一下将他绑定在1号cpu上。

# taskset -p -c 1 4498

    pid 4498's current affinity list: 0,1

    pid 4498's new affinity list: 1

    # ps -e -o pid,psr,command | grep mysql

    4498   1 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data --pid-file=/data/localhost.localdomain.pid

    这样我们就完毕了对mysql进程到相应cpu的绑定过程。



    可是上面仍然不能满足1号cpu仅仅执行mysql进程,还有其他的进程也会执行在1号cpu,所以仍然须要进程间的大量切换。因此能够在/etc/grub.conf中的kener參数中指定某些cpu开机以来不执行其他进程或者服务。比如:

    kernel /vmlinuz-2.6.18-371.6.1.el5 ro root=LABEL=/ rhgb quiet isolcpus=1

    isolcpus的语法是isolcpus=cpu number,...,cpu number。就是把指定的cpu隔离出来不供其他进程使用。

指定上述以后又一次启动操作以后再来观察cpu的进程使用情况。

    # ps -e -o pid,psr,command

      PID PSR COMMAND

        1   0 init [3]                                        

        2   0 [migration/0]

        3   0 [ksoftirqd/0]

        4   1 [migration/1]

        5   1 [ksoftirqd/1]

        6   0 [events/0]

        7   1 [events/1]

        8   0 [khelper]

       13   0 [kthread]

       18   0 [kblockd/0]

       19   1 [kblockd/1]

       20   0 [kacpid]

      190   0 [cqueue/0]

      191   1 [cqueue/1]

      194   0 [khubd]

      196   0 [kseriod]

      274   0 [khungtaskd]

      275   0 [pdflush]

      276   0 [pdflush]

      277   0 [kswapd0]

      278   0 [aio/0]

      279   1 [aio/1]

      486   0 [kpsmoused]

      527   0 [mpt_poll_0]

      528   0 [mpt/0]

      529   0 [scsi_eh_0]

      533   0 [ata/0]

      534   1 [ata/1]

      535   0 [ata_aux]

      545   0 [kstriped]

      558   0 [kjournald]

      584   0 [kauditd]

      617   0 /sbin/udevd -d

     1800   0 [kgameportd]

     2409   0 [kmpathd/0]

     2410   1 [kmpathd/1]

     2411   0 [kmpath_handlerd]

     2444   0 [kjournald]

     2446   0 [kjournald]

     3111   0 /usr/sbin/vmtoolsd

     3178   0 cupsd

     3223   0 tpvmlpd2

     3329   0 [iscsi_eh]

     3375   0 [cnic_wq]

     3382   0 [bnx2i_thread/0]

     3383   1 [bnx2i_thread/1]

     3395   0 [ib_addr]

     3405   0 [ib_mcast]

     3406   0 [ib_inform]

     3407   0 [local_sa]

     3411   0 [iw_cm_wq]

     3415   0 [ib_cm/0]

     3416   1 [ib_cm/1]

     3420   0 [rdma_cm]

     3437   0 iscsiuio

     3442   0 iscsid

     3443   0 iscsid

     3850   0 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth0.leases -pf /v

     3958   0 auditd

     3960   0 /sbin/audispd

     3992   0 syslogd -m 0

     3995   0 klogd -x

     4075   0 irqbalance

     4108   0 portmap

     4144   0 [rpciod/0]

     4145   1 [rpciod/1]

     4152   0 rpc.statd

     4190   0 rpc.idmapd

     4222   0 dbus-daemon --system

     4236   0 /usr/sbin/hcid

     4240   0 /usr/sbin/sdpd

     4256   0 [krfcommd]

     4302   0 pcscd

     4317   0 /usr/sbin/acpid

     4332   0 hald

     4333   0 hald-runner

     4340   0 hald-addon-acpi: listening on acpid socket /var/run/acpid.socket

     4354   0 hald-addon-keyboard: listening on /dev/input/event0

     4363   0 hald-addon-storage: polling /dev/hdc

     4393   0 /usr/bin/hidd --server

     4439   0 automount --pid-file /var/run/autofs.pid

     4464   0 /usr/sbin/sshd

     4481   0 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data --pid-file=/d

     4632   0 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data

     4689   0 sendmail: accepting connections

     4697   0 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

     4712   0 gpm -m /dev/input/mice -t exps2

     4726   0 crond

     4758   0 xfs -droppriv -daemon

     4772   0 anacron -s

     4785   0 /usr/sbin/atd

     4802   0 libvirtd --daemon

     4845   0 avahi-daemon: running [localhost.local]

     4846   0 avahi-daemon: chroot helper

     4918   0 /usr/sbin/dnsmasq --strict-order --bind-interfaces --pid-file=/var/run

     4940   0 /usr/sbin/smartd -q never

     4944   0 login -- root     

     4945   0 /sbin/mingetty tty2

     4946   0 /sbin/mingetty tty3

     4947   0 /sbin/mingetty tty4

     4952   0 /sbin/mingetty tty5

     4955   0 /sbin/mingetty tty6

     4960   0 /usr/bin/python -tt /usr/sbin/yum-updatesd

     4962   0 /usr/libexec/gam_server



    能够看到大量的进程都执行在0号cpu上。除了内核的一些线程以外。也就是说所谓的隔离cpu并非全然的,由于内核的一些少量的线程仍然会执行在被隔离的cpu上。于是我们还是拿上面的mysql进程来说。先让它执行在1号cpu上。

    # taskset -p -c 1 4481

    pid 4481's current affinity list: 0

    pid 4481's new affinity list: 1

    看到这里的差别了吗?上面没有隔离之前current affinity list的值为0和1。而这里仅仅为0,说明隔离cpu是成功了。



    当然即使这样做了。仍然不能保证1号cpu上仅仅服务mysql进程,由于cpu还要服务于中断。1号cpu正在服务于mysql的时候。突然其他硬件发出了一个中断请求,1号cpu可能还会被转入内核模式去处理中断请求。

因此还能够把1号cpu给隔离出来。也不处理中断的请求。这样1号cpu就能够完全然全服务于mysql进程和一些少量的内核线程了。



    为了实现cpu的中断绑定,我们还须要关闭系统内部的的一个服务,叫做irqbalance。这个服务会定期平均的又一次分配硬件服务中断到各个cpu号上去。为了纺织irqbalance服务分配中断服务到隔离的cpu号上去,那么就应该禁止启用该服务。

# service irqbalance stop

    # chkconfig irqbalance off



    将某些中断号给某颗或者多颗cpu绑定起来的语法格式为:echo cpu_mask > /proc/irq/<irq_num>/smp_affinity,当前我的机子上的中断号有:

    # cat /proc/irq/

    0/  10/ 12/ 14/ 2/  4/  51/ 6/  7/  8/  

    1/  11/ 13/ 15/ 3/  5/  59/ 67/ 75/ 9/

    # cat /proc/interrupts查看当前的中断信息

                CPU0       CPU1       

      0:    4719693          0    IO-APIC-edge  timer

      1:         83          0    IO-APIC-edge  i8042

      6:          5          0    IO-APIC-edge  floppy

      7:          0          0    IO-APIC-edge  parport0

      8:          1          0    IO-APIC-edge  rtc

      9:          0          0   IO-APIC-level  acpi

     12:        132          0    IO-APIC-edge  i8042

     15:       2964      39221    IO-APIC-edge  ide1

     51:      12271      13247   IO-APIC-level  ehci_hcd:usb1, ioc0

     59:       9142    3854647   IO-APIC-level  uhci_hcd:usb2

     67:         86      10107   IO-APIC-level  eth0

     75:          0          0   IO-APIC-level  Ensoniq AudioPCI

    NMI:          0          0

    LOC:    4719083    4720165

    ERR:          0

    MIS:          0

    能够看到一些中断信息。我们拿0号中断来说明:

    0就为中断号,4719693表示在cpu0上响应了4719693个中断。0表示在cpu1上响应了0 个中断,IO-APIC-edge表示链接在这个port的中断链表上设备接口。timer表示设备名称。

注意:对于0和2的中断号来说是特殊的,内核不同意这2个中断号被改动。所以在我当前的系统下除了0以外的都能够设置当中断固定在某个cpu号上。假如我们要将中断号为59的绑定在cpu0上能够使用:

    # echo 00000001 > /proc/irq/59/smp_affinity

    这样全部发生在59号上的中断都会教给cpu0来处理,从而彻底隔离了cpu1(原来59号中断都是由cpu1来处理)。这里我们採用了掩码的方式来计算cpu的号数。当然也能够用十进制的方式来处理。

cpu的号数和相应的十进制例如以下:

    Zero-based CPU ID:      7       6       5       4       3       2       1       0


    Decimal Value:        128      64      32      16       8       4       2       1

    假如这里我们想把全部中断绑定在1-4号cpu上,能够使用echo "15" > /proc/irq/59/smp_affinity(15=1+2+4+8)。

    因为又一次关机以后,这些设置都不会起作用。要使他们生效该怎么做,这里就不再说明了把,想必大家都知道了。

进程和cpu的相关知识和简单调优方案的更多相关文章

  1. linux内存基础知识和相关调优方案

    内存是计算机中重要的部件之中的一个.它是与CPU进行沟通的桥梁. 计算机中全部程序的执行都是在内存中进行的.因此内存的性能对计算机的影响很大.内存作用是用于临时存放CPU中的运算数据,以及与硬盘等外部 ...

  2. Android——进程通信/ AIDL/Message相关知识总结贴

    Android多进程通信 http://www.apkbus.com/android-83462-1-1.html Android 跨进程通信(一) http://www.apkbus.com/and ...

  3. Mock相关知识和简单应用

    一.moco的简单应用 moco地址:https://github.com/dreamhead/moco api文档地址: https://github.com/dreamhead/moco/blob ...

  4. jvm相关參数,调优

    常见的jvm參数例如以下 -Xmx1024m:设置JVM最大可用内存为1024M. -Xms1024m:设置JVM初始内存为1024m. 此值能够设置与-Xmx同样,以避免每次垃圾回收完毕后JVM又一 ...

  5. Linux环境下进程的CPU占用率

    阿里云服务器网站:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=qqwovx6h 文字来源:http://www.s ...

  6. Linux系统调优——CPU(一)

    (1).系统调优思路 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,性能优化其实是对OS 各子系统达到一种平衡的定义.具体步骤如下: 1. 系统的运行状况:  CPU -> MEM  -& ...

  7. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

  8. linux 创建守护进程的相关知识

    linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关 ...

  9. [Chapter 3 Process]Practice 3.1 相关知识:进程创建、fork函数

    3.1 Using the program shown in the Figure3.30, explain what the output will be at LINE A 答案:LINE A 处 ...

随机推荐

  1. jQuery 遍历 - parent() 方法

    ylbtech-jQuery-sizzle:jQuery 遍历 - parent() 方法  parent() 获得当前匹配元素集合中每个元素的父元素,使用选择器进行筛选是可选的. 1.A,jQuer ...

  2. 七中滤波方法测试matlab实现

    http://blog.163.com/xiaheng0804@126/blog/static/1205282120132129471816/ 创建两个混合信号,便于更好测试滤波器效果.同时用七中滤波 ...

  3. oc_转_构造对象的方法,以及类的继承

    一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情: 1) 使用alloc方法来分配存储空间 ...

  4. Tkinter教程之Message篇

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811326 '''Tkinter教程之Message篇'''#Message也是用来显示文本的 ...

  5. 内核源码分析之linux内核栈(基于3.16-rc4)

    在3.16-rc4内核源码中,内核给每个进程分配的内核栈大小为8KB.这个内核栈被称为异常栈,在进程的内核空间运行时或者执行异常处理程序时,使用的都是异常栈,看下异常栈的代码(include/linu ...

  6. Spark系列(八)Worker工作原理

    工作原理图   源代码分析 包名:org.apache.spark.deploy.worker 启动driver入口点:registerWithMaster方法中的case LaunchDriver ...

  7. 【Hadoop代码笔记】Hadoop作业提交之JobTracker接收作业提交

    一.概要描述 在上一篇博文中主要描述了JobTracker接收作业的几个服务(或功能)模块的初始化过程.本节将介绍这些服务(或功能)是如何接收到提交的job.本来作业的初始化也可以在本节内描述,但是涉 ...

  8. 我的github

    我的github:先来贴个图~   这是我的github,新建了第一个repository,默认路径是aokoqingiz/code. 然后是里面的文件~ 里面有一个readme.txt,是我对这个r ...

  9. oracle中in与exists的区别

    exists是用来判断是否存在的,当exists中的查询存在结果时则返回真,否则返回假.not exists则相反. exists做为where 条件时,是先对where 前的主查询询进行查询,然后用 ...

  10. 应用反射写的tostring方法

    应用反射写的tostring方法 应用反射写的tostring方法,方便以后查询 代码 package com.chzhao.reflecttest; import java.lang.reflect ...