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

CPU中断概念与案例

2 概念 2.1 中断概念 linux中断会打断CPU当前的工作,中断一般都设计的短小精悍。...但是也为了解决中断处理程序执行时间过长和中断丢失的问题,Linux中断分为两个阶段: 上半部用来快速处理中断,它在中断禁止模式下运行,主要处理硬件相关和时间敏感的工作 下半部用来延迟处理上半部未完成的工作...而下半部以内核线程的方式执行,并且每个CPU都对应一个中断内核线程,名字为 “ksoftirqd/CPU 编号”,比如说, 0 号 CPU 对应的中断内核线程的名字就是 ksoftirqd/0。...不过要注意的是,中断不只包括了刚刚所讲的硬件设备中断处理程序的下半部,一些内核自定义的事件也属于中断,比如内核调度和RCU 锁(Read-Copy Update 的缩写,RCU是 Linux 内核中最常用的锁之一...另外,刚刚提到过,中断实际上是以内核线程的方式运行的,每个 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上并行执行。...(4)中断指令 int是中断指令。 中断向量表是中断号和中断处理函数地址的对应表。 int n -- 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。...(5)硬中断中断的区别 中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断号是由中断控制器提供的,中断中断号由指令直接指出,无需使用中断控制器。...但一个中断不会抢占另一个中断,唯一可以抢占中断的是硬中断

21.3K21

中断中断_中断和硬中断的优先级

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间 就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是中断(softirq)来完成。...(3) 中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断 除外。...中断不能嵌套,但相同类型的中断可以在不同CPU上并行执行。 (4) 中断指令 int是中断指令。 中断向量表是中断号和中断处理函数地址的对应表。 int n – 触发软中断n。...硬中断中断号是由中断控制器提供的,中断中断号由指令直接指出,无需使用中断控制器。 硬中断是可屏蔽的,中断不可屏蔽。...但一个中断不会抢占另一个中断,唯一可以抢占中断的是硬中断

2.5K40

中断SOFTIRQ

中断的引入 中断的出现和linux系统对中断的划分是分不开的。...linux系统将整个中断处理过程分为了两部分,分别为上半部(Top Half)和下半部(Bottom Half),之所以要这样分是因为关闭中断的时间不能过长,也就是在关闭中断期间尽可能少干事,否则影响整个系统的性能...所以linux系统将中断处理分为两部分,在上半部全程关闭中断,下半部打开中断。而在上半部主要干一些和硬件有关的操作,速度快,在下部分做一些耗时的操作。这样一来既能保证系统效率又能处理各种中断。...那linux如何判断中断是否发生呢?...B: 根据注释, 如果当初处于中断上写文中(硬++NMI), 直接返回。 如果不是就调用wakeup_softirqd来唤醒本cpu上的内核线程。

2.2K21

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

CPU中断

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

3.1K30

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

硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。...现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。...在计算机里,中断是一种电信号,由硬件产生,并直接送到中断控制器(如 8259A)上,然后再由中断控制器向 CPU 发送信号,CPU 检测到该信号后,就中断当前的工作转而去处理中断。...光有高级可编程中断控制器的硬件支持还不够,Linux 内核还必须能利用到这些硬件特质,所以只有 kernel 2.4 以后的版本才支持把不同的硬件中断请求(IRQs)分配到特定的 CPU 上,这个绑定技术被称为...更多介绍请参看 Linux 内核源代码自带的文档:linux-2.6.31.8/Documentation/IRQ-affinity.txt 如何使用 先看看系统上的中断是怎么分配在 CPU 上的,很显然

5.3K83

中断通信简介

中断通信简介中断通信是进程间通信的一种常见方式,它基于信号机制,允许不同进程之间进行通信。在中断通信中,一个进程向另一个进程发送特定的信号,接收进程捕获信号并执行相应的处理。...中断通信的实现步骤如下:信号发送:发送进程使用kill()函数向接收进程发送信号,信号类型可以自行指定。...signal()函数概述signal()函数是UNIX/Linux系统中用于注册信号处理程序的系统调用。...信号是操作系统中的一种通知机制,用于通知进程发生了某些事件,如接收到外部中断或其他进程发送的信号。...signal()与常见信号SIGINTSIGINT是由键盘生成的中断信号,通常由用户按下Ctrl + C组合键发送给前台进程组的所有进程。

7110

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

1 一个奇怪的问题 了解了中断CPU的占用之后,如果你动手操作查看过的话,相信会和我一样会遇到下面这个的问题。...我当时对一台线上虚机查看中断造成的CPU开销的时候,发现很奇怪,那就是所有的中断几乎都是被一个CPU处理的。用top看si列,绝大部分都是消耗在CPU1上的,其它CPU只有很少。...# hping3 -S -p 80 -i 你的服务器ip 2 寻找问题原因 网卡和内核交互是通过中断的方式来进行的。既然是中断,那就每个可中断CPU的设备就都会有一个中断号。...来,我们现在虚机上找到中断对应的中断号(可能需要左右滑动)。...刚才我们服务器的包都是发送到eth1上的,它的读队列请求特别的多,因此30号“引脚”上的中断也会特别的多。自然和30亲和的2号CPU,也就是CPU1就会出现明显比其它CPU高的中断了。

56830

中断通信及signal()解读

中断通信 进程间通信方式有多种,其中中断通信是一种常见的方式,它基于信号机制,可以在不同进程之间进行通信。...中断通信的实现方式是,一个进程向另一个进程发送一个特定的信号,该信号被接收进程捕获,并进行相应的处理。...中断通信的步骤如下: 1)发送进程通过kill()函数向接收进程发送信号,信号类型可以自行指定。...需要注意的是,中断通信是一种异步通信方式,即发送进程和接收进程之间并不存在直接的同步机制。...因此,在设计使用中断通信的系统时,需要充分考虑这种异步机制所带来的影响。 signal() 概述 signal()函数是UNIX/Linux中的一个系统调用,用于注册信号处理程序。

