taoqian's profiledifferent life, differen...PhotosBlogListsMore ![]() | Help |
|
February 22 Embedded OS应该开源以前搞linux的时候,觉得没有厂商维护,不同版本的kernel以及不同风格的code/Makefile风格,常把人弄得没脾气。假如保持核心代码不怎么变的情况下,其实只要费一次力气,基本上以后就不用在这上面花力气了。
当时想,如果有了Vxworks该多好啊。
不过如今有了Vxworks,又开始怀恋开源了:因为一些BSP 问题如果手上没有OS的原代码还真是搞不定。Vxworks的code是另外要收昂贵的费用的。
我觉得象nucleus /uCOS这种比较好,开放代码,另外收费,代码由一个商业组织Maitain. February 21 一些数据结构牛人周末的时候认识了一个兄弟:中专毕业,从台资工厂的技术员,一路走下来,坚持下来,在电源行业做了十多年,现在做电源厂里做研发主管。
非常佩服,跟他聊天的时候,旁边一位兄弟评价说:现在很多重点大学本科生根本没有这样的意志力,能够把一门技术做透,吃不了苦。
福兮祸兮? February 19 一位仁兄的秘笈一位仁兄,游刃职场多年,深得领导喜欢,今日对我谆谆教诲,有如下秘笈:
一.有困难一定要说,最好能闹到总管知道。这里的有困难包括自己不知道的,自己不确定的.动脑筋的时让领导做,我们一切按领导安排。倒是做不出来是领导的责任,他领导失误,我没什么责任。
二.上午绝对不干活,除非领导在后面监督。上午脑筋好,是学习的好时机。 当然,工作文档也要开几个,掩人耳目。 下午开始干活,当然,由于脑筋没有上午灵光,有很多事情分析不出来,那么这个事情就又落到领导头上了。有时候下午是干体力活,不停地试验版本,那就更不用动脑筋了.
三.学习,报告,总结等会议绝不安排到晚上.我发现现在领导总是把培训等事情安排到晚上.好像这些事情不是工作范围内地事情一样。 其实培训也是工作地一部分,没有任何理由安排在晚上,晚上就是加班性质。
四.帮助别人地时候,超过10分钟处理时间,就说不行了,我搞不定.其实也许搞半小时才能搞出来. 因为自己也是有任务在身.不可能把大量时间放在别人地工作上,到时可能影响到自己任务地完成.
五.小事情上面多为别人着想,比如搬凳子,拿笔等.尽量不给其他人找麻烦(其他人地范围只包括普通同事,不包括领导,领导一定要麻烦,而且麻烦地越多越好).多麻烦领导地另一个好处会让领导认为你工作积极主动.我相信我们的领导都是技术出生,在很多问题上也许一句话就能摆平你的问题.
最后总结一句:真正的高手不在于自己能干什么,而在于能驱使别人干什么.
我工作以来所以的棘手问题,大约60%是领导解决的,30%是靠周围同事搞定的,10%是我自己经验所到,水到渠成(我也不是不学无术的).
这些方法我对那些刚毕业的都讲过,不过没有几个人听得进去.他们刚毕业,总觉得自己很拽,什么都能搞定,其实什么都搞不定.然后在领导面前的表项自然就很差。
一种博弈:你输我也输,你赢我也赢印度来的工程师问我:你们中国的工程师为什么不买Car?
我回答说:薪水低,大城市生活费高。
我问他:你上家公司待了多久?
他回答说:5年(这么说来,他在数据通信行业就有6年经验了,在中国这种人才是很抢手的)。
我说:这样很好,但是中国很多软件技术人员在一家公司待一两年就走。
印度工程师说:恩,这样不好。
我反问到:你们如果对公司或者管理层有意见怎么表达?
他回答道:公司会经常举行Meeting,问他们对公司有什么意见。
低廉的工资,虐待员工式的管理,然后是员工频繁的跳槽。在这场博弈当中,没有一个赢家:员工的职业生涯损害了,技术得不道积累;公司的产品质量低下,在一个低层次上发展,另外公司也招聘不到有经验的员工,公司工作效率低下。
并不是把员工压榨的越厉害,公司就越成功,最好是保持一个平衡,譬如工会等。
仅仅是Low cost并不能意味着成功,没有合理的平衡和生态,那就是Low quality了。
February 16 一个软件研发部门需要这些人或者部门。如果仅仅是开发一个简单的东西,当然不要那么复杂的配置了。但是若对一个大项目,部门配置齐全,各负其则还是蛮重要的。
1:系统架构部。区别于一般的Driver/Protocol/AP而言的,它负责系统的规划,各个小组在技术上的协调,另外对platform的跟踪深入。
2:质量保证部:假如我们要购买SDK,他们应该确保这个SDK的可用性,移植的难度....在研发过程中,他们要确保代码质量和test plan,监督研发人员,控制风险.
3:Development Configure Engineer:譬如对版本控制,Makefile书写,实验室环境,文档控制....
4:针对项目的培训师:不能因为忙而忘记了培训,培训其实是会节约时间的。
现在的研发项目已经成为耗资巨大,风险巨大的生意,象小作坊一样运作,指望少数精英员工完成项目已经不可能。
有了一个好的部门和人员配置,才有可能顺利的完成项目。 从Diag看流程当初替Alcatel写Diag的时候,很惊异的得知他们居然有一个team专门负责Diag,我当时想,这么一个简单的东西需要一个team来做么。现在我发现自己错了。
Diag主要是两个用途,第一是在生产过程中的检测程序,第二个,很多人都忽视了,就是在硬件刚研发出来的时候帮助他们解决问题(虚焊等)。
在Diag中,直连CPU的设备譬如说,I2C,DRAM.....这些程序都比较独立,容易编写一些,难点在于与MAC相关的。
写Diag的人必须这样设计程序结构:循序渐进的发现问题,譬如对MAC而言,要从PCI配置,DMA,外接TCAM,外接QDR,RLDRAM,外接PHY入手,假如有问题的话,报告出来,让人很明白问题所在。
可是实际中,公司为了“节省”人力,在Diag这块投入很少,就用MAC Driver中的初始化程序来做。这样实际很难Locate问题,譬如PCI总线虚焊,程序很难直接发现。TCAM虚焊,程序也很难直接发现,这就浪费了时间。
写Diag的人必须从硬件那里获得这样的信息:那些硬件容易出问题,另外他对MAC Driver的结构应该很清楚,而且能够把这些Driver分解,分成一个个step来locate问题。PCI配置--->挂中断---->DMA--->MemBist--->TX/RX packet.
这样如果某一步发生了问题,无论是研发人员还是生产人员就能够很快的发现问题所在。
随着MAC外接器件越来越多,写Diag的要求也越来越高。
可惜,一般的公司不会在这一方面投入多少的。 February 10 假如很多task都处在ready状态这应该是一个高优先级的task死循环,导致其他的 ready task无法执行。
当在ISR中give一个smaphore的时候,这时候scheduler会将那个take semaphore的task置为ready,然后从几个ready的task中选择优先级最高的执行.
会不会出现所有的task都pending呢?
当然会,这时候实际上在scheduer中loop。
当一个task take semaphore得不到得时候,它将自己置为pending,然后call scheduler,scheduler如果发现没有谁ready,就loop了。scheduer不是一个task,它存在于某个task context中,只是一段程序。 RX/TX流程工作上压力大,今夜失眠
RX比TX复杂,一般为了避免copy,一般来说存在一个三元组
mref |-> mbuf
|mbuf_ptr-- |Data_ptr
|PDU -- | |free_func
| | | |mref=2 Data
|__ |_______________> |
| |
mref | |
|mbuf_ptr--| |
|PDU _____________________>
|
Data存放实际的包,mref的PDU指向Data的某一个地址,或者ethernet起始,或者IP包起始。
mbuf中Data_ptr指向Data,mref表示有多少mref引用了这个Data,当mref减为0的时候,就调用free_func来释放Data.
在Vxworks也存在这样的一个三元组:mblk--mcluster--cluster,完全一样。
在我们以前的平台上,ACP3+BCM,在协议栈/L2与Bcm SDK之前有一个中间层,RX时用的buffer由这个中间层来维持,也就是说,提供了一对alloc/free函数,且把这对函数注册到Bcm的driver,RX时的DMA buffer也由这个alloc函数分配。当Bcm收包的时候,就会将这个buffer传到我们上面所说的中间层。这个中间层对buffer包装成一个三元组,并将mbuf的free_func指向上面所说的那个free函数。再将这个三元组继续往上传到协议栈/L2,最后当所有的消费者消费完之后,整个三元组才被释放。
而在ZebOS+Bcm中,Bcm的driver自己维持了一个内存buffer用来RX,hsl中再有Vxworks的三元组。
hsl_rx_cb(called by BCM RX driver):
copy pkt from BCM RX buffer to Vxworks三元组;
通知协议栈/L2来了一个包要处理;(异步处理)
调用Bcmrx_free来释放这个BCM RX buffer。
这里面存在一个copy,因为我们要使用Vxworks的三元组,假如我们构造自己的三元组管理程序,将mbuf的free_func指向Bcmrx_free,就可以不copy了。
这些取决于系统构架,当我们使用自己的中间层的时候,我们当然可以构造自己Buffer Pool,构造的自己的malloc/free函数,自己的三元组,从而避免copy,而且有更大的控制。
当使用Zebos的hsl作为中间层的时候,只好使用它提供的Vxworks三元组了。
而在ZebOS+GF的构架中,跟ZebOS+Bcm一样,不得不copy,因为GF不提供free函数的注册机制,而且还不能改造成zero-copy.
至于TX,在ACP3+BCM中,一个上层协议想发包,它就申请一个三元组,将buf连到DMA上,启动DMA,然后马上返回.在ISR中会call free_func最终释放这个buf.这是异步的。
在ZebOS+BCM中,是同步的。
一个上层协议想发包,它就分配,将buf连到DMA上,启动DMA,take semphore.在ISR中会give semphore.上层程序得到semphore之后才会释放buffer.
ZebOS+GF更烂,也是异步的,而且还有copy.这跟GF driver设计的比较烂有关系。
其实ACPV3的设计还是不错的,至少那帮人对BCM很熟悉。而我们呢?
February 06 两则新闻第一条是Broadcom以8000万美元收购Sandburst,Sandburst主要是做Metro Ethernet switch chip的。
第二条是Accton跟Sandburst联手推出ES4826,定位于Metro ethernet access.(Accton是Sandburst的一个股东)
从中可以得出:
1:Broadcom要在这个行业通吃了,可能会挤压其他小的swtich chip designer.
2:Accton以后跟Broadcom关系会更加紧密
3:Accton不会放弃Metro ethernet,只会加强力量,虽然它可能会改变供应商。
现在我们来看看Accton和Sandburst推出的这个ES4826的功能:
它支持vlan stacking(QinQ),MPLS/VPLS/HVPLS.Routing resources can be partitioned on up to hundreds of VRFs and multiple tenant locations can be shared per physical interface,each with explicity tailored SLAs.
16K queues to support multiple queues per customer.
......
看来跟greenfield的方案差不多。
February 04 买了几本书曾国藩家书和呻吟录 大学中庸
这几本书不错,曾国藩家书主要是探讨了如何勤俭/读书/人情/持家/修身养性.呻吟录以语录的形式说了类似的问题.
四书五经中的大学中庸是儒家探讨人为人处事的原则,如何保持人的内在和谐.
不过我觉得大学中庸是原则,第一对普通人而言,太高,第二没有讲如何实施.
以前觉得儒家的东西有些虚伪,特别是宋明以来,失掉了南北朝,隋唐的铿锵雄健之气,多了猥琐保身之术.儒家的道德是虚假的.
但是近来发现:中庸在现实中还是非常有必要的,剑走偏锋在人情关系这么复杂的中国还是行不通的.另外大学探讨了人的本原,这样人的内心才能达到和谐,儒家所有的道德都是为了人的内心达到和谐.
看了曾国藩家书,知道曾国藩这种牛人也觉得自己恒心不够,不够激扬,平常非常节俭,对自己的弟子也是爱护有加.人都是普通的,贪婪虚荣懒惰都是人的本性,但是如果经常反省,向君子之路迈进的话,人性还是可以日渐完臻的.
大学中庸是一个目标,原则,提纲挈领的东西,缺少人情和人性的弱点.读些牛人君子的通信录或者笔记一样的东西,可以感受到通过反省克服人性弱点的精进之路.
February 03 春节回家春节回家看望了姥姥,看她的时候她正在弥留之际,第三天她就过世了。姥姥活了89岁,生平遭受很多灾难痛苦,中年丧夫,老年丧子(唯一的儿子和唯一的孙子),不过她的心态很好,从不见她发什么牢骚,总是笑呵呵的。也许正是这么多灾难让她的心态不得不好起来,否则怎么会这么长寿?想想她,生活中那些所谓的痛苦不过是小事情了,不必长吁短叹。
人的一生有意义么?
我真的无法看透生死.
|
|
|