首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CPU中断概念与案例

2 概念 2.1 中断概念 linux中断会打断CPU当前的工作,中断一般都设计的短小精悍。...而下半部以内核线程的方式执行,并且每个CPU都对应一个中断内核线程,名字为 “ksoftirqd/CPU 编号”,比如说, 0 号 CPU 对应的中断内核线程的名字就是 ksoftirqd/0。...不过要注意的是,中断不只包括了刚刚所讲的硬件设备中断处理程序的下半部,一些内核自定义的事件也属于中断,比如内核调度和RCU 锁(Read-Copy Update 的缩写,RCU是 Linux 内核中最常用的锁之一...因此,使用 TASKLET 特别简便,当然也会存在一些问题,比如说由于只在一个 CPU 上运行导致的调度不均衡,再比如因为不能在多个 CPU 上并行运行带来了性能限制。...另外,刚刚提到过,中断实际上是以内核线程的方式运行的,每个 CPU 都对应一个中断内核线程,这个中断内核线程就叫做 ksoftirqd/CPU 编号。那要怎么查看这些线程的运行状况呢?

1.3K20

linux | 网络数据包softirq 中断CPU

Linux 在每个 CPU 上会创建一个 ksoftirqd 内核线程。 softirqs 是在 Linux 内核编译时就确定好的,例如网络收包对应的 NET_RX_SOFTIRQ 中断。...-5.15.4/net/core/dev.c 注册网卡收发包(RX/TX)中断处理函数 open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq...硬中断是昂贵的,因为它们不能被中断。即使有中断 合并(稍后详细描述),中断处理程序将独占一个 CPU 内核 完全地。NAPI 的设计允许驱动程序进入轮询模式而不是被 为每个需要的数据包接收硬中断。...在正常操作下,会引发初始硬中断或 IRQ,然后是 SoftIRQ 处理程序 它使用 NAPI 例程轮询卡。轮询例程有一个预算,它决定了 允许代码的 CPU 时间。.../about-linux-smp_affinity https://web.archive.org/web/20200225050436/http://blog.yufeng.info/archives

2.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

中断会吃掉你多少CPU

我们没必要啃明白中断的所有原理,但从一名追求性能的开发者的角度来看,我们有必要了解以下问题: 1、一次中断的开销到底多大? 2、你的服务器上被中断吃掉了多少CPU时间?...1 中断的诞生 CPU正常情况下都是专心处理用户的进程的,当外部的硬件或软件有消息想要通知CPU,就会通过中断请求(interrupt request,IRQ)的方式来进行。...所以现代的Linux又发明了软件中断,配合硬中断来处理网络IO。硬中断你可以理解只是个收包的,把包收取回来放到“家里”就完事,很快就能完成,这样耽误CPU响应其它外部高优先级的中断。...中断消耗的CPU周期相对比硬中断要多不少,所以我们本文来重点关注中断的开销。 2 中断的开销估算 前面大致介绍了中断的来龙去脉,好了直接进入本文的主题上,中断开销到底多大。...3)计算每次中断的耗时 该机器是16核的物理实机,故可以得出每个中断需要的CPU时间是=12ms/(56000/16)次=3.428us 从实验数据来看,一次中断CPU开销大约3.4us左右 3

1.2K20

Linux 中断机制分析

中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...调用__local_bh_disable关闭中断,其实就是设置正在处理软件中断标记,在同一个CPU上使得不能重入__do_softirq函数 6....处理中断内核线程 之前我说到不能让CPU长时间来处理中断事务,这样会影响系统的响应时间,严重影响用户和系统之间的交互式体验。...这里说的中断上下文指的就是系统为每个CPU建立的ksoftirqd进程。 看完这个函数,我不得不佩服这个函数设计的精巧!而我更多的从中体会到其中蕴藏的一种做人的道理。...中断的内核进程中主要有两个大循环,外层的循环处理有软件中断就处理,没有软件中断就休眠。内层的循环处理软件中断,并每循环一次都试探一次是否过长时间占据了CPU,需要调度释放CPU给其它进程。

8.6K91

Linux内核硬中断 中断的原理和实现

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。中断不能嵌套,但相同类型的中断可以在不同CPU上并行执行。...(5)硬中断中断的区别 中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断号是由中断控制器提供的,中断中断号由指令直接指出,无需使用中断控制器。...但一个中断不会抢占另一个中断,唯一可以抢占中断的是硬中断。...in_interrupt()) /* 如果处于硬中断中断 */ wakeup_softirqd(void); /* 唤醒ksoftirqd/n进程 */ } Percpu变量irq_cpustat_t

21.3K21

Linux内核22-中断和tasklet