28520

进程通信 中断 signal()解读

中断通信 进程间通信方式有多种,其中中断通信是一种常见的方式,它基于信号机制,可以在不同进程之间进行通信。...中断通信的实现方式是,一个进程向另一个进程发送一个特定的信号,该信号被接收进程捕获,并进行相应的处理。...中断通信的步骤如下: 1)发送进程通过kill()函数向接收进程发送信号,信号类型可以自行指定。...需要注意的是,中断通信是一种异步通信方式,即发送进程和接收进程之间并不存在直接的同步机制。...因此,在设计使用中断通信的系统时,需要充分考虑这种异步机制所带来的影响。 signal() 概述 signal()函数是UNIX/Linux中的一个系统调用,用于注册信号处理程序。

16830

记录一个中断问题

前些天发现XEN虚拟机上的Nginx服务器存在一个问题:中断过高,而且大部分都集中在同一个CPU,一旦系统繁忙,此CPU就会成为木桶的短板。...在问题服务器上运行「top」命令可以很明显看到「si」存在异样,大部分中断都集中在 1 号CPU上,其它的CPU完全使不上劲儿: shell> top Cpu0: 11.3%us, 4.7%sy,...了解了这些基本知识,我们可以尝试换一个CPU试试看会发生什么: echo 7 > /proc/irq/45/smp_affinity_list 再通过「top」命令观察,会发现处理中断CPU变成了...好消息是Linux支持RPS,通俗点来说就是在软件层面模拟实现硬件的多队列网卡功能。...最后,推荐看看香草总结的一些关于中断方面的资料和工具,很全面。

73130

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

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

1.7K30

简易RISCCPU设计

1,简介 FPGA设计中在IP核的提供方式上,通常将其分为核、固核和硬核这3类。...核(Soft IP Core) : 核在EDA 设计领域指的是综合之前的寄存器传输级(RTL) 模型;通常遍是指以HDL代码(Verilog,VHDL...)为形式的可综合源代码;固核(Firm IP...核只经过功能仿真,需要经过综合以及布局布线才能使用。其优点是灵活性高、可移植性强,允许用户自配置。核处理器是指利用HDL语言描述的处理器功能代码,用于实现处理器的所需要的各种功能。 ?...2,CPU的工作流程 常见的CPU内部有5级流水线组成。cpu的工作大致分为以下几个步骤; ? 1:取指。该阶段从内存中读取指令,PC(程序计数器)制定指令的地址。 2:译码。...图 12 RISC_CPU 时钟分频模块仿真-6 分频 ? 图 13 CPU 总线写操作—RISC_CPU 写入数据时序仿真 ?

1.1K40
领券