问题标签 [softirq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1187 浏览

linux - 高网络流量上的 ksoftirqd 行为

我在基于 MIPS (octeon) 的硬件上运行 Windriver Linux。Linux 在 16 个内核上运行,我们运行了 kofirqd/0 到 ksoftirq/15。我观察到对高传入流量(如 ping flood)进行负载平衡的以下行为:

首先,kostfirqd/0 承担所有负载,直到达到大约 96-97% 的 cpu。一旦 cpu0 达到 96-97% 的使用率,koftirqd/1 开始承担负载并且 cpu1 的 CPU 百分比开始增加。在注入更多流量时,cpu 1 达到 96 -97%,cpu2 开始承担负载。随着传入流量的增加,它一直持续到 ksoftirqd/15 占用 96-97%。

这是预期的行为吗?您能否让我知道这是默认的 linux 行为还是 Windriver 可能进行的改进。

非常感谢,

瓦苏杰夫

0 投票
1 回答
741 浏览

linux - 如何在 linux 中停止/禁用 IPI(进程间中断)?

我试图在执行某些应用程序时禁用来自内核的 irq 调用,我在执行我的应用程序之前调用local_irq_disable()足以禁用 IRQ 标志。是否有任何其他方法可以禁用 IRQ,请建议我。

0 投票
2 回答
1202 浏览

performance - 与内核 3.4 相比,为什么内核 4.1 上的软中断服务时间增加了?

在将 linux 从内核 3.4 升级到 4.1 版本时,我们发现了性能下降问题。看来,这是因为新内核花费了更多时间来服务软中断。

我们使用生成 GTP-C 数据包(通过 UDP)的流量生成器 (IXIA) 和一个简单的应用程序进行了测试,该应用程序将接收到的数据包发回。它只是交换源 IP 地址和目标 IP 地址。我们使用 mpstat 实用程序得到以下结果:

  • 内核 3.4
  • 内核 4.1

测试条件:

  1. 流量速率:50000 fps
  2. 应用程序使用taskset命令绑定到CPU 1
  3. 所有中断(与以太网接口相关)都绑定到 CPU 0。

正如我们所见,“%soft”在 CPU 0 上显着增加:12.91% -> 52.79%。但是 NET_RX/s 减少了:62813.75 -> 56777.58。

我们还尝试使用 perf 实用程序分析 CPU 0。不幸的是,没有找到任何线索。

  • 内核 3.4
  • 内核 4.1

也许,有人面临类似的问题。任何意见和建议将不胜感激。

0 投票
1 回答
317 浏览

linux-kernel - 在 Linux 中暂停 kthread

这里https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/#queuing-disciplines 它是这样写的:

正如您从上一篇文章中看到的那样,NET_TX_SOFTIRQ 软中断已向其注册了函数 net_tx_action。这意味着有一个内核线程在执行 net_tx_action。该线程偶尔会暂停并 raise_softirq_irqoff 恢复它。让我们看看 net_tx_action 做了什么,以便我们了解内核如何处理传输请求。

kthread时候偶尔会停顿。当 akthread暂停时,为什么?

kthread 如何知道要执行的工作?它会轮询队列吗?

0 投票
0 回答
115 浏览

linux-kernel - 在 URB 完成例程中调用 send_sig_info() 是否安全?

我们知道 USB URB 完成回调将在 softIRQ 上下文中执行。让我解释一下我尝试使用 send_sig_info() 的背景。所以我目前正在数据采集委员会工作。为此,在 USB 设备端,我有两个模块,FPGA 和 FX3 USB 芯片。FX3 设备固件暴露了 4 个端点。在 4 个 EP 中,2 个用于 FPGA 的寄存器读/写,1 个用于捕获 Interrupt IN EP。

我的项目中有一个要求是在中断 IN EP 上捕获 FPGA 的中断信号(FPGA 在 GPIO 引脚上向 FX3 提供中断,作为响应,FX3 将产生虚拟数据),并且在设备驱动程序内部成功接收到中断信号后,读取 FPGA 中断状态使用批量 urb 注册。所以在中断 IN urb 完成回调中,我打算提交批量 urb 以读取 FPGA 中断寄存器。

现在不解释了,进入重点。在成功读取 FPGA 的中断状态寄存器值后的上述批量 urb 完成回调中,我需要使用信号将该整数值发送给 userapp。这样 userapp 事件引擎将执行正确的操作。

那么在批量 urb 完成回调中调用 send_sig_info() 将数据传递给 userapp 是否安全?

0 投票
1 回答
72 浏览

network-programming - rps过程使用带有local_irq_disable的spinlock的原因

这些天,我正在研究内核内部网络代码,尤其是RPS代码。你知道,有很多关于它的功能。但我主要关注一些关于SMP 队列处理的功能,例如enqueue_to_backlogprocess_backlog.

enqueue_to_backlog我想知道通过使用两个函数 -和-来同步两个内核(或单核)process_backlog

在该函数中,A core(A) 持有spin_lock另一个 core(B) 的 a,用于将数据包排队进入input_pkt_queue并调度 core(B) 的 napi。并且A Core(B) 还拥有一个spin_lock用于拼接input_pkt_queueprocess_queuecore(B) 并自行删除 napi 时间表。我知道spin_lock应该保留以防止两个核心在处理队列期间相互访问同一个队列。

但我不明白为什么spin_locklocal_irq_disable(或local_irq_save)调用。我认为rps_lock当中断(TH)抢占当前上下文(softirq,BH)时,中断上下文(TH)无法访问队列或核心(B)。- 当然,可以访问 napi 结构以通过 TH 调度 napi,但它会禁用 irq,直到排队数据包 -所以我想知道为什么spin_lock使用 irq disable 调用。

我认为其他 BH(例如 tasklet)不可能抢占当前上下文(napi,softirq)。这是真的吗?而且我想知道 local_irq_disable 是禁用所有核心 irq 还是仅从字面上禁用当前核心的 irq?实际上,我读过一本关于内核开发的书,但我认为我对抢占的理解不够。

能解释一下为什么 rps 程序使用spin_lockwith的原因local_irq_disable吗?

0 投票
1 回答
116 浏览

c - softirq——它在网络堆栈中能持续多久?

我一直在研究interruptsLinux,softirq特别是(我对内核的网络子系统感兴趣)。我理解上半部分和下半部分的概念,但我不清楚的是——softirq上下文持续多远?直到我们处理内核堆栈中的哪一点softirq?例如,当入口路径命中时ip_rcv(),我们是否仍处于软中断模式?

0 投票
0 回答
223 浏览

linux-kernel - hardirq 和 softirq 在同一个核心/处理器上运行?

假设我正确设置了 RSS 和中断关联。

Linux内核是否保证asoftirq在触发硬件中断处理程序的同一CPU /内核上执行?我知道中断处理程序会安排softirq执行,实际执行可能会在以后发生。

0 投票
2 回答
1572 浏览

interrupt - RISC-V - 软件中断

我正在尝试为我的 RV32I 内核实现一个简单的中断控制器。我相信我了解在 RISC-V 中应该如何处理中断,以及 CSR 寄存器在该过程中的作用。

RISC-V 定义了三种中断源:外部、软件和定时器。我了解计时器和外部中断是如何产生的。但是,我不明白如何或什么会产生软件中断。指令?一系列指令?也许实现定义的标志?我不知道。

任何人都可以举一个例子和软件中断的解释,最好是相关的汇编代码,如果它是相关的?

提前致谢!

0 投票
1 回答
173 浏览

kernel - 有没有办法调试softirq?

我的目的 :

在特定情况下记录软中断生成的调试信息(比率,地址,否则) 。任何信息都会有所帮助。

我想一些可疑的设备驱动程序,但不知道产生了沉重的负载。

我会感谢任何推荐,例如“阅读本手册”。