这对于时间苛刻的应用来说,这是一个很重要的属性,尤其是那些要求中断请求必须在毫秒级别响应的应用。 Linux2.6内核使用两种手段满足这项挑战:中断和tasklet,还有工作队列。...更重要的是,总是把一个函数绑定到某个CPU上执行是有风险的,这个CPU可能负荷很重而其它的CPU可能比较空闲。 2 中断 Linux2.6内核中,中断的数量比较少。...事实上,只使用了6类中断,如下表所示: 表4-9 Linux2.6中使用的中断 中断 优先级 描述 HI_SOFTIRQ 0 处理高优先级的tasklet TIMER_SOFTIRQ 1 定时器中断...Linux中断处理程序总是从索引0开始执行。 2.1 中断使用的数据结构 中断的主要数据结构是softirq_vec数组,包含类型为softirq_action的32个元素。...这在Linux内核中是禁止的,因为其可延时函数的执行都是串行的。所以,在此需要禁止中断。 清除正在执行的中断对应掩码位。 执行local_irq_enable()使能中断

1.3K30

Linux 多核下绑定硬件中断到不同 CPU

硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。...在计算机里,中断是一种电信号,由硬件产生,并直接送到中断控制器(如 8259A)上,然后再由中断控制器向 CPU 发送信号,CPU 检测到该信号后,就中断当前的工作转而去处理中断。...光有高级可编程中断控制器的硬件支持还不够,Linux 内核还必须能利用到这些硬件特质,所以只有 kernel 2.4 以后的版本才支持把不同的硬件中断请求(IRQs)分配到特定的 CPU 上,这个绑定技术被称为...更多介绍请参看 Linux 内核源代码自带的文档:linux-2.6.31.8/Documentation/IRQ-affinity.txt 如何使用 先看看系统上的中断是怎么分配在 CPU 上的,很显然...922389621 ERR: 0 MIS: 0 有什么用 在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说,把不同的网卡 IRQ 均衡绑定到不同的

5.3K83

虚机中断竟然是可一个CPU使劲造?

1 一个奇怪的问题 了解了中断CPU的占用之后,如果你动手操作查看过的话,相信会和我一样会遇到下面这个的问题。...我当时对一台线上虚机查看中断造成的CPU开销的时候,发现很奇怪,那就是所有的中断几乎都是被一个CPU处理的。用top看si列,绝大部分都是消耗在CPU1上的,其它CPU只有很少。.../irq/30/smp_affinity 2 # cat /proc/irq/31/smp_affinity 4 原来虚拟机是通过将不同网卡的不同队列绑定在不同的CPU上来实现中断均衡的。...00:00:00 /usr/sbin/irqbalance --foreground irqbalance根据系统中断负载的情况,自动维护和迁移各个中断CPU亲和性,以保持各个CPU之间的中断开销均衡...# service irqbalance stop # echo 2 > /proc/irq/30/smp_affinity 不过我遇到了一个未解的问题,我想把一个中断的亲和性绑到2个CPU上,貌似是

56830

NAPI模式--中断和轮询的折中以及一个负载均衡的问题

中断或者中断特别是中断数量在 CPU 间的均衡可能造成各个 CPU 负载的严重不均衡,因为各个硬中断几乎都是瞬间完成的,硬中断不能耽搁太久的,但是各个不同中断的任务量缺是千差万别的,因此绝对不能按照数量来均衡中...因此这样会使得两个部分耦合过重,因此必须让硬中断均衡CPU均衡解耦合,其实现在的内核就是这么做的,所以才会造成 CPU均衡,硬件中断均衡CPU 均衡的解耦合带来的好处就是我们可以对中断均衡做文章...,而硬中断的负载均衡还是用数量均衡实现,中断彻底从硬件 中断中解放出来,不再是在处理硬中断CPU 上触发软中断,而是可以在任何 CPU 上触发软中断,由于不同中断的任务量千差万别,因此我们定义一个中断...的“权值”,然后按照不同中断这个权值和数量的积的和来均衡中断,这样的话,我想各个 CPU 的负载就均衡了,现在问题是,各个不同的中断的“权值” 的计算问题,呵呵。...一个论坛上一哥们儿写了一个patch,很有创意,比我这里的中断均衡的粒度要小得多,这个补丁不是均衡中断, 而是将中断进一步也分成了上下两部分,和 CPU 相关的上半部必须加急处理,这样不会对 CPU

79520

Linux内核中的中断、tasklet和工作队列具体解释

[TOC] 本文基于Linux2.6.32内核版本号。...引言 中断、tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的“下半部”(bottom half)演变而来。 下半部的机制实际上包含五种,但2.6版本号的内核中。...中断不能被自己打断(即单个cpu中断不能嵌套运行)。仅仅能被硬件中断打断(上半部)。 能够并发运行在多个CPU上(即使同一类型的也能够)。...这也是同一类型中断能够在多个cpu上并行运行的根本原因。...详细流程图例如以下所看到的: ---- 是否处于中断中在Linux中是通过preempt_count来判断的,详细例如以下: 在linux系统的进程数据结构里,有这么一个数据结构: #define

