陈怀临时间–浅谈网络服务处理器(NSP)
作者 陈怀临 | 2008-12-22 12:12 | 类型 中国系统软件, 弯曲推荐 | 6条用户评论 »
【相关文章】: | |
网络设备操作系统(Linux .vs. vxWorks)
作者 黄 岩 | 2008-12-21 15:16 | 类型 行业动感, 通讯产品 | 9条用户评论 »
网络设备操作系统(Linux .vs. vxWorks) 2001年IBM大张旗鼓的宣布支持Linux,并投入10亿美金用于Linux相关开发。 最近的Cisco抛弃了其专有的IOS核心,在 ASR1000的控制平面软件上采用了Linux为基础平台。据传Huawei、H3C等厂商的软件平台也纷纷转向以Linux为基础,而以前他们都采用vxWorks作为基础。几年前,就连vxWorks的开发者风河公司也宣布同时支持vxWorks和Linux。由此看来,Linux在网络设备领域取代vxWorks几乎已成定局。这背后的原因究竟是什么?与vxWorks相比,Linux究竟有那些优势? 在我看来,IBM支持Linux,是为了借Linux来挽救其规模庞大的服务器产品线,借助Linux拓展其软件服务市场。(注1) 而网络设备上用Linux,并不在于Linux的技术有多先进,而是Linux所代表的产业链的发展速度超过了vxWorks,用Linux会使软件开发成本更低。 Linux和vxWorks在技术上的主要差异在于:A、Linux的核心和用户进程之间是的地址空间隔离的,每个用户进程之间的地址空间是隔离的,当某一个用户进程崩溃的时候,不会影响操作系统核心和其他用户进程正常运行。B、Linux支持页面级的内存管理,支持换页。C、由于隔离的原因,使得Linux软件的各部分之间耦合性更小,Linux的应用程序跟核心之间有清晰的界面,POSIX API。总而言之,Linux充分利用了现代微处理器的MMU硬件,而vxWorks则采用平面地址空间(注2)。在某些高端设备上Linux的保护模式的确可以让系统更稳定,至少更容易找Bug。这个特点也是也是长期依赖Juniper赖以攻击Cisco IOS的主要论据,因为Juniper的JunOS是基于freebsd的,也具有同样的特点,而Cisco的IOS核心与vxWorks类似(注3)。 Linux除了具有上述技术优势之外,其实也还有很多缺点,如:(a)Linux的网络协议栈是针对主机优化的,对于低端路由器这类设备,运行效率不高。(b) Linux的软件镜像较大,占用flash和内存空间大,对甚低端设备来说,成本高。(c)就总体运行效率而言,Linux比vxWorks差,Linux系统调用开销大,Linux的动态连接库调用的开销也大,在某些硬件上Linux的进程间切换的开销也大等等。 我认为,Linux相对于vxWorks的技术优势是微不足道的。导致网络设备厂商转向Linux的主要原因是Linux代表产业链越来越成熟,用Linux的开发成本将远低于vxWorks。主要表现在:(a)支持Linux的软件越来越越多,而支持vxWorks的软件越来越少,Linux下面有很多开源软件,而这些开源软件多半不支持vxWorks。现在用于网络设备的商业软件几乎都支持Linux,如:Gated、Zebos、Trillium、InterPeek的协议栈等。(b)几乎所有的芯片都提供Linux驱动程序,几乎所有的CPU、评估板都提供Linux支持。(c)熟悉Linux的开发人员更好找。与Linux相比,vxWorks则越来越显得曲高和寡,其生存环境也越来越差。 对于网络设备来说,选择哪种操作系统软件并不是决定成败的关键因素,操作系统只提供了一些如任务调度、任务间通信、中断管理、内存管理等基本功能。在一个路由器中,操作系统软件占总代码量的5-20%,而且无论选择那种操作系统,这部分代码都是相对稳定的,不需要作太多修改和维护。但是如果操作系统选择不当,却可能增加很多开发成本。例如:如果你选择的CPU不被vxWorks支持,那么就必须自己开发其CPU支持代码和BSP(注4)。如果某个以太网芯片没有vxWorks的驱动程序,那么你也不得不开发vxWorks的驱动程序。最让人无法忍受的事情是,现在用过vxWorks的人越来越少,会Linux编程的人越来越多,并且很多人非常熟练。 如果说IBM选择Linux还带有一定的冒险成分的话,那么现在Cisco、H3C、Huawei等选择Linux,更多是无奈之举。 ------- 注1: 当时的Linux已经在互联网行业得到了广泛应用,像FTP、Web这类服务器程序在Linux上运行已经没有任何问题,并且有Sybyse、Oracle、Infomix等一批商业数据库有Linux版本。有一大批刚刚从学校毕业不久的年轻技术人员熟悉Linux,Linux各种技术资料在互联网随处可得,讨论Linux论坛网站也层出不穷,Linux在服务器市场的份额快速增长。虽然IBM的AIX在技术上暂时领先(这一点也许有人不同意,但我认为在2001年左右的时候,Linux在技术上还远远赶不上AIX、Solaris等商业Unix。也许这个问题可以专门作为一个话题展开讨论。),并且有良好的商业化支持,而且在金融等传统企业市场占有率暂时领先与Linux,但是其活力和前景却远远落后于Linux。对IBM来说,AIX软件销售并不是其主要收入来源,IBM主要业务是软件服务、服务器硬件的研发和销售。在这种情况下,IBM押宝Linux,不失为明智的选择。当大批信仰Linux的年轻技术人员逐渐掌握了决策权的时候,他们会在采购中更倾向Linux,这是他们会发现,这些产品中很多都是IBM的。 注2:这样说不完全准确,vxWorks在6.x版本中也提供了保护模式的支持,但这个不是vxWorks主要的特性,vxWorks下的大部分应用程序还没有用到这个特性。 注3:可能是基于某个QNX特殊版本的。 注4:有时候甚至这个工作是完全不可行的,某些CPU是跟Linux绑定了的,没有提供完整的寄存器文档。 | |
著名院校介绍–上海交通大学
作者 陈怀临 | 2008-12-21 15:15 | 类型 科学与中国, 著名大学 | Comments Off
NP的C语言编译器
作者 黄 岩 | 2008-12-20 10:14 | 类型 专题分析 | 3条用户评论 »
下面我来尝试探讨softmaster提出问题: 第一个问题,为何没有见到用C语言编写NP代码的? 我认为现在NP的C语言编译器还不成熟,还不能实用。相对于汇编语言来说,高级语言的主要优点是:(a)编程效率高,开发生产率高;(b)代码可移植。缺点是:运行效率低。对于NP来说,C语言编译器的优点并不明显,缺点却特别突出。 先说编程效率。NP上面运行的代码量并不大,典型NP的代码空间是几K到几十K条指令,也就是一个产品的NP代码不会特别多。一般高端路由器产品,NP代码总量也不过几百K条指令,这个规模的程序,用汇编语言也可以完成,障碍不大。 插一点题外话。NP开发的难度不是由于代码量大,而在于对人员的知识和能力要求高。例如,NP的开发人员需即要能够深入理解NP的硬件结构,要熟练掌握汇编语言开发,还要理解网络协议报文的处理流程(例如要掌握MPLS的工作原理),而且还有懂一点硬件知识(至少要会用示波器)。这样的人不太好找。这一点与很多其他程序开发不同。 再谈可移植性。NP程序几乎天生不具有可移植性,即便用高级语言也不能移植。由于目前各个厂商之间的NP的结构几乎完全不同(试比较IXP2xxx、X11、EZChip NP2/3),NP程序又是跟芯片紧密耦合在一起的,因为必须利用芯片提供的各种硬件资源(如查表、HASH、mem IO等)才能够提高效率。甚至一个同一个厂商的不同型号的NP之间,程序的可移植性都很差。 最后说运行效率。NP程序的运行主要是由报文触发的,收到了报文才运行。虽然NP的代码空间有几K到几十K指令,但并不是说对于每个报文,都能够用几十K代码去处理。一般来说,NP只允许对每个报文运行几十到几百条指令,超过这个数量,就无法达到“线速处理”这个硬指标了。例如:某型号NP有8个微引擎,核心运行速度是600M,并且每周期运行一条指令,又假设该NP有一个2.5G POS接口,全是最小报文的测试情况下,报文流入NP的速度大约是8M pps(packet per second),那么对于一个报文来说,允许每个微引擎的运行的处理指令最多是:600M / 8M,大约为70几条,8个微引擎加起来,在指令分配非常均衡的情况下,最多600条指令。以上都是按照理想情况考虑的,如果再去掉跳转、IO等待、ME之间处理能力分配不均衡等因素,那么实际对每个报文允许的处理指令可能也就是300条左右。在要求的线速处理路径上,如何用这300条指令来完成所有的业务处理,是需要仔细计算的。几乎不能容忍高级语言编译器再浪费一些指令。 由此可见,也许在未来的很长一段时间内,我们还要用汇编语言来编NP程序。 下面把第二个问题和第三个问题合并到一起分析。NP的的编译器的确还不成熟,但是主要不是因为“多线程”。 对多数硬件支持的多线程芯片(CPU、NPU)来说,是由几套寄存器上下文共享一个ALU处理逻辑,在软件看来,就像是芯片里面有几个硬的“核”一样,没什么大分别。因此“多线程”也不会显著增加编译器的设计难度。 下面尝试分析一下多线程和大规模多核两种不同的NP设计思路。 芯片支持的多线程和多核的目标都是:充分利用硅片面积来提高单芯片的处理性能。但是方法不同。 多线程的依据是:现在CPU/NPU的核心速度很快,但是DRAM的访问速度很慢(注1),因此很多时候,快速运行的CPU/NPU核心不得不等待内存访问完成,浪费了大量的处理能力。解决办法是,为一套运算部件多配几套寄存器,每套寄存器都保存一个线程上下文,当一个线程访问外部内存不得不等待的时候,就运行另外一个线程。这样运算部件的利用提高了。一般来说,多线程CPU/NPU的的每个核都比较复杂,运行频率也比较高,如果频率低于内存访问时间,多线程就没有多大意思了。 对多线程来说,虽然运算部件的利用率较高,但是每套寄存器都会占用一定的面积,而且同时只能有一套寄存器处于运行状态,另外几套都是处在等待状态,还是有浪费。大规模多核NPU/CPU(注2)的设计者思路就不同,他们在芯片里面造很多个简单的核,每个核的频率都不高,占用面积也比较小,每个时刻每个核都在运行,争取让每个晶体管都工作起来。大规模多核芯片会尽可能用比较简单的、低成本的方法把这些核组织起来。NP的报文驱动的应用模式,恰好为组织这些核提供了方便,Xelerated和EZchip都巧妙的利用了这一点。 多线程和大规模多核那种设计方法更好,现在似乎还没有绝对公认的结论。但我估计,未来在NP领域大规模多核会越来越多。 (结束) 注1: 虽然现在DDR3看起来速度已经达到了上GHz的级别,但是这是假象,只有访问连续的地址单元才能够达到这个速度。如果访问的地址单元不连续,则DRAM的瓶颈在于其tRC这个参数,一般只有几十纳秒。 | |
ILP .vs. TLP
作者 黄 岩 | 2008-12-20 10:13 | 类型 专题分析 | 1条用户评论 »
陈怀临先生的讲课录音对ILP、TLP这些概念讲解的非常清晰透彻,不再赘述。 我们的目的是“格物以至知”,下面我也斗胆格一格ILP和TLP这两种不同的技术选择。 前几年,CPU设计领域主流的技术选择是ILP,这几年,似乎TLP突然变得流行起来了,各种多核、多线程设计层出不穷。这是为什么? 一般来说,所有新的CPU(包括NP)设计的都有一个共同的目标:追求高性价比。对CPU来说,在单位硅片面积上,单位时间内运行指令数量的多少,基本代表了它的性价比。 在同样的制造工艺(注1)下,一个芯片的成本基本是由其硅片面积决定的。硅片面积越大,一个晶圆上的能够容纳的芯片就越少。更要命的是,芯片面积越大,成品率越低。 一个CPU在一秒钟内运行的有效指令数量(或者反过来说,每个指令的时钟周期CPI),也基本基本代表了芯片的性能。这个比较容易理解,不再解释。 随着芯片制造工艺的不断提高,同样的硅片面积上,能够制造的晶体管(MOS管)数量越来越多,那么现在CPU设计者就有两种选择了:1、尽量减小CPU的硅片面积,以期降低芯片成本;2、尽量利用这些多出来晶体管来提高芯片的性能。实际上,主流的CPU厂商会选择第2种策略,提高性能,而不是降低成本。为什么呢?因为现在PC机的功能越来越多,软件越来越复杂,游戏也越来越好玩,这些都需要更高的性能。消费者需要更高性能的PC,而不是更低成本的PC。当然厂商也乐于引导消费者购买更高性能的计算机,因为这样可以维持产品的利润率。如果现在每台PC的价格是10元钱,那么估计Intel、AMD甚至包括micrisoft等,都要倒闭。 那么如何提高性能呢?也就是如何利用这些多出来的晶体管运行更多指令呢?。有两种做法,ILP、TLP。 ILP的做法就是芯片只支持一个线程(注2),让一个线程的指令运行的速度尽量的快,在1秒钟内为这个线程运行更多指令。怎么做呢?最简单的办法就是提高时钟频率,流水线的目的就是提高时钟频率(注3)。很多时候,一条指令要占用很多个时钟周期。比如cache mis的时候,当跳转的时候,要刷新流水线,当流水线里面两条指令同时要访问外部RAM的时候,当流水线里面的后一条指令依赖前一条指令的结果的时候,都必须用更多的周期来运行一条指令。解决这些问题的办法是:加长流水线、增加cache、分支预测、寄存器重命名、乱序执行等等。以及尽量用简单的指令格式(RISC)。还有一个办法,看能不能在一个周期内运行多条指令,因为在芯片里面本来就有很多不同的逻辑和运算单元,看能不能让他们同时工作起来,解决这个问题方法就是超标量(SuperScalar),国内资料一般把这个词翻译成超标量。所有这些办法,都需要更多的控制逻辑,换句话说,需要更多的晶体管。 上述那些方法中,最常用也是最有效的方法,是提高时钟速率。但是到3-4年前,提高时钟速率的办法变得越来越不可行了,为什么呢?因为提高时钟速率带来了一个极大的副作用,就是同时也提高了芯片的功耗。当时钟速率提高到2GHz以上的时候,CPU的功耗也增加到了100w以上,一般来说,芯片的正常工作温度是有一个上限的(很多芯片的最大结温在120-150之间),超过这个温度,芯片就不能正常工作了。如果温度再高,主板上的焊锡都会融化(187°C)。总之,由于功耗的原因,频率不能再增加了。为什么频率增加功耗就会增加呢?因为CMOS工艺芯片的功耗主要是由于开关状态切换造成的,静态漏电流很小,可以忽略不计。也就是说,功耗跟频率是线性关系,成正比。 既然通过提高频率的办法不可行了,那么怎么办呢?就是TLP,线程级并行。让一个芯片里面有很多个CPU(多核),或者像是有很多个CPU一样(多线程)。每个线程都可以运行一个独立的指令流,不同线程之间的指令相互无关,不需要相互等待。在同一个时刻,有很多的个线程指令同时流入芯片,虽然对每个线程来说,指令的执行速度都不高,但是多个线程加起来,芯片在1秒钟内执行的指令数量并不少。这个就是TLP的出发点。TLP有两种不同的思路,多核,多线程,我再另外一片评论里面解释了这两种方法的差别。 相对于ILP,TLP似乎更好。其实不尽然,TLP并不是对所有的应用都能够起到加速的作用,很多应用不是多线程的,是单线程的。对这类应用,那么尽管Intel的CPU里面有多个核,其处理能力也不能完全被利用到。无论你的计算任务现在多么忙,可能都只有一个核正在运行。双核的机器上,你看CPU利用率的时候,都只有50%。也就是说,TLP需要应用支持,ILP则不需要。因此设计的首选是ILP,只有当ILP山穷水尽的时候,才考虑TLP。 ————– 注1:我经常听说的,0.25微米=>0.18微米=>0.13微米=>90纳米=>65纳米=>45纳米,这个就是制造工艺的进步。 注2:线程就是一个指令流的单位,简单的判断办法是,一个机器里面保存了几个PC(指令计数器)值,这个就有几个线程正在运行。一个芯片里面保存了几个PC值,这个芯片就支持几个线程。 注3:在芯片内部,基本的单位是晶体管,现在多数数字电路都采用CMOS工艺,也就是有NMOS和PMOS共同构成了一些基本逻辑单元,总的说来,基本逻辑单元可以分为两类:组合逻辑,触发器。组合逻辑是由AND、OR、NOR等基本逻辑电路构成的,可以执行算数运算和逻辑运算功能,触发器可以保存状态,也是构成寄存器的基础。一般来说,组合逻辑的运算速度是有一个上限的,为什么呢?电信号在半导体硅片上传输速度是有限的,这个速度叫做传输延迟,在一定的工艺下面,每个逻辑门的传输延迟是确定的,假设某工艺下一个逻辑门的传输延迟是1ns,那么对那些只经过一个逻辑门就可以得出结果逻辑预算,他们最大运行速度是就是1Ghz。很多算数运算(特别是浮点运算)要经过很多个逻辑门才能够得出结果,也就是延迟时间很长,这就限制了一个芯片的最高运行时钟速率。但我们希望时钟速率越高越好,怎么办呢?就用流水线来解决,在一个算数和逻辑运算部件的中间安插很多个触发器,用来保存中间结果。每个时钟周期只作一个完整逻辑和算数运算的一部分,中间结果保存在中间的触发器中,下一个时钟周期再运行一部分。时钟速率就可以提高,而且从外部来看,每个时钟周期流入这个预算部件的运算任务也是一个。用更多的晶体管提高了运算部件的时钟速率。 | |
著名院校介绍–山东大学
作者 陈怀临 | 2008-12-20 10:12 | 类型 科学与中国, 著名大学 | Comments Off
十七名中国科学家当选今年的IEEE院士(IEEE Fellow)
作者 杰夫 | 2008-12-19 17:10 | 类型 行业动感 | 3条用户评论 »
理性的商业竞争
作者 黄 岩 | 2008-12-19 11:38 | 类型 行业动感 | 6条用户评论 »
笼统的说Cisco和BRCM是竞争关系,的确不准确。 其实我想表达的意思是:Cisco的交换机芯片研发团队跟BRCM的交换芯片研发团队之间是竞争关系。 Linksys的确用了Broadcom的很多芯片,可能Cisco的路由器也用了Sibyte的CPU,也许还有其他芯片。在这方面BRCM和Cisco是合作关系,但是再交换芯片的研发业务上,BRCM和Cisco是合作关系。从这方面我们也可以看出,国外的大企业之间之间的关系比较成熟,有竞争也有合作,在某些领域是竞争关系,在另外一些领域则是合作关系。 我们再来检视一下中兴和华为之间(注1)的关系,似乎只有竞争,没有合作。 一般来说,在通信标准化领域,各企业之间的应该是以合作为主的,大家的目标是:共同制定一个都能够接受的通信标准,共同把市场做大。在这种场合,即便有竞争,也是以理服人。但是从我参加CCSA会议的情况看,中兴和华为之间更像是你死我活的阶级斗争,而不是理性的商业竞争。华为和中兴的人在CCSA会议上的争论,经常演变演变为对于对方智力水平的评论,甚至对于对方人格的质疑。 在我看来,同一个领域的各个商业企业之间的竞争,应该更像是两只足球队之间的竞争。而不应该是两个国家之间的战争。 但是从现在的国内数据通信这个行业的情况看,似乎更类似于不同国家之间的战争。完全是你死我活,没有妥协的余地,没有合作的可能。既然是战争,就是不择手段的,包括:低价倾销、控告前员工违反竞业禁止协议、控告前员工侵犯商业秘密(注2)等等,无所不用其及。 比较典型的例子是华为和港湾之间的残酷战争,华为跟沪科之间的斗争。 在此我们代表普通百姓呼吁一下,企业之间的竞争,其终极目的是服务社会,用更有效率的方式为大家提供更优秀的产品和服务,为让我们大家的生活变得越来越好。 知止而后能定,我们优秀企业的领导人,在百忙之余,应该仔细思考一下,你们究竟在追求什么?你们的终极目标是什么? 注1:华为和中兴是国内通信企业的代表,其他企业差不多。 注2:侵犯商业秘密是罪,是属于刑法范畴,是要做牢的。如果势力强大的商业组织想要恶意利用法律漏洞来打击某个个人的话,我们不得不承认,在中国现在的法律环境下,是很容易得逞的,程序正义和实体正义是很难统一的。 | |
简评brocade收购foundry networks
作者 黄 岩 | 2008-12-19 11:38 | 类型 行业动感 | 2条用户评论 »
陈怀临先生的的讲课录音对这次收购事件的来龙去脉讲得非常清楚了,不再赘述。 从一个技术人员的观点来看,我认为这次收购事件反映两个趋势:(1)IP存储的市场份额会越来越大,传统的FC份额会越来越小;(2)交换机产品的同质性越来越明显,未来的竞争会更加激烈; 带有光纤通道(Fiber Channel, 本文简称FC)接口的存储设备是高速度、高端设备的象征,当然也是高价格。与以太网和IP技术相比,FC技术的标准化程度相对较低,进入门槛高,产品价格高,利润高,这个领域里面的厂商也很少,主要有IBM、HP、EMC、LSI等,还有brocade,这家小公司在FC交换机产品上独树一帜。 FC的竞争技术是IP存储,这也是被Cisco、H3C、huawei(准确的应该是华赛)等一批数据通信设备厂商所推崇的,在互联网快速发展的推动下,现在IP和以太网设备的成本优势非常明显,去年的新闻说:arastra的以太网交换机使得10G以太网端口的价格下降到了$400以下, (http://www.arastra.com/)。从这个发展趋势来看,10GE端口价格下降到$100乃至$50也是指日可待的。虽然目前传统的FC设备在功能上还有一些优势,但是从长远来看,FC技术被IP存储取代已经是必然的结果。就像当年IBM的SNA网络被IP取代一样。brocade正是看准了这个大趋势,才有了收购Foundry的动力。这个事情发生的时候,经济危机还没有开始,各种市场研究都显示未来几年数据中心市场会有较快发展,这也是为什么会有arastra、FocalPoint等一批高密度10GE以太网交换机的创新公司、以及Cisco的NX7000、Dune Networks的Petra等一批最近的设备和芯片争相发布原因。面对数据中心的广阔市场前景,以及IP存储的大好前途,而brocade的经营状况也不错,收购是必然的。 再来看foundry networks,其主要产品是高密度千兆以太网交换机。在以太网交换机市场上,上有Cisco占了60%左右的市场份额,近有force10、extreme networks等兄弟激烈竞争,远有华为、H3C等窥看,而且最近还加入了一个Juniper。再更远处,还有一大批如arastra、Dune networks、FocalPoint等高密度10GE的创新公司。foundry的产品真的有信心能够在交换机这个高度标准化的产品上做出什么特色么? 在这样的背景下,foundry networks的股东选择出售公司,也就不难理解了。可以预见,未来几年里面,交换机产品的竞争将更加激烈。 ----------- 另外,潜龙更正说: 存储交换技术将统一到FCoE上,Brocade有FC,Foundry有E,所以他们就搞到一起了,但是,FCoE和IP存储恐怕还不是一个概念。从协议栈上看,FCoE的L1/2是以太,L3-L5是FC,基本上和IP不搭界。 | |
高端路由器芯片市场的怪现象
作者 黄 岩 | 2008-12-18 22:43 | 类型 行业动感, 通讯产品 | 54条用户评论 »
最近两年,高端路由器市场快速成长,估计2008年全球容量大约为100亿美元左右,但是高端路由器内部的核心芯片(NP、SwitchFabric)市场容量全年约1-2亿美元(注1)。 90年代末21世纪初,大家还是很看好的这类芯片的,很多评论家、投资者曾经乐观的估计:NP市场在2008年可能达到几十美元。也正是在这种背景下,Intel、IBM、Motorola等先后投资数亿美元研发NP芯片,现在回头在看看,巨头门都卖掉了NP部门。这些昔日的领头羊,现在已经倒下了。NP市场上只剩下了EZchip、Xelerated、Bay等几家还在垂死挣扎。 黄岩 mphyatyh {at} yeah {dot} net | |