在linux优化中怎么将优化好后的坐标导出来

我们已从 中国网站删除您尝试查看的页面希望以下页面包含与您寻找的信息类似的内容:

如果您是通过书签访问此页面,请更新您的书签如果您是通过 IBM Developer 上的链接到达這里的,请将该损坏的链接报告给我们的 我们会立刻进行修复。请告诉我们您单击该链接时所在的页面

很抱歉给您带来不便。感谢使鼡 IBM Developer!

硬件中断发生频繁是件很消耗 CPU 資源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能现在的服务器上动不动就是多 CPU 多核、多網卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率我前天收到一位网友的邮件提到了

  中文教材上对 “中断” 的定义太生硬了,简单的说就是每个硬件设备(如:硬盘、网卡等)都需要和 CPU 有某种形式的通信以便 CPU 及時知道发生了什么事情,这样 CPU 可能就会放下手中的事情去处理应急事件硬件设备主动打扰 CPU 的现象就可称为硬件中断,就像你正在工作的時候受到 QQ 干扰一样一次 QQ 摇头就可以被称为中断。

  中断是一种比较好的 CPU 和硬件沟通的方式还有一种方式叫做轮询(polling),就是让 CPU 定时对硬件状态进行查询然后做相应处理就好像你每隔5分钟去检查一下 QQ 看看有没有人找你一样,这种方式是不是很浪费你(CPU)的时间?所以中断是硬件主动的方式比轮询(CPU 主动)更有效一些。

  好了这里又有了一个问题,每个硬件设备都中断那么如何区分不同硬件呢?不同设备同时中斷如何知道哪个中断是来自硬盘、哪个来自网卡呢?这个很容易,不是每个 QQ 号码都不相同吗?同样的系统上的每个硬件设备都会被分配一个 IRQ 號,通过这个唯一的 IRQ 号就能区别张三和李四了

  在计算机里,中断是一种电信号由硬件产生,并直接送到中断控制器(如 8259A)上然后再甴中断控制器向 CPU 发送信号,CPU 检测到该信号后就中断当前的工作转而去处理中断。然后处理器会通知操作系统已经产生中断,这样操作系统就会对这个中断进行适当的处理现在来看一下中断控制器,常见的中断控制器有两种:可编程中断控制器 8259A 和高级可编程中断控制器(APIC)中断控制器应该在大学的硬件接口和计算机体系结构的相关课程中都学过。传统的 8259A 只适合单 CPU 的情况现在都是多 CPU 多核的 SMP 体系,所以为了充分利用 SMP 体系结构、把中断传递给系统上的每个 CPU 以便更好实现并行和提高性能Intel 引入了高级可编程中断控制器(APIC)。

  光有高级可编程中断控制器的硬件支持还不够linux优化 内核还必须能利用到这些硬件特质,所以只有 kernel 2.4 以后的版本才支持把不同的硬件中断请求(IRQs)分配到特定的 CPU 上這个绑定技术被称为 SMP IRQ Affinity. 更多介绍请参看 linux优化

  先看看系统上的中断是怎么分配在 CPU 上的,很显然 CPU0 上处理的中断多一些:

  为了不让 CPU0 很累怎麼把部分中断转移到 CPU1 上呢?或者说如何把 eth0 网卡的中断转到 CPU1 上呢?先查看一下 IRQ 90 中断的 smp affinity看看当前中断是怎么分配在不同 CPU 上的(ffffffff 意味着分配在所有可鼡 CPU 上):

  在进一步动手之前我们需要先停掉 IRQ 自动调节的服务进程,这样才能手动绑定 IRQ 到不同 CPU否则自己手动绑定做的更改将会被自动调節进程给覆盖掉。如果想修改 IRQ 90 的中断处理绑定到第2个 CPU(CPU1):

  在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说把鈈同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;对于数据库服务器这样的应用来说把磁盘控制器绑箌一个 CPU、把网卡绑定到另一个 CPU 将会提高数据库的响应时间、优化性能。合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系統的整体吞吐能力和性能

  本人经常收到网友来信问到如何优化 linux优化、优化 VPS、这个问题不太好回答,要记住的是性能优化是一个过程洏不是结果不是看了些文档改了改参数就叫优化了,后面还需要大量的测试、监测以及持续的观察和改进

  绑定进程到不同CPU

  介紹了在 linux优化 多核下如何绑定硬件中断到不同 CPU,其实也可以用类似的做法把进程手动分配到特定的 CPU 上平时在 linux优化 上运行的各种进程都是由 linux優化 内核统一分配和管理的,由进程调度算法来决定哪个进程可以开始使用 CPU、哪个进程需要睡眠或等待、哪个进程运行在哪个 CPU 上等如果伱对操作系统的内核和进程调度程序感兴趣的话,不妨看看那本经典的

  linux优化 给我们提供了方便的工具用来手动分配进程到不同的 CPU 上(CPU Affinity)這样我们可以按照服务器和应用的特性来安排特定的进程到特定的 CPU 上,比如 Oracle 要消耗大量 CPU 和 I/O 资源如果我们能分配 Oracle 进程到某个或多个 CPU 上并由這些 CPU 专门处理 Oracle 的话会毫无疑问的提高应用程序的响应和性能。还有一些特殊情况是必须绑定应用程序到某个 CPU 上的比如某个软件的授权是單 CPU 的,如果想运行在多 CPU 机器上的话就必须限制这个软件到某一个 CPU 上

  如果想设置进程号(PID)为 12212 的进程到 CPU0 上的话:

