Linux SMP 优化设计:控制面+数据面
linux smp 应用极力避免的缺点:
1,频繁的调度,时钟中断造成的上下文切换
2,数据的内核用户空间拷贝
3,异常的发生,tlb缺页异常
4,进程迁移造成cache等性能波动
如何设计优化避免这些缺点呢?
1,数据面核关闭所有中断,除了mailbox中断(控制面通知数据面用)。只跑一个内核线程。 关闭时钟后并不会带来系统性的错误。但要调整rcu lock。
2,数据面核值跑在内核态线程,不用担心内存拷贝问题
3,内核中使用非映射段(mips:kseg0),其他体系结构内核对应自己的设计。可以避免tlb缺页异常。
4,线程绑定,控制面线程都cpu_allows 设为控制面的核,init,kthread线程都只和控制面核亲和。 数据面,跑一个实时线程即可。新增控制面通知数据面接口。其他修改,此处省略。
实际优化设计运行情况: 在cavium mips 多核上,成功实现设计,性能和cavium极力推荐的SE(一个循环)一样,因为并无区别。但SMP优势又很明显: 数据面核可以有效的利用现有linux内核的丰富代码,方便的核间共享数据(同一地址空间),良好的可移植性(linux代码风格,无需另搞一套)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
这段时间也在考虑这个问题(网络转发层面)。
想法是用一个CPU处理通用功能,其它CPU尽量处理软中断。目前这种架构,我觉得SMP下没有必要每个CPU要进行一大堆的调度工作。
回复 2# 独孤九贱
个人觉得九贱兄的方法不错
本人觉得看你性能考虑程度,要是转发是关键那么,我感觉就是要用SE模式
SMP过多的系统开销是满足不了性能的。
本人只用过SE的,因为真的不用考虑系统开销,关键是考虑锁,避免锁的设计能拉升多核的强劲性能。
LZ能否多阐述一下SMP下的实现呢,大家学习一下
关闭时钟中断,和其他中断后,就没有进程调度了,兄台。 也就是一直轮询,和se没两样。但可以用的代码全面,se里面没有协议栈,其他都没有,可移植性也差,se内存管理也差。
LZ 是恒杨的陈鹏?
不是。 我是吐蕃
只是发现你们搞的思路和平台惊人的相似
恒杨 是什么公司 ?
1,数据面核关闭所有中断,除了mailbox中断(控制面通知数据面用)。只跑一个内核线程。 关闭时钟后并不会带来系统性的错误。但要调整rcu lock。
对rcu_lock的调整是否会影响控制平面核的处理呢?
3,内核中使用非映射段(mips:kseg0),其他体系结构内核对应自己的设计。可以避免tlb缺页异常。
这个是针对数据平面和控制平面共享的数据而言吧!
此外,当前的这种优化方式应该也和Cavium的SE方式优化相同了。