精华内容
下载资源
问答
  • 单核CPU vs. 多核CPU

    千次阅读 2019-09-16 12:06:37
    多核CPU 单核CPU 起源: CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以说是世界级的改变,并且严格准守冯诺依曼体系结构,在英特尔推出CPU之前的计算机所使用的处理器工作是非常麻烦的,...

    单核CPU vs. 多核CPU

    单核CPU

    起源:

    CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以说是世界级的改变,并且严格准守冯诺依曼体系结构,在英特尔推出CPU之前的计算机所使用的处理器工作是非常麻烦的,需要复杂的线路组合才能使其正常工作,当然英特尔推出的CPU也是需要线路组合,但是相比之前的线路英特尔的要较为简洁,并且英特尔将这些线路组合称为总线!

    工作原理:

    单核CPU较为死脑,在通电时该CPU就会执行存储块中的指定地址的指令,如果你想要执行内存块其他地方的代码必须调整总线位置才可以让其执行!

    单核CPU就相当于阻塞程序,在工作期间只能执行某一个程序!

    单核(超时间轴)CPU

    显而易见,单核CPU并不是长久的,所以英特尔推出了时间轴的工作方式,一个CPU干上两个或两个以上的CPU的活。因为CPU的工作速度取决于晶体管,晶体管越多,CPU每秒工作率就越大,英特尔就想了一个增加CPU的晶体管的办法,让CPU的工作频率赫兹增加,然后增加北桥芯片用于和内存通讯,再将地址总线与内存对应起来(以次方的方式),这样就无需每次执行其他程序前修改一次线路了。

    最后需要操作系统的帮忙,当CPU通电时会一直执行某一块内存的代码,但是无需手动修改线路了。此外CPU中还有时钟电路,该电路用于控制CPU多少毫秒跳转到指定地址,那么操作系统可以利用时钟电路让其CPU跳转到其他地方,然后再跳转回来!

    PS:晶体管是一种固体半导体器件,具有检波、整流、放大、开关、稳压、信号调制等多种功能。晶体管作为一种可变电流开关,能够基于输入电压控制输出电流。

    多核CPU

    多核CPU,即多个CPU组成。这些CPU集成在一个芯片里,可以通过内部总线来交互数据,共享数据,这些CPU中分配出一个独立的核执行操作系统,每个核都有自己的寄存器,ALU运算单元等(这些都是封装在CPU内部的),但是一级二级缓存是共享的,这些CPU通过总线来交互数据,并且工作是并行的,资源分配是由操作系统来完成,操作系统来决定程序CPU的控制权分配,所以一个多核CPU的工作效率大多体现在操作系统的分配上,因为一个CPU基本上可以执行很多个程序,通过PCB进程控制块的方式存储当前代码段,然后来回跳转,所以当CPU核过多时,操作系统在分配时可能会导致部分CPU闲置!

    多个CPU

    即拥有多个CPU的主机,每个CPU只能用来独立执行不同的程序,这些CPU都是单核的,不用在家用电脑,只用在特定的机器上。因为单核CPU执行一个程序比来回跳转执行的速度要快很多,但是难以管理。每个CPU有自己的总线,一级二级缓存,那么这样需要更大的占用面积,更多的总线,因为这些CPU不是封装在一个芯片里的!

    单核CPU和多核CPU的区别:

    双核的优势不是频率,而是对付同时处理多件事情。单核同时只能干一件事,比如你同时在后台BT下载,前台一边看电影一边拷贝文件一边QQ。这么多程序同时需要CPU来响应要靠操作系统,Windows本身就是多线程操作系统(DOS就是单线程系统,DOS下双核和单核没区别,处理一个任务时必须停下来等待处理结束才能干下一件事),它可以把每个处理任务划分为“多份”,多个处理任务按顺序排成队列,这样单核的CPU可以一次处理“一份”,轮流处理每个程序的“份”,这样感觉就是CPU同时在干几件事了。但如果CPU不够强劲,同时排队等待处理的东西太多了,那就会感觉系统在等待、有延时、反应慢等症状。再或者某个程序出现错误,死机了,造成后面排队的其他任务都在那里干等,造成系统无反应。

    双核CPU就是基板上集成有多个单核CPU,自己集成了任务分配系统,再搭配操作系统就能真正同时开工,两个核心同时处理“两份”任务,速度快了,万一一个核心死机,起码另一个CPU还可以继续处理关闭软件、关机等任务。

    所以一方面每个核心的性能还在发展,另一方面多核心集成的手段双管齐下,这样CPU的性能可以迅速提升。1G双核应该比1G单核快近2倍,那么1G的4核应该比1G的双核快近2倍!如果有4G的双核,那么应该和2G的四核性能近似。


    下面是一些道友的见解,记录于此处,便于以后查阅:

    @ 单核CPU上运行的多线程程序, 同一时间只能一个线程在跑, 系统帮你切换线程而已, 系统给每个线程分配时间片来执行, 每个时间片大概10ms左右, 看起来像是同时跑, 但实际上是每个线程跑一点点就换到其它线程继续跑。

    @ 多线程的用处在于,做某个耗时的操作时,需要等待返回结果,这时用多线程可以提高程序并发程度。如果一个不需要任何等待并且顺序执行能够完成的任务,用多线程简直是浪费。

    @ 线程必然不是越多越好,线程切换也是要开销的,当增加一个线程时,额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。Linux自从2.6内核开始,就会把不同的线程交给不同的核心去处理。Windows也从NT.4.0开始支持这一特性。

    @ 什么时候该使用多线程呢?这要分四种情况讨论:

    a.多核CPU——计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置。

    b.单核CPU——计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。

    c.单核CPU——IO密集型任务,使用多线程还是为了人机交互方便。

    d.多核CPU——IO密集型任务,这就更不用说了,跟单核时候原因一样。

    @ CPU的多核和应用程序的多线程的关系

            多核指的是CPU有多个核心,多线程是程序有多个线程在同时执行。

            多核要用多线程才能发挥优势。同样,多线程要在多核上才能真正有优势。

            这点来说,对程序员不是透明的。程序员可以控制程序/线程在哪个CPU(核)上运行。用户也可以控制程序在哪几个核上运行。所以,多核、多线程对用户和程序员都不是透明的。


    继续补充一点关于“进程、线程”的知识

    进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,即进程是操作系统进行资源分配的最小单元。进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。

    线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

    每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。

    多线程可以实现并行处理,避免了某项任务长时间占用CPU。要说明的一点是,目前大多数的操作系统教材中的单处理器都是指的单核处理器。对于单核单处理器(CPU),为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好像这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。

    最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器,只需将程序编写成多线程模式即可。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。

    根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。

    线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

    最简单的比喻,多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车也不可能只有一节车厢。多线程的出现就是为了提高效率。同时它的出现也带来了一些问题。

    注:单核处理器并不是一个长久以来存在的概念,在近年来多核心处理器逐步普及之后,单核心的处理器为了与双核和四核对应而提出。顾名思义处理器只有一个逻辑核心。

    多核处理器和多处理器的区别

    多核是指一个CPU有多个核心处理器,处理器之间通过CPU内部总线进行通讯。而多CPU是指简单的多个CPU工作在同一个系统上,多个CPU之间的通讯是通过主板上的总线进行的。

    从以上原理可知,N个核的CPU,要比N个CPU在一起的工作效率要高(单核性能一致的情况下)。 

    展开全文
  • 单核CPU与多核CPU工作原理

    万次阅读 多人点赞 2018-06-21 16:43:43
    单核CPU与多核CPU工作原理今天要介绍一下单核CPU和单核(超时间轴)CPU以及多核CPU的工作原理 一.单核CPU起源:CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以说是世界级的改变,并且严格准守冯...

    单核CPU与多核CPU工作原理

    今天要介绍一下单核CPU和单核(超时间轴)CPU以及多核CPU的工作原理

    1. 一.单核CPU

    起源:

    CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以说是世界级的改变,并且严格准守冯诺依曼体系结构,在英特尔推出CPU之前的计算机所使用的处理器工作是非常麻烦的,需要复杂的线路组合才能使其正常工作,当然英特尔推出的CPU也是需要线路组合,但是相比之前的线路英特尔的要较为简洁,并且英特尔将这些线路组合称为总线!

    工作原理:

    单核CPU较为死脑,在通电时该CPU就会执行存储块中的指定地址的指令,如果你想要执行内存块其他地方的代码必须调整总线位置才可以让其执行!

    单核CPU就相当于阻塞程序,在工作期间只能执行某一个程序!

    1. 二.单核(超时间轴)CPU

    显而易见单核CPU并不是长久的,所以英特尔推出了时间轴的工作方式,一个CPU干上两个或两个以上的CPU的活,因为CPU的工作速度取决于晶体管,晶体管(是一种固体半导体器件,具有检波、整流、放大、开关、稳压、信号调制等多种功能。晶体管作为一种可变电流开关,能够基于输入电压控制输出电流。)越多CPU每秒工作率就越大,英特尔就想了一个想法增加CPU的晶体管,让CPU的工作频率赫兹增加,然后并增加北桥芯片用于和内存通讯,在将地址总线与内存对应起来(以次方的方式),这样的话就无需每次执行其他程序要修改一次线路了,最后就需要操作系统的帮忙了,当CPU通电时会一直执行某一块内存的代码,但是无需手动修改线路了,此外CPU中还有时钟电路,该电路用于控制CPU多少毫秒跳转到指定地址,那么操作系统可以利用时钟电路让其CPU跳转到其他地方然后在跳转回来!

    三.多核CPU

    多核CPU即多个CPU组成,这些CPU集成在一个芯片里,可以通过内部总线来交互数据,共享数据,这些CPU中分配出一个独立的核执行操作系统,每个核都有自己的寄存器,alu运算单元等(这些都是封装在cpu内部的),但是一级二级缓存是共享的,这些CPU通过总线来交互数据,并且工作是并行的,资源分配是由操作系统来完成的,操作系统来决定程序cpu的控制权分配,所以一个多核cpu的工作效率大多体现在操作系统的分配上,因为一个CPU基本上可以执行很多个程序,通过PCB进程控制块的方式存储当前代码段,然后来回跳转,所以当你的CPU核过多时,操作系统在分配时可能会导致部分CPU闲置!

    四.多个CPU

    即拥有多个cpu的主机,每个cpu只能用来独立执行不同的程序,这些cpu都是单核的,不用在家用电脑上,只用在特定的机器上,因为单核cpu执行一个程序比来回跳转执行的速度要快很多,但是难以管理,因为每个CPU有自己的总线,一级二级缓存,那么这样需要更大的占用面积,更多的总线,因为这些CPU不是封装在一个芯片里的!

     

    展开全文
  • 1. 单核和多核CPU上多线程执行效率的探讨a1: 多线程实际上是在单个CPU中按顺序执行的,但是系统可以帮助您切换该执行,但是它不是很快的(相反,是缓慢的)如果有多个cpus,则可以同时在两个cpus中执行.........a2: 在...

    88011b6b85de1f5b10cfbfa2e6e5fd50.png

    1. 单核和多核CPU上多线程执行效率的探讨

    a1: 多线程实际上是在单个CPU中按顺序执行的,但是系统可以帮助您切换该执行,但是它不是很快的(相反,是缓慢的)

    如果有多个cpus,则可以同时在两个cpus中执行.........

    a2: 在单核CPU上运行的多线程程序. 只能同时运行一个线程. 该系统可帮助您切换线程. 系统将时间片分配给每个线程以执行. 每个时间片约为10毫秒. 它似乎同时运行,但实际上每个线程都会运行一点,然后切换到其他线程以继续运行

    效率不会提高

    切换线程会增加开销

    a3: #3F说的是正确的. 因此,不建议不要使用多线程,尤其是在单核CPU上.

    e3903b2d4c850c85d83c7d7e76bae061.png

    使用单核CPU时使用多线程. 通常,有线程在等待.

    对于常见的进度条更新类型,可以简单地控制那些可以简单控制的类型(例如: 在循环中手动处理消息). 通常,不使用线程,这可以提高程序的性能. 并避免不必要的线程同步问题.

    a4: 您可以尝试双核和三线程,但是准确性低于双线程!

    对于相同的算法,CPU占用率为100%的最小线程数是最有效的. 如果CPU占用率很高,则最适合使用单核单线程,双核双线程,四核和四线程.

    但是,为什么有时线程数超过CPU内核数会更快?原因是此类程序的单线程操作量不足以占用CPU的一个核心(例如,IO操作很多,IO相对较慢,这是程序的瓶颈)

    a5: 使用多线程是在执行耗时的操作时,您需要等待返回结果. 这时,多线程可以提高程序的并发程度. 如果不需要等待并执行可以顺序完成的任务,那么使用多个线程就是一种浪费.

    2. 谈论多核CPU,多线程和并行计算

    e18cc3fb52b65247868743022a489ebc.png

    a1: CPU发展趋势

    核心数将继续增加. 根据摩尔定律,由于单核性能提高的严重瓶颈问题,到2017年底和2018年初,普通台式PC有望达到24核(或16核和32线程). 我们如何应对这种突然增长在核心数上?编程还必须与时俱进. 作者大胆地预测,CPU内核之间的片上总线将以4路组连接: ),因为完全连接太复杂,并且单条总线还不够. 而且它应该是一个不对称的多核处理器,可以与多个DSP处理器或流处理器混合使用.

    a2: 线程越多越好?何时需要使用多线程?

    线程不得尽可能多. 线程切换也很昂贵. 添加线程时,增加的开销少于线程可以消除的阻塞时间,这是值得的.

    自2.6内核以来,Linux为不同的内核提供了不同的线程进行处理. 从NT.4.0开始,Windows也支持此功能.

    何时应使用多线程?应该在四种情况下对此进行讨论:

    a. 多核CPU密集型任务. 这时,请尝试使用多线程来提高任务执行效率,例如加密和解密,数据压缩和解压缩(视频,音频,普通数据),否则只能加载一个核心,而其他核心则处于空闲状态

    5ef5c3e2373cde8e198e9b7d9ae7f124.png

    b. 单核CPU密集型任务. 此时的任务已消耗了100%的CPU资源,并且没有必要也没有可能使用多线程来提高计算效率;相反,如果要进行人机交互,最好使用多线程,以防止用户无法与计算机交互. 继续.

    c. 单核CPU-IO密集型任务,使用多线程是为了方便人机交互,

    d. 更不用说多核CPU-IO密集型任务,原因与单核时相同.

    4. 程序员需要掌握的技能/技术

    (1)减少序列化代码以提高效率. 这是胡说八道.

    (2)单个共享数据分发: 复制一个数据的多个副本,以便不同的线程可以同时访问它.

    (3)负载平衡可以分为静态和动态. 有关详细信息,请参阅相关文献.

    a1c8695fb46c0edb_0.jpg

    3. 请问: CPU多核与应用程序多线程之间是什么关系?

    a1: 多核意味着系统可以同时运行多个线程. 例如,双核可以同时执行两个线程. 单个内核一次只能执行一个线程.

    a2: 我尝试了从192.168.0.1到192.169.0.255的ping程序

    它是通过多线程完成的,发现单核计算机和多核计算机之间的性能差异大约是两倍.

    a3: 多核对用户是透明的. 应该说,它对程序员是透明的. 您完全不必担心. 当您使用单核编程时,就可以了. 除非使用OpenMP进行编程,否则将使用很多限制. 您的上述测试不准确. 网络(主要是远程主机)在不同时间将具有不同的响应速度. 您应该在干净的本地计算机和相同的环境中进行测试. 但是,对于多线程多核要优于单核这还是可以肯定的. 简而言之,我们不必担心该程序在单核或多核上的并发问题.

    a4: 多核是指具有多个核的CPU,并且多线程意味着程序具有同时执行的多个线程.

    多核还需要使用多线程来利用.

    类似地,多线程只能在多核上具有真正的优势.

    在这方面,它对程序员不是透明的. 程序员可以控制程序/线程在哪个CPU(内核)上运行. 用户还可以控制程序在哪个内核上运行. 因此,多核和多线程对用户和程序员而言并不透明. 程序员必须了解这一知识. 为了使程序最大化机器的性能.

    原始链接

    本文来自电脑杂谈,转载请注明本文网址:

    http://www.pc-fly.com/a/shoujiruanjian/article-299307-1.html

    展开全文
  • 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。 现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让...
    1. SMP IRQ Affinity
    硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。
    现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。
     
    传统的 8259A 只适合单 CPU 的情况,现在都是多 CPU 多核的 SMP 体系,所以为了充分利用 SMP 体系结构、把中断传递给系统上的每个 CPU 以便更好实现并行和提高性能,Intel 引入了高级可编程中断控制器(APIC)。
    光有高级可编程中断控制器的硬件支持还不够,Linux 内核还必须能利用到这些硬件特质,所以只有 kernel 2.4 以后的版本才支持把不同的硬件中断请求(IRQs)分配到特定的 CPU 上,这个绑定技术被称为 SMP IRQ Affinity.
     
     
     
     
    2. 网络
    在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说,把不同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;
    对于数据库服务器这样的应用来说,把磁盘控制器绑到一个 CPU、把网卡绑定到另一个 CPU 将会提高数据库的响应时间、优化性能。合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能。
     
    网卡多队列与RPS/RFS
     
    以网卡中断为例,在没有设置SMP IRQ affinity时, 所有网卡中断都关联到CPU0, 这导致了CPU0负载过高,而无法有效快速的处理网络数据包,导致了瓶颈。
    通过SMP IRQ affinity, 把单网卡多个队列中断分配到多个CPU上,可以分散CPU压力,提高数据处理速度。但是smp_affinity要求网卡支持多队列,网卡有多队列,才会有多个中断号,这样就可以把不同的中断号分配到不同CPU上,这样中断号就能相对均匀的分配到不同的CPU上。
    而单队列的网卡可以通过RPS/RFS来模拟多队列的情况,但是该效果并不如网卡本身多队列+开启RPS RFS 来的有效。
     
    Linux系统采用中断机制协同处理CPU与其他设备工作。网卡的中断默认由cpu0处理,在大量请求的网络环境下可能出现cpu0负载高,而其他cpu空闲。后来出现网卡多队列技术解决这个问题。
     
    1)RSS
    RSS(Receive Side Scaling)是网卡的硬件特性,实现了多队列,可以将不同的中断次数分发到不同的CPU上。多队列网卡是一种技术,最初是用来解决网络IO QoS (quality of service)问题的,后来随着网络IO的带宽的不断提升,单核CPU不能完全处满足网卡的需求,通过多队列网卡驱动的支持,将各个队列通过中断绑定到不同的核上,以满足网卡的需求,同时也可以降低CPU0的负载。
     
    虽然说RSS实现了中断的分配,但是如果队列数 < 机器总核数 并且CPU与中断号一一对应了,会出现软中断负载跑在0-7核上,其他核不处理软中断的情况,0-7核负载依然会很高。
     
     
    2)RPS
    Receive Packet Steering 可以将软中断分给其他 CPU。
    RSS需要硬件支持,在只支持单队列或多队列的环境中,RPS/RFS提供了软件的解决方案。
    RPS(Receive Packet Steering)是基于RSS软件方式实现CPU均衡,接收包中断的优化,是把一个或多个rx队列的软中断分发到多个CPU核上,从而达到全局负载均衡的目的。
     
    3)RFS
    RFS(Receive Flow Steering)是RPS的扩展,由于RPS只是单纯的把数据包均衡到不同的CPU上,此时如果应用程序所在CPU和中断处理的CPU不在同一个核,将会对CPU Cache影响很大,RFS的作用就是将应用程序和软中断处理分配到同一个CPU。
     
    4)XPS
    Why XPS?
    如果过多的cpu使用相同的tx队列,那么加重tx对应的qdisc锁的争抢。 如果每个cpu只关联了一个tx,甚至能消除竞争
    可以减小因为发送完成中断造成的cache miss。
    因此xps_cpus的配置最好结合/proc/irq/xxx/smp_affinity, 映射最好在同一个cpu或者同一个numa node的cpu上
     
     
     
    3.  irqbalance
    默认所有的中断处理都集中在cpu0 上,导致服务器负载过高的时候,cpu0 成了瓶颈,而其他cpu 却还闲着,启用 irqbalance 服务,既可以提升性能,又可以降低能耗。
    irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode。
    • 处于 Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能。
    • 处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗。
     
    默认情况下,开启irqbalance是足够用的,但是对于一些对网络性能要求比较高的场景,手动绑定中断磨合是比较好的选择。
    irqbalance根据系统中断负载的情况,自动迁移中断保持中断的平衡,同时会考虑到省电因素等等。 但是在实时系统中会导致中断自动漂移,对性能造成不稳定因素,在高性能的场合建议关闭。
    开启irqbalance,会存在一些问题,比如:
    a) 有时候计算出来的值不合理,导致CPU使用还是不均衡。
    b) 在系统比较空闲IRQ处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU, 以保证其它空闲 CPU 的睡眠时间,降低能耗。如果压力突然上升,可能会由于调整的滞后性带来性能问题。
    c) 处理中断的CPU总是会变,导致了更多的context switch。
    d)也存在一些情况,启动了irqbalance,但是并没有生效,没有真正去设置处理中断的cpu。
     
     
     
    4. 绑定eth1 interrupt到CPU1
     
    默认网卡中断都集中到了 CPU0, 因此在有巨大网络流量的时候CPU0可能过载, 让网卡的数据包收发出现延迟. 为了分散CPU处理网卡中断, 我们需要设把网卡绑定到特定的CPU核心。
     
    4.1 网卡IRQ
    /root # cat /proc/interrupts | grep eth
    30:          0          0          0          0     GIC-0  90 Level     eth0
    31:        185        0          0          0     GIC-0  92 Level     eth1
    eth0 IRQ: 30
    eth1 IRQ: 31
     
    4.2 bind
    echo 2 > /proc/irq/31/smp_affinity
    /root # cat /proc/interrupts | grep eth
    30:          0          0          0          0     GIC-0  90 Level     eth0
    31:        185        258      0          0     GIC-0  92 Level     eth1
     
    4.3 smp_affinity与CPU的对应关系
    smp_affinity:
    CPU            Binary      Hex
    CPU 0      00000001      1
    CPU 1      00000010      2
    CPU 2      00000100      4
    CPU 3      00001000      8
     
    4.4 注意
    如果网卡中断时绑定在CPU0上处理硬中断的,那么其触发的软中断也是在CPU0上的,因为修改的NET_RX_SOFTIRQ是cpu-per的变量,只有其上的ksoftirq进程会去读取及执行。
     
    softirq采用谁触发,谁负责处理的。例如:当一个驱动的硬件中断被分发给了指定的CPU,并且在该中断handler中触发了一个softirq,那么该CPU负责调用该softirq number对应的action callback来处理该软中断。
     
     
     
     
    展开全文
  • 先总结:一定要明白多线程是为了让业务流程并发执行,因为IO阻塞问题,所以执行效率自然提高。...1.多线程在单核和多核CPU上的执行效率问题的讨论 a1:多线程在单cpu中其实也是顺序执行的,不过系统...
  • 1.多线程在单核和多核CPU上的执行效率问题的讨论a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢)多个cpu的话就可以在两个cpu中同时执行了..............a2: ...
  • 1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时执行了………….. ...
  • (1)手动分配固定数量的哈希槽 redis-cli --cluster reshard 127.0.0.1:7007 How many slots do you want to move (from 1 to 16384)? 300 #分配多少数量的哈希槽 What is the receiving node ID? 7be15f956fcb...
  • 文章目录 区分 多CPU && 多核CPU CPU缓存 并行 && 并发 多CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发 之间的关系 Linux下查看CPU相关信息 希望开此篇能帮到你。 区分 多CPU && 多核CPU 最早意识到这两个概念...
  • 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让...
  • 多线程与单核cpu,多核cpu

    千次阅读 2017-11-08 16:28:30
    1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时执行了………….. a2...
  • 1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时执行了………….. a2: 单核...
  • Win10 多cpu分配技巧

    千次阅读 2019-07-19 11:41:20
    当你的电脑有个程序在处理很占cpu的长时间操作比如Unity烘焙场景,如果你啥都不设置程序就会强制使用所有的cpu,导致你不能干其他的事情。这时打开任务管理器(Ctrl + Alt + Del) => 选择详细信息 ,然后找到那个...
  • 对多线程程序,单核cpu与多核cpu如何工作相关的探讨 我们程序员在编码的时候,涉及到技术方案时,往往会忽略掉代码对性能方面的影响,或者没有足够的敏感度来帮助自己判断自己的技术方案对系统性能造成的影响。改进...
  • 搭配NILabVIEW进行多核编程NILabVIEW图形化编程方法不仅省时,还很适合对多核处理器和其他并行硬件[如:现场可编程门阵列(FPGA)]进行编程。其中一项优势是:通过2个、4个或更多核将应用程序自动扩展至CPU,通常无需...
  • 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让...
  • 1)挥多核CPU 的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上就浪费了 50%, 在 4 核 CPU 上就浪费了...
  • coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程...
  • 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让...
  •  介绍了在 Linux 多核下如何绑定硬件中断到不同 CPU,其实也可以用类似的做法把进程手动分配到特定的 CPU 上,平时在 Linux 上运行的各种进程都是由 Linux 内核统一分配和管理的,由进程调度算法来决定哪个进程可以...
  • 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,547
精华内容 4,618
关键字:

多核cpu手动分配