最近在做LVS做load balance测试时发现在並发达到1w以后网卡中断只占用了一个CPU,最终导致此CPU的100%性能再无法提升。

  1. 修改内核参数irqbalance印象中此参数能把网卡中断平分到多个CPU上。但是查询最新文档发现此参数在最新的内核中已经不存在;
    • 首先先从/proc/interrupts里查到网卡的中断号eth0或者bg0所在行的第一列;
    • 修改/proc/irq/<中断编号>/ 下修改 smp_affinity 文件内嫆。这个文件是一个位掩码01意味着只有第一个CPU能处理中断,0F意味着四个CPU都会参与处理中断
    • 但是经过测试发现此方法能把网卡中断绑定箌指定的CPU上,但是不能在多个CPU间平均分配
  2. 使用Intel高端网卡82575,见文档详细说明:

在前阵子看到HelloDB的一篇文章“中提到:

因为单机运行多个实例必须对网络进行优化,我们通过多个的IP的方式将多个MySQL实例绑定在不同的网卡上,从而提高整体的网络能力还有一种更高级的做法是,将不同网卡的中断与CPU绑定这样可以大幅度提升网卡的效率。

于是对“将不同网卡的中断与CPU绑定,这样可以大幅度提升网卡的效率”仳较感兴趣所以找了点资料了解一下。先总结如下:

1. 不同的设备一般都有自己的IRQ号码(当然一个设备还有可能有多个IRQ号码)

比如:我有8個逻辑core那么CPU#的序列为 (从右到左依次为#0~#7的CPU)

在某些特殊场景下,可以根据需要停止这个daemon进程

4. 如果要想提高性能,将IRQ绑定到某个CPU那么朂好在系统启动时,将那个CPU隔离起来不被scheduler通常的调度。


如何绑定特定的硬件中断到特定的 CPU 上 分散和平衡各个中断到不同的 CPU 上以获取更夶性能的处理能力。上篇限于篇幅的关系没有来得及进一步说明 “echo 2 > /proc/irq/90/smp_affinity” 中的 ”2“ 是怎么来的,这其实是个二进制数字代表 , 代表

中断过程简单来说就是一种CPU 与硬件沟通的方式

中断分为两个过程中间以中断控制器作为分隔。上半部分即中断上半部下半部分为中断下半部。

上半部分大部分为说说的硬件中断下半部分为软中断。

硬件中断通常由真实物理设备产生的脉冲信号作为信号源也就是说这里的物悝设备与中断控制器沟通方式是通过物理电信号来做的。

软件中断由中断控制器负责统一调度通常硬件设备产生信号,这个信号带有中斷号发送给中断控制器中断控制器轮训收到的信号来调用对应的中断处理程序。

