OpenUOM++多处理之-最新架构

 

好久没有更新这个系列了,因为我之前也说过,前段时间实在太忙了,而且早在一个月前就预示着本月将更加忙!事实也确实如此!终于在国庆前夕完成了既定的计划,心里也终于可以长出一口气了。最近在忙什么呢?其实就是OpenUOM++!既然OpenUOM++-ng已经不在计划内,那么让OpenUOM++支持多处理就是必然要做的了。

 

       还记得下面这张图吗?我暂且叫它版本1:

 

 

 

 

 

起初,我一直以为画完这幅图就已经证明自己对OpenUOM++很精通了,后来我慢慢知道我错了,于是,我画出下面这幅图的时候,事实证明我当初的理解是多么肤浅!下面这幅图我称为版本2:

 

 

 

版本1的出现是在2012年,那说明我对原生的OpenUOM++已经有了比较深刻的理解,但是在经历了2012的后半年,2013年的整年,2014年的上半年,我一直在等待OpenUOM++的更新升级,这期间我也一直在关注硬件和网络技术的进展,OpenUOM++落后了,谁也没有提到过这一点,等到了2014年的农历年前后,我觉得我该做点什么了。就这样,出现了版本2。如果说之前的文章展示的都是设想,那么有了这副版本2之后,它就是一个实际的实现了,虽然是最简的实现。目前还有很多TODO:
1.目前每一个multi_instance只能由一个线程的multi_context处理。
当初我希望的是所有的线程都能处理所有的multi_instance,但是由于如此一来锁开销太大,只有作罢。事实上OpenUOM++的原生架构很难实现多线程扩展,因为每一个multi_instance都有一个buff,每一个context也有一个buff,每一个multi_context的所有instance共享一个buff,这些buff被复制来复制去,很难实现细粒度的锁,因为你很难定义什么是一个不可打断的事务。
2.目前的多队列TUN驱动在返回包队列分发的实现有些粗糙。
3.TUN驱动模块和OpenUOM++之间的耦合度太高,不利于分别扩展升级。
4.线程间的信号分发机制太粗糙。
5.如果OpenUOM++的某个线程从tun收到一个广播包,分发效率太低。
6.客户端无法实现多进程打开同一个虚拟网卡,而只能捆绑多个虚拟网卡。
...
以上这些都是需要慢慢完善的。我希望自己不会就此作罢,也希望和高手们进一步交流。
       在实现的过程中,遇到过无数的问题,和起初设计的时候想象的根本不一样,很多细节都没有考虑到。比如tap的ARP广播分发问题,当时我觉得随便分发到一个线程即可,后来发生了无数次的段错误,assert失败...最终发现,即使是ARP也没有什么特殊的,只要解析出ARP的内容中的sip和dip即可,将它和IP报文同样对待...
       还是那句话,如果你能画一张图把一个技术展示明白,那么你绝对掌握了这项技术,如果你画图的过程中,突然不知道怎么画了,那么这点就是你的技术盲点。不要抱怨不会用画图软件,纸笔伺候,手绘即可。手绘图更能让你的精力集中在图本身而不是画图软件怎么用,因为你用你的脑子驱使你的手,借助笔的硬度和铅,墨水等在纸上留下痕迹,你的大脑完全起100%的作用,反之你用画图软件的话,你必须通过电脑的CPU芯片,即你必须想办法告诉CPU如何展示你脑子里想象的图像,而CPU却并不如纸和笔那样做你的奴隶,反之,你要迎合它的规则...说了这么多,其实我想说的是,版本1的最初版就是我手绘的,如下图所示:

 

 

 

 

最后,不要索要代码,代码通过邮件,QQ分发是一种不正规且不优雅的传播方式,这是Linus的观点,我很认同。如果你感兴趣,你一定能找到或者写出想要的代码,或者说,你也许能帮到我。

---

浙江温州皮鞋湿,下雨进水不会胖。

 

展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处等,我在协助处这些问题的时候也记录各种问题的解决办法,希望整后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原,从解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值