问题标签 [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.
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 可能进行的改进。
非常感谢,
瓦苏杰夫
linux - 如何在 linux 中停止/禁用 IPI(进程间中断)?
我试图在执行某些应用程序时禁用来自内核的 irq 调用,我在执行我的应用程序之前调用local_irq_disable()足以禁用 IRQ 标志。是否有任何其他方法可以禁用 IRQ,请建议我。
performance - 与内核 3.4 相比,为什么内核 4.1 上的软中断服务时间增加了?
在将 linux 从内核 3.4 升级到 4.1 版本时,我们发现了性能下降问题。看来,这是因为新内核花费了更多时间来服务软中断。
我们使用生成 GTP-C 数据包(通过 UDP)的流量生成器 (IXIA) 和一个简单的应用程序进行了测试,该应用程序将接收到的数据包发回。它只是交换源 IP 地址和目标 IP 地址。我们使用 mpstat 实用程序得到以下结果:
- 内核 3.4
- 内核 4.1
测试条件:
- 流量速率:50000 fps
- 应用程序使用taskset命令绑定到CPU 1
- 所有中断(与以太网接口相关)都绑定到 CPU 0。
正如我们所见,“%soft”在 CPU 0 上显着增加:12.91% -> 52.79%。但是 NET_RX/s 减少了:62813.75 -> 56777.58。
我们还尝试使用 perf 实用程序分析 CPU 0。不幸的是,没有找到任何线索。
- 内核 3.4
- 内核 4.1
也许,有人面临类似的问题。任何意见和建议将不胜感激。
linux-kernel - 在 Linux 中暂停 kthread
正如您从上一篇文章中看到的那样,NET_TX_SOFTIRQ 软中断已向其注册了函数 net_tx_action。这意味着有一个内核线程在执行 net_tx_action。该线程偶尔会暂停并 raise_softirq_irqoff 恢复它。让我们看看 net_tx_action 做了什么,以便我们了解内核如何处理传输请求。
写kthread
的时候偶尔会停顿。当 akthread
暂停时,为什么?
kthread 如何知道要执行的工作?它会轮询队列吗?
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 是否安全?
network-programming - rps过程使用带有local_irq_disable的spinlock的原因
这些天,我正在研究内核内部网络代码,尤其是RPS代码。你知道,有很多关于它的功能。但我主要关注一些关于SMP 队列处理的功能,例如enqueue_to_backlog
和process_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_queue
到process_queue
core(B) 并自行删除 napi 时间表。我知道spin_lock
应该保留以防止两个核心在处理队列期间相互访问同一个队列。
但我不明白为什么spin_lock
用local_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_lock
with的原因local_irq_disable
吗?
c - softirq——它在网络堆栈中能持续多久?
我一直在研究interrupts
Linux,softirq
特别是(我对内核的网络子系统感兴趣)。我理解上半部分和下半部分的概念,但我不清楚的是——softirq
上下文持续多远?直到我们处理内核堆栈中的哪一点softirq
?例如,当入口路径命中时ip_rcv()
,我们是否仍处于软中断模式?
linux-kernel - hardirq 和 softirq 在同一个核心/处理器上运行?
假设我正确设置了 RSS 和中断关联。
Linux内核是否保证asoftirq
在触发硬件中断处理程序的同一CPU /内核上执行?我知道中断处理程序会安排softirq
执行,实际执行可能会在以后发生。
interrupt - RISC-V - 软件中断
我正在尝试为我的 RV32I 内核实现一个简单的中断控制器。我相信我了解在 RISC-V 中应该如何处理中断,以及 CSR 寄存器在该过程中的作用。
RISC-V 定义了三种中断源:外部、软件和定时器。我了解计时器和外部中断是如何产生的。但是,我不明白如何或什么会产生软件中断。指令?一系列指令?也许实现定义的标志?我不知道。
任何人都可以举一个例子和软件中断的解释,最好是相关的汇编代码,如果它是相关的?
提前致谢!
kernel - 有没有办法调试softirq?
我的目的 :
在特定情况下记录软中断生成的调试信息(比率,地址,否则) 。任何信息都会有所帮助。
我想一些可疑的设备驱动程序,但不知道产生了沉重的负载。
我会感谢任何推荐,例如“阅读本手册”。