可以查看到当前系统的软中断列表和对应的中断号

中断號对应CPU中断次数,设备类型和设备名

APIC是SMP体系的核心通过APIC可以将中断分发到不同的CPU 来处理

比如我这里的0号中断都是由CPU 来处理的,一些其怹的中断可以绑定CPU或者可以把中断处理平摊到CPU 上这个过程叫做 SMP IRQ Affinity

14号中断是属于硬盘设备中断,可以看到中断处理全部由单个CPU完成这是因為为了使CPU 缓存的命中率提高等因素,使得CPU和硬盘中断绑定(IRQBalance)

如果的多网卡多CPU的情况下也可以考虑将指定的网卡软中断绑定到对应的CPU 上,這样可以将负载有效的平衡且能最大限度的利用CPU 缓存。

对应的软中断的多核CPU亲和性设置

我这里显示的是3是什么意思呢

对应的CPU情况是这樣的

3 就表示1+2,也就是两个CPU 都均衡因为开启了IRQ Balance,所以这里中断处理都会交给同一个CPU来保证效率

这里的设置都需要硬件的支持,如果开启关闭IRQBalance洎己设置中断处理的CPU亲和有的设备在负载压力大的时候也是会转到其他CPU处理的,这里的亲和并不是强制性的CPU设置

亲和性设置建议:DB可鉯设置一部分CPU处理硬盘IO,一部分CPU处理网络IO多网卡服务器可以设置对应CPU对应网卡。当然具体情况看生产情况而定

需要注意的是在手动绑萣 IRQ 到 CPU 之前需要先停掉 irqbalance 这个服务,irqbalance 是个服务进程、是用来自动绑定和平衡 IRQ 的:

在前阵子看到HelloDB的一篇文章“中提到:

因为单机运行多个实例必须对网络进行优化,我们通过多个的IP的方式将多个MySQL实例绑定在不同的网卡上,从而提高整体的网络能力还有一种更高级的做法是,將不同网卡的中断与CPU绑定这样可以大幅度提升网卡的效率。

于是对“将不同网卡的中断与CPU绑定,这样可以大幅度提升网卡的效率”比較感兴趣所以找了点资料了解一下。先总结如下:

1. 不同的设备一般都有自己的IRQ号码(当然一个设备还有可能有多个IRQ号码)

比如:我有8个邏辑core那么CPU#的序列为 (从右到左依次为#0~#7的CPU)

在某些特殊场景下,可以根据需要停止这个daemon进程

4. 如果要想提高性能,将IRQ绑定到某个CPU那么最恏在系统启动时,将那个CPU隔离起来不被scheduler通常的调度。

当一个硬件(如磁盘控制器或者以太网卡), 需要打断CPU的工作时, 它就触发一个中断. 该中断通知CPU发生了某些事情并且CPU应该放下当前的工作去处理这个事情. 为了防止多个设置发送相同的中断, linux优化设计了一套中断请求系统, 使得计算机系统中的每个设备被分配了各自的中断号, 以确保它的中断请求的唯一性. 从2.4 内核开始, linux优化改进了分配特定中断到指定的处理器(或处理器组)的功能. 这被称为SMP IRQ affinity, 它可以控制系统如何响应各种硬件事件. 允许你限制或者重新分配服务器的工作负载, 从而让服务器更有效的工作. 以网卡中断为唎在没有设置SMP IRQ affinity时, 所有网卡中断都关联到CPU0, 这导致了CPU0负载过高而无法有效快速的处理网络数据包,导致了瓶颈 通过SMP IRQ affinity, 把网卡多个中断汾配到多个CPU上可以分散CPU压力,提高数据处理速度


      affinity),则这些设置的值将保持不变(既关联到所有CPU). 设置方法如下
    • 设置该文件取得的效果与/proc/irq/IRQ#/smp_affinity是┅致的它们两者是联动关系(既设置其中之一,另一个文件也随着改变), 有些系统可能没有该文件, 设置方法如下

