2007年元月19日(上周六),在美丽的香山饭店,我有幸参加了2007中
国开发者精英论坛。在上午的Keynotes上,Sun中国工程研究院院长王星耀先生介绍了开源与创新。介绍了Sun公司作为世界上最大
的开源机构,对开源领域的一些贡献和理念。在下午的开发平台分论坛,我很荣幸地给经验丰富的开发人员介绍了Solaris的
最新特性和OpenSolaris社区。以下是根据现场录音修改后的演讲稿,如有谬误,请指正。
熊建国:
下面有请Sun公司的郭朝峰先生为我们讲
一下关于Sun公司的开源社区OpenSolaris,
包括最新的操作系统Solaris 10的情况。
郭朝峰:
各位嘉宾、各位同仁大家下午好!
很高兴有这个机会能在这里分享一下Sun公司近几年来在操作系统和开发工具这个领域所做的一些努力。今天我讲的内容是关于Sun的操作系统平台,现在操作系统的概念更加广泛化了,因为现在的操作系统已经不像传统的操作系统,即操作
系统内核做的一些工作,主要是进程管理、内存管理、文件系统和IO管理等等的一些管理。今天的操作
系统越来越成为一个提供上层服务的平台,操作系统本身也包含了中间层的一些东西,这些在Sun公司
的Solaris操作系统当中体现得更加明显一点,Solaris为
开发人员提供了很多的工具和特性,来满足我们一些新的应用开发的灵活性和健壮性。
在开始详细介绍之前,我现在调查一下有多少位朋友
在Linux或者Unix系统上做过开发。
还不少!今天的内容是跟Unix相关的,我们不妨来看看它的历史。Unix系统分两个大分支,一个是AT&T公
司的System分支,另外一个就是BSD分
支。System分支已经在商业领域当中变得比较少了,像几家大的IT提供商,IBM也不再很大的投入做操作系统的研
发,等于在这个层面上System这个分支变得越来越少了。在另一个分支就是BSD,它分了很多家,比如说FreeBSD,NetBSD,OpenBSD,现在BSD的分支,最大的问题就是分支太多了,如果当时只有一个BSD分
支的话,就没有今天的Linux。另外,Solaris也
是从BSD这个分支演化过来的。如果Solaris五
年之前开源的话,也没有Linux。Linux的
发展是一个机缘巧合,Linux产生在80年
代末90年代初,这个时期是互联网蓬勃发展的时期,今天很多原来BSD和System的开发人员慢慢转向Linux的开发。
Sun公司在2005年6月14号将这个操作系统正式开源,免费给各位开发人
员来使用。其实我们是在2005年1月份将Solaris 10的很多特性正式发布了,慢慢在2005年6月14号将整个操作系统开源。Solaris的前身SunOS从1982年的时候开始开发的,到2005年等于有24年开发的历史,这里面积累了好多的东西,可以看到OpenSolaris的
代码它都是有Solaris发展的痕迹,它其中还吸收了System很
多东西,不知道大家有没有了解,为什么 BSD还是学System,
其实有一段历史是非常有意思的,今天如果你打一个Patch的话,会有Patch命令的,这个命令最早是由System的一
个开发人员开发出来的,他开发这个Patch的程序,可以让你不需要下载整个BSD的源代码,你要做一个增量,把你修改过的Patch一
下,你就可以做新的开发了,对一个社区来说是一个很大的改进,资源上的一个节省。所以整个来看,Solaris吸
收了各个Unix分支里面很多好的东西。
今天我介绍的内容包括开发的角度,还有OpenSolaris社区里面有哪些特性,Solaris 10发
布时包含了600多项新的特性,如果讲所有的特性可能要讲一天的时间。我只是针对一些和开发人员和
系统管理员相关的东西,主要分为几方面,第一从性能上面;第二从开发工具的可观察性和可调试性这方面;第三就是虚拟技术;另外就是可用性,可用性对系统管
理来说是一个非常重要的特性;还有就是安全性,上午沈院士也提到了,可信计算,安全性是基础;最后就是平台的选择。很多同仁就问,为什么我今天带这个笔记
本?我带这个笔记本并不是因为我喜欢红色,是因为这是在市面上能够买到的第一台支持AMD64芯片
的笔记本,它现在跑的是64位的操作系统,尽管很多应用程序是32 位的。
首先看第一点,就是Solaris的极端性能。什么叫极端的性能?这个我们很难定义,但是Solaris有
相关的基准测试的数据。跟开发人员相关的,也是跟整个IT 行业发展趋势相关的,第一点就是“多线程”的支持,大家都很关注今天的CPU是双核的还是单核的,一个小小的CPU能够支持
那么多个核,你可能会觉得这是以前没有考虑到的一个问题,但是你今天做开发的时候,可能今天你没碰到了,但是明天你做开发的时候你的客户就会提要求,你怎
么利用多余的核提高性能,它的可伸缩性能够有一个很好的支持,这对操作系统来说也是一个很大的挑战。
在这方面Sun公
司有一些积累,因为我们是做芯片、系统出身的,对硬件这一块的关注是非常多的。我们现在已经在UltraSPARC
Niagara芯片上支持到芯片级的多线程。一个小的芯片,有8个核,每个核上有4个线程,相当于32个CPU。这个有什么好处?今天上午听 Sybase的CTO讲的时候,现在服务器端的瓶颈在哪儿?在IO上。
你怎么处理由于IO的延迟导致的一个CPU的
空转,这是一个很大的浪费,怎么办?你很难从工艺上去改变的,然而你有别的办法,将原来串行化的处理并行化。系统结构上有加速比定义,你这个系统的并行化
一个比例越大,你的加速比例越高,这对系统的性能来说,我可以通过多个核,或者多个线程来弥补IO的
延迟,提高整个系统的吞吐量。Solaris系统是如何支持多线程的,最复杂的不是内核,大家都知
道 Solaris 8开始就支持内核级的多线程。最复杂的是网络协议栈,Unix操作系统里面用的STREAMS,是基于一个
流机制,现在很多流系统是从Unix系统里面借鉴过来的。流机制,使用起来很简单,可以将这个处理
传递到下一个处理里面,我可以将IP处理之后,发给TCP处
理模块,它的最大的好处就是灵活性,我增加一个模块,比如说我希望做一个防攻击的模块,我很容易将新的模块加入到流中。但是它导致的问题是什么呢?你一旦
是一个一个往下传递处理的话,这是过程,一个单线程的线性化的过程,对网络性能来说是一个很大的影响。
Solaris 10将Solaris 9做了一个很大的重新设计,将STREAMS整个模块做了多线程处理,TCP和IP模块不是以前的形式,现在这两个模块是捆绑在一起的。
从内核到网络处理,到我们今天的应用,很多应用像Java,整个操作系统从内核到每个协议上的处理,都是能够很好的支持多线程的处理,在CPU方面多线程肯定是一个趋势,大家可以看到AMD公
司的网站,它有一个叫Road Map计划,07年
要支持四个,08年要支持多少核,大家可以看一下。其实,软件产业很大程度上是受硬件产业的制约,
当时我们Sun公司有一个工程师讲的好,你要做存储软件的话你要看看你的卡和磁盘是一个什么量级
的,你再去设计你这个软件,硬件的发展趋势其实对软件行业是有很大的影响。对于性能这一块,在多线程这一块是能够做一个很大的性能的提升。
另外,Solaris
10还有一个非常重要的特性,就是动态跟踪技术,动态跟踪顾名思义它是一个动态的跟踪技术。动态怎么理解?动态的就是一个实时的,是一个可
以用于实际的生产系统,而不是我的调试系统,或者开发系统。生产系统是什么呢?举个例子,在中国电信或者是我们工商银行的一个数据中心里面,将服务器装上Solaris 10之后,我可以用DTrace脚本
去动态跟踪这一个月来整个数据处理的日志。想了解整个系统运行是一个什么情况,我都可以打开这个开关来观察的。
DTrace是默认在操作系统里面的,你不需要修改你的源代码,你只需要敲一个命令或者打开一个DTrace脚
本,你就可以关注你想要的。DTrace里面大概有五万多个探针,什么是探针?比如说如果是我们感
冒,或者是得了小的风寒,可能到医院看大夫,大夫首先会问你大概是什么情况,他要是断定不下来,他会利用听诊器去听你的胸腔和腹腔大概是一个什么情况,他
综合听到的数据,然后根据经验做一个判断,你是哪个地方出了问题,是感冒还是别的问题。DTrace也
类似于这个道理,我在操作系统内核里面,内嵌了几万个探针,在每个入口和出口处就可以捕捉到这些数据,这些数据可以实时的展现出来,你也可以做一个统计分
析,为什么统计分析很有用?举一个例子,如果我去做实际系统部署的时候,我不知道系统瓶颈在哪儿,如果我知道的话这个问题就解决一半了,有时候是因为你用
系统的配置不对,举一个例子,像很多文件系统里面有最大缓存的设置等等都是可以调的,这些调的数据如果你不知道用哪个工具去观察的话,或者有的系统根本没
有工具去观察的话你是很难去做的,DTrace最大的好处,它可以动态去捕获内核的数据,他可以看
你这个设置的结果是什么样的,另一个设置效果是什么样的。你还可以做一个统计分析,你可以统计整个系统里面哪个函数是调用最多的,如果我找到调用前三名那
几个函数的话,我就专门优化那三个函数,就可以把性能提高很多。在软件行业有一个不成文的二八定律,我20%
的函数是占了整个80%的开销,如果我能够把这20%
的开销最大的函数找出来的话,我就可以省很多力气,DTrace就可以很好完成的这个工作。你就可
以去跟踪、统计、分析哪一个是系统的关键问题。另外,DTrace是很类似于Java的一个东西,它可以站在前人的肩膀上,就是前人为你做了很多的铺垫。 DTrace是脚本语言,它非常简单,采用类似于C语
言的格式,但是它增加了探针的定义,每一个内核单元我都可以通过这个探针来决定。刚才说的是性能和开发工具的可观察性方面,就是说我们有很大的提高。
大家都知道现在虚拟技术非常的火热,从前年HP推出虚拟平台,到去年IBM推出虚拟产品,Sun公司也一直在研发虚拟技术方案。Sun公司有各
个层面的虚拟技术,大家可以看到虚拟技术是分很多层面的,虚拟技术现在是一个Total Solution,
而不是一个简单的一对一的方案。我们从硬件,到硬件之上操作系统之下,操作系统内部,再到是应用程序层面的,各个层面的虚拟技术都有解决方案。在硬件层面
上的虚拟技术我就不说了,因为这个很多服务器都支持。第二个就是现在非常火的,开放标准的支持,它事实上是剑桥大学开发的一个用于虚拟监控器的一个新的标
准,它最大的好处是什么?它可以在一台机器上,同时运行128个操作系统,同时运行不是同时安装。
同时运行的好处是什么?我可以利用各个操作系统的优势,比如说我们发现今天Vista 比较好
看,我们可以用Vista作为我们的前端,我们发现Linux有
几个新驱动可以管理新硬件,因为Solaris内核很健壮可以用作后台管理,所以说可以利用各个操
作系统的优势。这个又是开放标准,这是在虚拟技术里面是一个非常好的技术。如果大家有兴趣可以去OpenSolaris网
站上关注一下。
下面一个就是在Solaris操作系统内核里的虚拟技术,Solaris 10提
供一个新的特性,叫Solaris的容器技术,就是Container,
它最早的时候是从BSD的Jail技术里面
演变过来的,但是在上面做了很多的扩展,它最大的一个特点,就是在同一个操作系统内核上,可以有三千多个操作系统虚拟环境,就是一个Container,实际上每一个只占了 10%甚至
更少的资源(CPU,内存和网络),可以很好的利用系统资源。我们在这方面有一些实际的部署方案,
比如说,以前的方案是Solaris 9的服务器系统,分布在11个服务器上,11个服务器就意味着我有11份系统管理的工作。现在,将这些服务器移植到两台Solaris
10服务器上,将整个系统原来每台服务器15%的利用率提升到现在 80%多的利用率,对整个资源来说是一个很好的利用。另外对系统管理来说它只需要登陆两台服务器就可以做整
个系统的工作。还有它的资源管理,资源管理是Solaris针对于不同的进程或者用户,可以指定相
关资源的利用率,这是应用层面上的,就不多介绍了。刚才介绍Containers社区这个技术,它
可以做资源的高利用,还可以做资源共享的一个方案,大家都知道同一台服务器上如果只有一个应用的话,比如说在公司里面,可能我们白天上班的时候用Mail服务器用的比较多,但是晚上Mail服务就很
少了,但是一些备份工作较多。一个是在白天工作,一个是在晚上工作,可以将这个系统的资源利用率不断的提高。另外几个优势,比如说一台服务器装一个系统的
话,我需要重起整个机器,如果我有这个容器的话,我想重起一个容器的话是非常简单的。它不需要将整个系统重起,因为它不需要起很多硬件来完成自己的那些工
作。
下面是Xen技
术的详细的解释了,我们看几个例子,这个例子是非常好的,大家都知道现在数据中心里面非常关注的一个东西,就是整个操作系统的动态迁移,这是一个非常复杂
的工作,就是说你需要将整个操作系统内核东西存下来,而且还不完全做,还要做一些准备工作,完了之后,你要将整个的东西打一个包传到另一台服务器上。
然后你要将整个系统释放,恢复到原来的状态,这个问题研究了很长的时间也没有找到一个很好的方案,Xen就
提供了一个很好的方案。它发现服务器的一个处理,第一个抖动,往下的话还可以处理,一个抖动之后它不断的往下降,在这个时候他不做处理的话,往下就是一个
直线下降的过程,在这个时候可以将整个系统存一下,传到另外一台服务器上,现在Xen提供两种方
案,一种是NFS,大家知道NFS是Solaris做的最棒的一种应用,它很多结构都是标准的,可以用光纤做,也可以基于不同的协议做这个存储,
所以整个方案现在已经有了,可以看到这个数字是非常诱人的,它在180微秒之内,即不到0.2秒的时间把整个工作做完了,所以在数据中心,或者是下一代的集群应用等等这些方面,这个方案是非常实际
而且有用的一个方案。所以说为什么今天Windows、Linux和Unix都不断的去支持它。
下一个就是文件系统,大家都知道文件系统已经是非常的复杂,而且是非常关键的一个模块,原来我们
在Windows Vista里面准备增加一个WinFS的
功能,我不知道什么时候能够重起这个项目,这一块Solaris里面已经做类似的工作,因为当时WinFS提出基于对象的概念,还有包括引入到数据库等等一些东西在里面,类似的在Solaris新的文件系统ZFS里面已经引入。ZFS就是Zettabyte
文件系统, Zetta是一个量级的概念,它是2的128次方,它是全球第一个支持128个软件系统,而现在有很多做存储的公司都是支持64位
的文件系统。
这个对于很多数据中心来说是一个非常有用的,它怎么样实现想要达到的功能,第一,要保证数据永远
的一致性,大家用过Unix,可以发现一种情况,我启动的过程当中掉电了,下次启动的时候会做一个
工作,就是fsck,它是检查文件系统的一致性,看看原数据有没有破坏,有破坏可以做一些恢复的动
作。这是非常耗时的工作,如果在一个数据中心,有上T的数据量的话,这个文件系统是要好几个小时
的,这个数据的恢复是一个很大的特性,在ZFS中体现了一个概念叫永远的一致性,它所有的数据都是
要做一个叫Copy-on-write,就是我写的时候是有修改的时候我去保存一个备份,内存数据
里面有修改的时候,每一个页会存一个拷贝出来,你在某一次更新的时候,把整个数据存到磁盘上去。在ZFS里
面都是COW,每一个操作都会存一个备份,这个备份修改的时候只是存修改后的备份。另外,这是写的
时候永远是保证状态的一致性, ZFS它引入了一个数据库的概念,就是Transaction,一个叫事物的概念,就是说我一次的提交,要么完全成功,要么失败,失败的时候将回滚
到上一个状态,能够保证数据状态的一致性。
另外一个是写的过程当中可以保证数据状态的一致性,比如说我做RAID0(Mirror)的时候,我是两个磁盘,写
的时候是同时写的,数据是一样的,但是读的时候大家有没有想过,它是怎么读的?读的时候是随机读的,它只读一个磁盘上的数据,如果它是一个普通的数据那就
没有关系了,如果是说访问的一个元数据是错误的,会产生系统Panic,或者是系统挂起。ZFS每次读的时候,都会读取一个节点的Checksum值,
是存在父节点上,如果这个值是正确的反馈给下面的应用程序,如果是错误的,他会从另一个Checksum里
面读正确的数据,反馈到上面,同时修改我错误的数据值,这个就可以实现软件系统数据的自修复。
另外一个比较诱人的就是在数据容量上,它是128位
的,它可以达到有4个billion billion
billion billion那么大的一个数据容量,这个数据容量我们用30年都
用不完。另外一个很重要的特性,它是将整个系统,是基于对象的一个文件系统,怎么来理解它是基于对象的,它将整个文件系统的功能和我们说的卷管理功能整合
到一起,现在ZFS有一个存储池的概念,存储池很容易理解,就是说它有很多的磁盘,这个池它是一个
很大的,刚才我们说的是128,那么大的一个数据,数据的地址空间,大家已经了解地址空间的时候无
非有两个,一个是内容的地址空间,再一个是IO的地址空间,在ZFS里面引用一个数据的地址空间,在这个数据地址空间里面分配一个文件系统,就是像我们分配一个内存模块一
样,创建一个文件系统,在这个池里面拿一个地址空间出来,然后他再去影射到具体的磁盘上。它可以实现基于对象的这种管理方式,非常灵活方便,导致了最后一
个特性,就是很容易管理,很容易管理怎么来理解?我们以前在文件系统里面比较有代表意义的一个操作,就是文件系统的扩容,因为很多的数据不断增长到某一个
程度肯定要超过文件的容量,而这个时候原来分配大小不够的话,我怎么来增加一个文件系统的空间,以前基于UFS上
的话你可能做多步的操作,首先备份文件系统,其次备份你的卷,重复恢复你的卷,再扩大你的文件系统,不说中间有很多繁琐的步骤,它每一步消耗的时间有很
多,光这种记命令的话,大概差不多有70个命令,这对一个系统管理员来说这是一件非常头痛的事情,
但是在 ZFS,我们简化为两步操作,第一步将你池的大小重新设置一下,另外一个你重新设置你的文
件系统的容量,它是基于地址空间的,而且是与完全基于对象的文件系统管理是分不开的。
在这一块我想提一个问题,大家看看有很多介绍,听起来都很熟悉,包括地址空间等等这个都很熟悉,
只是说把一些很多操作系统经典模块的东西搬到文件系统里面来了,我想问一下,是我们操作系统哪个模块,来参考设计,像内存管理的一些理念,引进到一个文件
系统里,为什么可以做到这一点?内存管理里面有一个非常著名的模块叫做Slab分配器,这是Sun的人做的,叫做Jeff
Bonwich,是Sun的DE,
杰出工程师,他当时做的内存的Slab分配器,然后做的ZFS,
所以很自然的,他将以前他积累的东西用到新的应用领域。这是我们所谓的集成创新,就是将以前的理念用到了一个新的应用里面。
下一个就是预测自修复技术,这个听起来有一点高
深,预测自修复,听起来比较恐怖的一个东西,但是它实现起来其实在操作系统里面,它主要是两大模块来做的,第一个模块就是预测的模块,怎么能够做到这个操
作系统自己来预测,有一定的智能,这个预测故障的模块叫做故障管理模块,就是说在每一个跟硬件相关的模块,比如说CPU,
其实用的最多的还是IO,寿命最短的还是IO,
所以IO这一块你怎么能够在它出问题之前就能够发现问题,故障管理器可以事先指定一些预值,你可以
判断这个磁盘的故障,通知系统管理员发现这个盘有些不正常的情况,先去判断,看看是不是到了寿命期了,预测主要是跟硬件故障相关的模块。另一个模块是修复
的功能,它叫服务管理器,这个服务的概念跟我们刚才同事讲的服务不是一个概念,这里的服务是指操作系统内关键内核线程和你指定的关键应用,这是操作系统的
管理服务,操作系统可以给你分析你在应用之间和操作系统内核各个之间,就是到一定程度上可以做服务的重起,操作系统可以做这件事情。以前我们很多,比如说
系统管理员想要的东西,Solaris逐渐增加了智能的东西。
开发人员以前想了解操作系统内部是怎么运转的,他可以利用DTrace,
或者Kmdb,它可以调试内部的一个数据结构和函数,做驱动开发的,做调试来说就是一个非常有用的
工作 。其实DTrace它只能排第二和MDB排
第三位的开发工具,开发排第一位的,如果做内核开发的,应该有一个函数肯定不会陌生,就是printf,
很多时候可能更关注是你自己想要的东西。
总体来看,就是我们Solaris里面有很多新的特性,更重要的一点Solaris已
经开源了,我们将 OpenSolaris的网站做了一个DVD宝
典,可以在网上订阅的项目,上这个网站,你就可以上去定我们说的OpenSolaris
DVD宝典,里面有一套DVD,OpenSolaris最
新的安装程序,我们今天提供的这个宝典我们是做了一个很有意义的工作,我们是自动安装,大概需要45分
钟左右,整个系统全装上了,除了装上系统之后还有配置一些基本的应用。我们将Sun最新的开发工
具,一个是Sun Studio 11,这是我们最新的开发工具,另外一个就NetBeans 5.5,最新的,也是为了web2.0开
发的一个Java的一个开发工具。这个很方便,如果你对这个还有问题的话,我们还有一本书,就是一
个手册一样的东西。这些信息可以在我们的网站上看到,请登录http://opensolaris.opentech.org.cn。
今天我介绍的内容可能各方面都涉及到了,但是只是抛砖引玉,如果感兴趣的可以发电子邮件给我,或者上我们的网站上去了解。
谢谢各位!
