免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1688 | 回复: 1
打印 上一主题 下一主题

[CPU及多核] SMP系统,被唤醒的进程是否一定在当前cpu上运行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-02 20:56 |只看该作者 |倒序浏览
目前发现在SMP上,网络报文处理 都在同一个 cpu A 上进行,另一个 cpu B 未参与。

我所知道的是,网络报文 在两个地方处理:
    1. 硬中断退出末尾的软中断的直接调用,处理了部分网络报文。由于多 CPU 硬件上设计为 网卡 硬中断总是触发 cpu A 来处理,所以这部分 处理总是在 cpu A 执行,这个可以理解;
    2. 在某些时刻 唤醒 softirqd 内核线程来处理 1 中未来的及处理的网络报文,那么即使 总是由 cpu A 来实施唤醒 softirqd 的操作,linux 会保证被唤醒的softirqd 仍然在 cpu A 上执行吗?即 “被唤醒的进程是否一定在当前cpu上运行?”  否则是什么原因致使 网络报文 都由 cpu A 处理的?

论坛徽章:
0
2 [报告]
发表于 2013-07-05 14:38 |只看该作者
题目写歪了,显然是不成立的
又大致分析了下网络收发包的流程,网络收发包 做到 CPU 绑定还是有可能的

前提:
    a.网络收发包 由软中断处理函数 do_softirq 中 NET_TX_SOFTIRQ 和 NET_RX_SOFTIRQ 部分负责;
    b.软中断处理函数 do_softirq 基于 __softirq_pending 位的,而 __softirq_pending 位是每 CPU 变量;
    c.__softirq_pending 位 的 set 操作在 硬中断 或者 软中断处理函数 do_softirq 中,且第一个 set 操作应该是在 硬中断 中;  
    d.ksoftirq 是 每 CPU 的;
   
基于以上前提,对于网络报文处理而言,若将 网卡硬中断 在硬件上设计为与 CPU 绑定的,则:
    1.由于 收发硬中断 在硬件上设计为 CPU 绑定的,故 由 硬中断 set 的 __softirq_pending 位 是 CPU 绑定的
    2.基于 1 ,硬中断末尾调用的 软中断处理函数 do_softirq(包括唤醒 ksoftirq)的网络收发包部分 是 CPU 绑定的
    3.基于 1 和 2,由 软中断处理函数 do_softirq(包括ksoftirq的 do_softirq) set 的 __softirq_pending 位 也是 CPU 绑定的
    4.基于 __softirq_pending 位 的软中断处理函数 do_softirq(包括ksoftirq的 do_softirq)的网络收发包部分是 CPU 绑定的
    5.网络收发包 是 CPU 绑定的
       
       
在大吞吐量时,查看 CPU0 和 CPU1 的 ksoftirq 的调度状态可以得到验证:       
# cat /proc/7/schedstat
460444000000 28146000000 14218
# cat /proc/18/schedstat
1000000 0 41       
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP