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

Linux 中断机制分析

中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...这样的后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理的任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。...可以表示是否处于中断处理或者软件中断处理过程中。...软件中断的处理过程 之前我已经说到,中断的一个很大的目的就是避免中断处理中,处理的操作过多而丢失中断同时中断还需要考虑到一件事情就是中断处理过程过长就会影响系统响应时间。...重新设置中断标记为0,set_softirq_pending重新设置中断标记为0,这样在之后重新开启中断之后硬件中断中又可以设置软件中断位。 7. 开启硬件中断 8.

8.7K91

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

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断可以打断正在执行的中断,但同种中断除外。中断不能嵌套,但相同类型的中断可以在不同CPU上并行执行。...(1)定义 中断是一组静态定义的下半部接口,可以在所有处理器上同时执行,即使两个类型相同也可以。...但一个中断不会抢占另一个中断,唯一可以抢占中断的是硬中断。...但它们最终肯定会被执行,所以这个折中的方案能够保证在中断很多时用户程序不会因为得不到处理时间而处于饥饿状态,同时也保证过量的中断最终会得到处理。

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

Linux中断可以嵌套吗?

问答 问:Linux中断可以嵌套吗? 答:以前是可以嵌套的,现在不可以!...历史 早前的Linux内核版本,中断分为两种: 快中断,申请的时候带IRQF_DISABLED标记,在IRQ HANDLER里面不允许新的中断进来; 慢中断,申请的时候不带IRQF_DISABLED标记...也就是说,从这个commit开始,实际Linux已经不再支持中断的嵌套, 也没有快慢中断的概念了,IRQF_DISABLED标记也作废了。...也就是说,当ARM处理器收到中断的时候,它进入中断模式,同时ARM处理器的CPSR寄存器的IRQ位会被硬件设置为屏蔽IRQ。...Linux内核会在如下2个时候重新开启CPSR对IRQ的响应: 从IRQ HANDLER返回中断底半部的SOFTIRQ 从IRQ HANDLER返回一个线程上下文 从1大家可以看出,SOFTIRQ里面是可以响应中断

5.3K31

Linux内核22-中断和tasklet

换句话说,不可能同时有2个以上的CPU执行相同类型的tasklet。当然了,不同类型的tasklet完全可以在多个CPU上同时执行。...2 中断 Linux2.6内核中,中断的数量比较少。对于多数目的,这些tasklet足够了。因为不需要考虑重入,所以简单易用。...事实上,只使用了6类中断,如下表所示: 表4-9 Linux2.6中使用的中断 中断 优先级 描述 HI_SOFTIRQ 0 处理高优先级的tasklet TIMER_SOFTIRQ 1 定时器中断...Linux中断处理程序总是从索引0开始执行。 2.1 中断使用的数据结构 中断的主要数据结构是softirq_vec数组,包含类型为softirq_action的32个元素。...中断函数也可以重新激活自身。实际上,网络中断和tasklet中断就是这样做的。更重要的是,外部事件,比如网卡上的数据包泛滥也可以频繁地激活中断

1.4K30

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.7K20

linux screen 命令详解(可以中断终端界面运行)

用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。 GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。...会话恢复 只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。...它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。...发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。...5.4 会话分离与恢复 你可以中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。

3.7K21

linux screen 命令详解(可以中断终端界面运行)

用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。 GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。...会话恢复 只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。...它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。...发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。...5.4 会话分离与恢复 你可以中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。

4.1K30

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

[TOC] 本文基于Linux2.6.32内核版本号。...引言 中断、tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的“下半部”(bottom half)演变而来。 下半部的机制实际上包含五种,但2.6版本号的内核中。...中断运行函数 do_softirq-->__do_softirq 运行中断处理函数__do_softirq前首先要满足两个条件: (1)不在中断中(硬中断中断和NMI) 。...中断内核线程 之前我们分析的触发软件中断的位置事实上是中断上下文中,而在中断的内核线程中实际已经是进程的上下文。...详细流程图例如以下所看到的: ---- 是否处于中断中在Linux中是通过preempt_count来判断的,详细例如以下: 在linux系统的进程数据结构里,有这么一个数据结构: #define

1.9K30

redis-1:一次关于smember和smembers的使用优化