1.7K30

记一次性能调优

一个 openresty 项目,不了解 openresty 的可以参考我以前的文章,从 top 运行结果看,中断 si 分配不均,绝大部分压在了 CPU5 上,导致 CPU5 的空闲 id 接近于零,...最终的结果是其它 CPU 虽然还有空闲 id,但是却碍于 CPU5 的限制而使上劲儿: top 显示 si 不均衡 既然知道了中断是系统的性能短板,那么让我们看看中断都消耗在哪: shell>...watch -d -n 1 'cat /proc/softirqs' watch 显示中断集中在 NET_RX 通过 watch 命令,我们可以确认 CPU5 的中断接种在 NET_RX 上,也就是网卡上...运行结果: top 显示 nginx 的 time 不均衡 如上所示,会发现 nginx 多进程间的 time 分配并不均衡(此 time 是 cpu time),有的干活多,有的干活少,相关问题在「...一文中有相关描述:在原本的nginx 模型中,一个 socket 接收所有的请求,不同的 worker 按照 accet_mutext 的设置来争抢请求,不过因为 Linux 的 epoll-and-accept

66740

从STGW流量下降探秘内核收包机制

通过STGW CPU细粒度监控展示的信息,可以看到在出现问题的时间段内,部分CPU核被跑满,并且是由于中断消耗造成,回溯整个问题时间段,我们还发现,在一段长时间内,这种中断热点偏高都会在几个固定的核上出现...通过这里,我们可以初步确定,inet_lookup_listener消耗过高跟中断热点强相关,当热点将cpu单核跑满后就可能引发出流量有损的问题。由于中断热点持续在产生,线上稳定性隐患很大。...为什么热点只在部分核心出现 解决完哈希桶问题后,我们并没有定位到全部的问题,前面提到,中断热点仅在部分cpu核上出现,如果仅仅是__inet_lookup_listener问题,按理所有cpu核的中断消耗都会偏高...看到这里,网卡多队列不均衡问题原因已经定位清楚,由于现网使用了IPIP或GRE这类封装协议,部分网卡不支持解析内层IP PORT进行哈希,从而导致多队列不均衡,进一步导致cpu中断均衡,然后不均衡中断热点便出现了...至此我们发现,虽然网卡RSS存在不均衡,但RPS却依然将过多的数据包给了部分cpu core,没有做到负载均衡,这才是导致我们中断热点不均衡的直接原因。

3.3K50

宋宝华:LEP ( Linux 易用剖析器) 是什么,为什么以及怎么办 ( 2 )

