最近我一直在研究一个由 NAPI 实现的 NIC 驱动程序,它使用 softirq 来处理 tx&rx 数据包,并且很多文档说当硬件中断返回时可以触发 softirq,那么我有两个问题: 运行softirq时,硬件中断存储的寄存器是否仍在内核堆栈上? 如果是 1,下面的序列会导致内 ...
最近我一直在研究一个由 NAPI 实现的 NIC 驱动程序,它使用 softirq 来处理 tx&rx 数据包,并且很多文档说当硬件中断返回时可以触发 softirq,那么我有两个问题: 运行softirq时,硬件中断存储的寄存器是否仍在内核堆栈上? 如果是 1,下面的序列会导致内 ...
我正在编写一个 kernel 模块来挂钩到 softirq_raise 的跟踪点。 我发现它可以显示在 我的处理程序如下, 我得到的是如下, 令我惊讶的是,它只显示 vec_nr = 0,没有其他软中断被引发。 但是 /proc/softirqs 确实在 CPU5 上显示了许多不同的软中断。 我的处 ...
我的目的: 在特定情况下记录软中断生成的调试信息(比率、地址、其他) 。 任何信息都会有所帮助。 我想一些可疑的设备驱动程序,但不知道产生了沉重的负载。 我会感谢任何推荐,例如“阅读本手册”。 ...
我正在尝试为我的 RV32I 内核实现一个简单的中断控制器。 我相信我理解在 RISC-V 中应该如何处理中断,以及 CSR 寄存器在这个过程中的作用。 RISC-V 定义了三种中断源:外部、软件和定时器。 我了解定时器和外部中断是如何产生的。 但是,我不明白如何或什么会产生软件中断。 指令? ...
我一直在研究 Linux 中的interrupts ,特别是softirq (我对内核的网络子系统感兴趣)。 我理解上半部分和下半部分的概念,但我不清楚的是softirq上下文持续多远? 我们处理softirq到内核堆栈中的哪一点? 例如,当入口路径命中ip_rcv() ,我们是否仍处于软中断模 ...
这些天,我正在研究内核内部网络代码 ,尤其是RPS代码。 您知道,有很多功能。 但是我专注于一些有关SMP队列处理的功能,例如enqueue_to_backlog和process_backlog 。 我想知道通过使用两个函数enqueue_to_backlog和process_back ...
此处https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/#queuing-disciplines编写为: 从上一篇文章中您将看到,NET_TX ...
我们在从内核 3.4 到 4.1 版本进行 linux 升级时发现了一个性能下降问题。 看来,是新内核花更多的时间来服务软中断造成的。 我们使用流量生成器 (IXIA) 进行了测试,该生成器生成 GTP-C 数据包(通过 UDP)和一个简单的应用程序,它将接收到的数据包发回。 它只是交换源和目标 ...
我试图在执行某些应用程序时禁用来自内核的irq调用,我在执行应用程序足以禁用IRQ标志之前调用local_irq_disable() 。 还有其他禁用IRQ的方法,建议我。 ...
我在基于MIPS(octeon)的硬件上运行Windriver Linux。 Linux运行在16个核心上,我们运行koftirqd / 0到ksoftirq / 15。 我在高传入流量(如ping泛洪)上观察到以下负载平衡行为: 首先,kostfirqd / 0占用所有负载,直到达到 ...
我在客户端运行一个简单的程序,它继续发送udp数据包到服务器。 服务器的接口是一个多队列网卡,但我将其udp4的rx-flow-hash设置为sd。 所以所有数据包都将在一个CPU中生成。 当我收到40Wpackets / s时,服务器的CPU在softirq中的成本为1%。 当我收 ...
在以下2种情况下,“ current-> pid”显示什么 1)硬IRQ上下文 2)软IRQ上下文 我知道IRQ上下文和进程上下文是不同的,并且在IRQ上下文的情况下PID必须无效。 但是,当尝试在IRQ上下文中打印“ current-> pid”时,它正在打印一 ...
我正在改进驱动程序的性能,应该考虑死锁的可能性。 在 SoftIRQ 上下文中,spin_lock 将被持有并保护一些变量。 在这种情况下,我应该使用 spin_lock 还是 spin_lock_bh? spin_lock_bh 听起来更安全,但我有一个关于 SoftIRQ 实现的一般问题。 ...
我编写的代码很少创建/删除对象(最多数千个),但经常在软IRQ上下文中对其进行修改。 这些对象也很少从任务上下文(通过procfs:每个对象文件)中读取(并且可能也很少修改)。 目前,我的代码包含每个CPU的全局数据块,每个数据块都有一个自旋锁保护。 这样的块包含用于对象存储的固定大小的哈 ...
与系统调用在int 0x80上的工作方式类似,是否可以在内核内部实现我自己的ISR,以便在softirq上假设int 0x120或与任何其他softirq程序计数器可以从用户空间跳转到内核空间 ? 是在特权模式下进入内核仅与int 0x80关联,还是与任何softirq实现相关联,我可以自 ...
是否可以将softirq或任何其他下半部分固定到处理器上。 我怀疑这可以在softirq代码中完成。 但是在驱动程序内部可以将特定的IRQ固定到核心。 ...
在tasklet_action例程中-处理来自tasklet_vec列表的条目时 核心,我们在原子上读取atomic_read(&t-> count),我看不到 在日常工作中有任何用途,其意义何在? ...
在用于ARM平台的Linux内核实现中,将tasklet中的延迟工作添加到percpu vec | vec_hi列表中。 现在,从ISR执行返回时,它可以解决softirq和tasklet中的延迟工作。 现在,可以在启用了IRQ的中断上下文中处理延迟的工作,或者有ksoftir ...
最近,我研究了Robert Love的Linux-Kernel-Development。 有一段描述了softirq的机制。 softirq处理程序在启用中断的情况下运行,无法休眠。 在处理程序运行时,当前处理器上的softirq被禁用。 但是,另一个处理器可以执行其他softi ...
有两个C ++进程,每个进程一个线程。 该线程处理来自32个传入TCP连接的网络流量(直径),进行解析并通过32个传出TCP连接转发拆分消息。 我们将此C ++进程称为DiameterFE。 如果仅运行一个DiameterFE进程,则它可以每秒处理7万条消息。 如果两个Diamete ...