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

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

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.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    中断会吃掉你多少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.3K20

    Linux 中断机制分析

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

    8.7K91

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

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

    22.4K21

    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.6K30

    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.5K83

    虚机中断竟然是可一个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上,貌似是

    68330

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

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

    96720

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

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

    2.1K30

    Linux: 深入解析Watchdog: CPU锁定问题及解决方案

    Linux系统中,当我们看到类似消息:"watchdog: BUG: soft lockup - CPU#1 stuck for 34s!...[kworker/1:3:3315742]",这通常表明操作系统检测到了一个严重的问题,即CPU锁定。这种情况是由于CPU在较长时间内没有响应系统调度器的中断。...CPU锁定问题简介 在Linux操作系统中,watchdog是一种监视系统运行状态的机制,它可以在系统出现不响应时重启设备。"...原因分析 CPU锁定可能由多种因素引起,包括但不限于: 驱动程序错误:某些硬件驱动程序可能含有缺陷,导致CPU在执行特定操作时陷入死循环。...硬件故障:硬件问题,如过热或电源不稳定,也可能导致CPU响应缓慢或卡死。 内核bug:Linux内核本身的bug可能会在特定情况下触发软锁定。 3.

    4.6K20

    记一次性能调优

    一个 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

    73340

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

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

    3.5K50

    宋宝华: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.5K00

    CPU中断

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

    3.4K30

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

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

    1.7K20

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

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

    1.6K21

    SRE-面试问答模拟-Linux与K8S

    8. nginx的异步非阻塞nginx使用事件驱动机制,处理请求时阻塞当前线程,通过异步方式处理I/O操作,提高并发处理能力。9....进程中断中断、硬中断进程中断:操作系统中断进程执行,调度其他任务。中断:处理异步事件,如网络包处理。硬中断:由硬件触发,如外设请求CPU处理数据。12....Load和CPU使用率区别Load:系统负载,反映等待CPU执行的进程数量。CPU使用率:CPU被使用的百分比,反映CPU忙碌程度。17....17. cgroup 限制 CPU 的方式通过 cgroup 控制进程的 CPU 使用,设置 cpu.shares、cpu.cfs_quota_us 等参数。...29. request/limit 限制原理通过 cgroup 和 Linux 内核对 CPU 和内存的分配进行限制。30.

    11010

    Linux网络性能优化相关策略

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

    6.1K50
    领券