点击预警的时间点时,可同步刷新当时的CPU利用率,IDLE,IRQ,SOFTIRQ等曲线。 6.2.2 负载不均衡预警 一旦检测到多核下,负载不均衡,以算法分析后,进行提示。...负载的不均衡主要体现为2个方面: 进程+中断+中断 中断+中断 在出现中断中断负载不均衡的时候,提示进行中断affinity的设置,以及提示采用RPS(Receive Packet Steering...[1509349010136_6522_1509349059427.jpg] 每秒中断、每秒中断、每秒上下文切换、swapin、swapout等残缺数据的采集和显示。...比如: overcommit_memory = 1, 暗示你的Linux总是假装系统有足够多的内存 [点击阅读文档…] … 在进程的CPU利用率图上,我们可以点击右键,展开它的线程,甚或进一步控制线程的调度策略...7.7 残缺功能添加和预警分析功能 中断中断、上下文切换、swapin、swapout、slab、vmalloc、Power等残缺的数据采集,负载预警,负载不均衡,内存泄漏预警,I/O过载预警等。

1.4K00

性能测试必备知识(9)- 深入理解“中断

前言 中断(softirq)导致 CPU 使用率升高也是最常见的一种性能问题 所以中断这个硬骨头必须啃下去!...所以,第二个配送员很可能试几次后就走掉了(也就是丢失了一次中断中断 中断处理过程分割 为了解决中断处理程序执行过长和中断丢失的问题,Linux 会将中断处理过程分成两个阶段,也就是上半部和下半部...,然后立即执行中断处理程序 下半部 由内核触发,也就是中断 特点:延迟执行 以内核线程的方式执行,并且每个 CPU 都对应一个中断内核线程,名字为 “ksoftirqd/CPU 编号”,比如说, 0...锁(Read-Copy Update), RCU 是 Linux 内核中最常用的锁之一 查看中断和内核线程 proc 文件系统 它是一种内核空间和用户空间进行通信的机制,可以用来查看内核的数据结构,...,每个 TASKLET 只运行一次就会结束 ,并且只在调用它的函数所在的 CPU 上运行 存在的问题: 由于只在一个 CPU 上运行导致的调度不均衡,再比如因为不能在多个 CPU 上并行运行带来了性能限制

1.4K20

CPU中断

其实,在机器启动的时候,系统就已经识别了所有设备,并且也把相应的中断处理器加载到中断表中。 下面是请求CPU关注的两种方式: 基于中断 基于轮询 所有的linux操作系统都是基于中断驱动的。...而下半部以内核线程的方式执行,并且每个 CPU 都对应一个中断内核线程,名字为 “ksoftirqd/CPU 编号”,比如说, 0 号 CPU 对应的中断内核线程的名字就是ksoftirqd/0。...不过要注意的是,中断不只包括了刚刚所讲的硬件设备中断处理程序的下半部,一些内核自定义的事件也属于中断,比如内核调度和 RCU 锁(Read-Copy Update 的缩写,RCU 是 Linux 内核中最常用的锁之一...因此,使用 TASKLET 特别简便,当然也会存在一些问题,比如说由于只在一个 CPU 上运行导致的调度不均衡,再比如因为不能在多个 CPU 上并行运行带来了性能限制。...中断实际上是以内核线程的方式运行的,每个 CPU 都对应一个中断内核线程,这个中断内核线程就叫做 ksoftirqd/CPU 编号。那要怎么查看这些线程的运行状况呢?

3.1K30

Linux调度系统全景指南(上篇)

| 导语 本文主要是讲Linux的调度系统, 由于全部内容太多,分三部分来讲,调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优化...CPU上下文 Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。...Linux系统调用CPU上下文切换堆栈结构: ?...,把不同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;对于数据库服务器这样的应用来说,把磁盘控制器绑到一个 CPU、把网卡绑定到另一个...中断内核线程 在 Linux 中,中断具有最高的优先级。

1.4K20

Linux网络性能优化相关策略

这取决于硬件和OS的实现,在笔者的经历中,还没有遇到smp_affinity设置为ff后,硬中断负载很均衡的情况。一般都是被分发到指定几个核心上,而其它核心只收到很少的一部分中断。...当进行接收中断处理时,有可能已经有多个网络设备触发了中断,追加在NAPI list上。...如果设备一直有报文,那么接收中断就会一直收取报文,直到budget的数量。 当中断占用CPU较多时,会导致在这个CPU上的应用得不到调度。所以这个budget值,要根据业务来选择合适的值。...因为不同协议报文的处理耗时是不同的,并且通过设置budget数量来控制接收中断的占用CPU的时间,并不直观。...因此在新版本的内核中,引入了一个新的参数netdev_budget_usecs,用于控制接收中断最大占用CPU时间。

5.1K50

点个外卖,我把「中断」搞懂了

不过,大数据杀熟早已是屡见鲜的事情了,事实上,几乎所有大平台都存在这种现象,没办法,这就是真实的互联网。 刹车,大数据杀熟的话题就说到这了,我们还是回归到今日的技术主题:什么是中断?。 ?...在 Linux 系统里,我们可以通过查看 /proc/softirqs 的 内容来知晓「中断」的运行情况,以及 /proc/interrupts 的 内容来知晓「硬中断」的运行情况。...---- 总结 为了避免由于中断处理程序执行时间过长,而影响正常进程的调度,Linux中断处理程序分为上半部和下半部: 上半部,对应硬中断,由硬件触发中断,用来快速处理中断; 下半部,对应中断,...由内核触发中断,用来异步处理上半部未完成的工作; Linux 中的中断包括网络收发、定时、调度、RCU 锁等各种类型,可以通过查看 /proc/softirqs 来观察中断的累计中断次数情况,如果要实时查看中断次数的变化率...如果在 top 命令发现,CPU中断上的使用率比较高,而且 CPU 使用率最高的进程也是中断 ksoftirqd 的时候,这种一般可以认为系统的开销被中断占据了。

1.2K31

Linux | 负载均衡理解之调度了解

负载均衡 系统中存在的负载有:中断,异常,中断,系统调用,进程等。 每个处理器各自设置一个调度队列,从而可能出现有的处理器的就绪队列进程很多而另一个处理器上的就绪队列任务很少的现象。...CPU负载 内核在每一个运行队列结构中为当前CPU维护一个静态权重load(load_weight), 其值为此次运行队列中的每一个任务权重task_struct->se->load的总和, /Users.../heidsoft/Downloads/research/linux-5.15.4/kernel/sched/fair.c /* * sd_lb_stats - Structure to store...enum group_type group_type; unsigned int group_asym_packing; /* Tasks should be moved to preferred CPU...unsigned int nr_numa_running; unsigned int nr_preferred_running; #endif }; Linux System Load 负载均衡情景分析

39330
领券