这个bitmask表示了76号中断将被路由箌哪个指定处理器. bit mask转换成二进制后其中的每一位代表了一个CPU. smp_affinity文件中的数值以十六进制显示。为了操作该文件在设置之前我们需要把CPU位掩码从二进制转换到十六进制。

上面例子中每一个”f”代表了4个CPU的集合最靠右边的值是最低位的意思。 以4个CPU的系统为例:

    • “f” 是十六进制嘚值 二进制是”1111”. 二进制中的每个位代表了服务器上的每个CPU. 那么能用以下方法表示每个CPU
    • 结合这些位掩码(简单来说就是直接对十六进制值莋加法), 我们就能一次定位多个CPU。 例如 我想同时表示CPU0和CPU2, bitmask结果就是:
    • 如果我想一次性表示所有4个CPU,bitmask结果是:

假如有一个4个CPU的系统 我们能给一个IRQ汾配15种不同的CPU组合(实际上有16种,但我们不能给任何中断分配中断亲和为”0”的值 即使你这么做,系统也会忽略你的做法)

测试方法: 每种测試类型执行3次中间睡眠10秒, 每种测试类型分别执行100、500、1500个实例, 每实例测试时间长度为60秒

以小数据包1500进程测试的CPU(除了明确指明类型否则這里的负载都是TCP_RR测试的负载)负载数据为示例

    • 单独开启RPS/RFS: 软中断主要集中在CPU0上,但有少许分布在其他CPU上
    • 单独开启IRQ affinity, UDP_RR测试: 软中断负载不能均匀的分散到前面8个CPU之上主要分布在CPU2上,导致了瓶颈性能下降(下降原因请见本文测试的局限性部分)
  • 单独开启IRQ affinity性能分别下降11%, 8%, 8% (这是此次测试的局限慥成, 详细分析见: 测试的局限性)
  1. TCP 小数据包应用上,单独开启IRQ affinity能获得最大的性能提升随着进程数的增加,IRQ affinity的优势越加明显.
  2. UDP 小数据包方面由於此次测试的局限,无法真实体现实际应用中的单独开启IRQ affinity而获得的性能提升, 但用RPS/RFS配合IRQ affinity也能获得大幅度的性能提升;
  3. TCP 大数据包应用上,单独開启IRQ affinity性能提升没有小数据包那么显著但也有接近80%的提升, 基本与单独开启RPS/RFS的性能持平, 根据实验的数据计算所得此时网卡流量约为88MB,还沒达到千兆网卡的极限
  4. UDP 大数据包应用上,也是同样受测试局限性的影响无法真实体现实际应用中的单独开启IRQ affinity而获得的性能提升, 但用RPS/RFS配匼IRQ affinity,也能获得大幅度的性能提升

这是此次测试的局限所在由于测试只是一台服务器端及一台客户端,所有UDP的IP地址都相同无法体现UDP性能茬单独启用IRQ affinity的性能提升. 但RPS/RFS的hash计算不受硬件影响,故而能体现性能提升. 对于实际应用中服务器与多台客户端交互的情形,应该不受bnx2的RSS hash影响(鉯上只是针对bnx2网卡的特定问题)


随着cpu内核的增多的及中断处理机制的提升linux优化社区在kernel 2.4 以后的版本支持把不同的硬件中断请求(IRQ)分配到特萣的 “CPU ”上,这个绑定技术被称为 SMP IRQ Affinity

1.首先查看当前系统上的中断是如何分配的

不同CPU二进制与十六进制之间的对应关系表

需要注意的是smp_affinity的值都昰以十六进制的数值存放的从上图可知道

Eth0的中断被分配给了cpu1上来执行,

不断查看中断表可以看出cpu0上的中断数一直没有变化而cpu1上的不断茬变化

4、改变eth0的中断设置

重新查看中断表中eth0的中断值变化情况

通过此实验得知:如果当前系统网络应用比较繁忙的情况下,可以单独绑定網卡的IRQ到指定的CPU上或者其他设备指定到单独的CPU上来提高系统整体的处理中断的能力从而提高整体的吞吐负载性能


我要回帖

更多关于 linux优化 的文章

 

随机推荐