首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软--网络堆栈的持续时间有多长?

软--网络堆栈的持续时间有多长?
EN

Stack Overflow用户
提问于 2020-10-15 21:51:14
回答 1查看 222关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-02 17:35:13

粗鲁地说,softirq上下文一直持续到软处理程序返回为止。

ip_rcv(),我们还处于软中断模式吗?

是的,我们现在的情况是温和的。我们在函数的呼叫堆栈中,它被作为NET_RX_SOFTIRQ提出。

让我们讨论一下接收路径,考虑NAPI。

____napi_schedule()会引发NET_RX_SOFTIRQ (它反过来通过访问irq_stat.__softirq_pending来修改每个CPU的数据结构)。然后,softirq处理程序将数据包向上移动到堆栈。所有这些操作都是在软上下文中进行的。因此,这里有两个不同的方向: 1)这是前向数据包,所以softirq上下文一直持续到将该数据包添加到某个输出队列并返回处理程序为止。2)这是本地输入包,所以软包一直持续到将该包添加到本地套接字接收队列(排队),然后处理程序返回。这样的事情是在网络堆栈中任何地方丢失的情况下发生的。当基本的softirq函数/处理程序终止时,它都会终止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64380158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档