(1).原因 循环中大量对redis的单次调用会产生大量的redis/io调用,导致业务JVM和redis的cpu的线程上下文和中断同时飙升。...业务JVM线程上下文和中断同时飙升原因: smember的时间复杂度是O(1),很快,jvm大量调用smember后,相关IO也会很快得到返回数据从而进入就绪状态,那么从就绪IO读取数据的线程会始终处于繁忙状态...大量的io事件->导致cpu %si(中断占用cpu时间)飙升。 关于中断: ?...(2).定位过程 循环中大量对redis的单次调用会产生大量的redis/io调用,导致业务JVM和redis的cpu的线程上下文和中断同时飙升。...top命令: 可以看到%sy(cpu内核时间),%si(cpu中断时间)非常高,实际上在繁忙时段,%us, %sy, %si可以各占1/3,这个对于%sy, %si非常非常高了,我们希望cpu时间尽可能多的用于

5.7K41

KeyarchOS:全天候智能化维,为企业增效降本

新麒麟操作系统(NeoKylin):由中国歌华有线网络有限公司开发,是一款面向企业和政府用户的Linux发行版,提供了针对中国市场特定需求的定制化功能和服务。...1.2 KeyarchOS简介 KeyarchOS 即云峦服务器操作系统是浪潮信息基于 Linux 内核、龙蜥等开源技术自主研发的款服务器操作系统,支持 x86、ARM 等主流架构处理器,广泛兼容传统...系统诊断:诊断的典型问题如负载异常、网络抖动、内存泄漏、IO毛刺、性能瓶颈、应用异常等,针对性的提供工具,同时尽量减少工具的专业性,让用户更易使用和解读。...3.2 Linux内核内存泄露检测 Linux内核内存分配有几种不同的机制,其中包括slab、page和vmalloc,本次针对slab,page两种内存分配机制进行检测模拟。...中断中断响应不及时,业务运行过程会依赖于中断中断执行过程,包括网络收发包、IO 读写等。因此可以分析关中断时长来判断中断的响应时间。

27610

Linux 优化 | 我终于要对维小哥下手了

如何做到硬刚维小哥 之前学习 Linux 命令的时候有学到 man 的使用,还有它的进阶版本 info 他可以更详细的查询命令手册 所以我们掌握了它们之后就可以完成从无处下手到有迹可循的蜕变。...id:空闲cpu wa:cpu运行时在等待io的时间 hi:cpu处理硬中断的数量 si:cpu处理中断的数量 st:被虚拟机偷走的cpu 这里再推荐另一个小工具,dstat 可以使用yum install...dtat 可以同时查看到 cpu,磁盘,网络的使用率,方便。 进程 CPU 使用率 查看进程就比较简单了,直接使用 ps 就可以了。 ?...而进程的内存分析使用还是上面提到过的 ps 和 top 两个命令,可以同时查看进程的 CPU 使用率和内存的使用率 当你收到内存不足的告警时,首先可以从监控系统中。找出占用内存最多的几个进程。...r/s 和 w/s 分别是每秒的读操作和写操作,而rKB/s 和wKB/s 列以每秒千字节为单位显示了读和写的数据量 总结 上面就是我简单优化 linux 系统的第一步,简单通过工具就可以完成。

87010

聊聊TCP连接耗时的那些事儿

中断中,当一个包被内核从RingBuffer中摘下来的时候,在内核中是用struct sk_buff结构体来表示的(参见内核代码include/linux/skbuff.h)。...同样是中断处理开销 ACK传到服务器:和SYN包,一样,再经过几乎同样远的路,传输一遍。...一次上下文切换的CPU开销 以上几步操作,可以简单划分为两类: 第一类是内核消耗CPU进行接收、发送或者是处理,包括系统调用、中断和上下文切换。它们的耗时基本都是几个us左右。...具体的分析过程可以参见《一次系统调用开销到底有多大?》、《中断会吃掉你多少CPU?》、《进程/线程切换会用掉你多少CPU?》这三篇文章。...你可能需要同时调整你的应用程序和该内核参数。

2.2K40

聊聊维应该了解的一些内核知识

目录 维为什么要了解内核 进程 系统调用 中断 内核同步 定时器和时间管理 内存分配 虚拟文件系统 块I/O层 I/O算法 页高速缓存和页回写 关于内核的几个概念 一、维为什么要了解内核 维为什么要了解内核...具体内核的API如何实现,这个要依靠Linux内核程序员,关于系统调用,维了解到这些知识就可以了。 四、中断 还是通过几个概念来了解中断。...第三种方法,中断和tasklet,这种方法是在内核2.3版本中引入的,中断可以在所有处理器上同时执行,tasklet是一种基于中断实现的灵活性强、动态创建的下半部实现机制,两个不同类型的tasklet...可以同时在不同的处理器上执行,但是类型相同的tasklet不能同时执行,tasklet是性能和易用性之间平衡的产物,可以处理大部分下半部中断处理。...中断和tasklet,内核能在任何时刻唤醒或者调度中断和tasklet,打断当前正在执行的代码。 内核抢占,因为内核具有抢占性,内核中的任务可能会被另一任务抢占。

1.1K10

聊聊TCP连接耗时的那些事儿

中断中,当一个包被内核从RingBuffer中摘下来的时候,在内核中是用struct sk_buff结构体来表示的(参见内核代码include/linux/skbuff.h)。...同样是中断处理开销 ACK传到服务器:和SYN包,一样,再经过几乎同样远的路,传输一遍。...一次上下文切换的CPU开销 以上几步操作,可以简单划分为两类: 第一类是内核消耗CPU进行接收、发送或者是处理,包括系统调用、中断和上下文切换。它们的耗时基本都是几个us左右。...具体的分析过程可以参见《一次系统调用开销到底有多大?》、《中断会吃掉你多少CPU?》、《进程/线程切换会用掉你多少CPU?》这三篇文章。...你可能需要同时调整你的应用程序和该内核参数。

1.5K50

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

CPU上下文 Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。...所以中断必须设计为可重入的函数(允许多个CPU同时操作),因此也需要使用自旋锁来保护其数据结构。 中断的调度时机: do_irq完成I/O中断时调用irq_exit。...中断内核线程 在 Linux 中,中断具有最高的优先级。...如果推后执行的任务需要在一个tick之内处理,则使用中断或tasklet,因为其可以抢占普通进程和内核线程,同时不可睡眠。...4.硬中断可以被另一个优先级比自己高的硬中断中断”,不能被同级(同一种硬中断)或低级的硬中断中断”,更不能被中断中断”。中断可以被硬中断中断”,但是不会被另一个中断中断”。

1.5K20

不为人知的网络编程(十一):从底层入手,深度分析TCP连接耗时的秘密

后,内核经过硬中断中断等机制来处理(如果发送的是用户数据的话,最后会发送到socket的接收队列中,并唤醒用户进程)。...在中断中,当一个包被内核从RingBuffer中摘下来的时候,在内核中是用struct sk_buff结构体来表示的(参见内核代码include/linux/skbuff.h)。...同样是中断处理开销; 6)ACK传到服务器:和SYN包,一样,再经过几乎同样远的路,传输一遍。...以上几步操作,可以简单划分为两类: 第一类:是内核消耗CPU进行接收、发送或者是处理,包括系统调用、中断和上下文切换。...你可能需要同时调整你的应用程序和该内核参数。

61310

一次简单的php请求redis会有哪些开销?

在前面的文章中介绍了一些和CPU相关的硬件、内核知识,把开销大户进程上下文切换、系统调用、中断的具体开销都挨个分析了一遍。没有看过的同学请关注并翻看我以前的文章。...或者是说:“线上服务器的维不都应该是维的工作吗?和开发又没关系” 我想说的是,如果你只是一个初级或者中级开发工程师,这些确实没有必要了解。...4 中断开销 每次在redis服务器返回数据的时候,网卡都会通过中断的方式来让内核处理数据包。因此我们查看中断次数(可能需要左右滑动查看)。...每次get请求收到数据返回的时候,内核必须要支出一次中断的开销! 5 总结 看似一次非常简单的redis get操作就会把所有系统态的高开销操作都涉及到了。...一次进程上下文切换、一次中断、若干次系统调用。在经过了前面多篇文章的历练,相信大家对它们的开销有了一个量化的拿捏。

31130

Linux内核中断顶半部和底半部的理解

尽管顶半部、底半部的结合能够善系统的响应能力,但是,僵化地认为Linux设备驱动中的中断处理一定要分两个半部则是不对的。如果中断要处理的工作本身很少,则完全可以直接在顶半部全部完成。   ...在Linux内核中,用 softing_action结构体表征一个中断,这个结构体包含中断处理函数指针和传递给该函数的参数。...使用 open_softirq()函数可以注册中断对应的处理函数,而 raise_softirq()函数可以触发一个中断。   ...在Linux 2.6.36以后,转而实现“Concurrency-managedworkqueues”,简称cmwq,cmwq会自动维护工作队列的线程池以提高并发性,同时保持了API的向后兼容。...在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。   3. 硬中断可以直接中断CPU。

1.8K30
领券