javaluo 发表于 2005-12-8 12:24:37

从Alpha Server + Tru64移植到UltraS

从Alpha Server + Tru64移植到UltraSPARC Server + Solaris

Adam Zhang
Technical Consultant, MDE
Sun Microsystems, Inc




介绍

            随着SUN公司Solaris操作系统的开放,从操作系统的免费下载,到源代码的开放,有众多的软件提供商开始考虑将应用移植到Solaris上。本文在这里讨论一下将Alpha Server,Tru64平台上的应用移植到SUN公司UltraSPARC芯片,Solaris平台上的一些知识,可能出现的问题,以及SUN提供的相关移植工具。



从Alpha到UltraSPARC

如果要将原来基于Alpha的应用移植到UltraSPARC,性能是必须要考虑的问题:基于现有的硬件,需要怎样配置的服务器,UltraSPARC芯片需要多少颗,芯片频率是多少?一个常规的认识是当Alpha芯片的频率小于731赫兹的时候, 1.2GHZ UltraSPARC III相当于1.4倍的Alpha;当Alpha芯片的频率是1GHZ或者是1.2GHZ,这种芯片就可相当于同频率的UltraSPARC III芯片。大家也可以参考下面这张从Alpha Server到Sun Fire Server的映射表格,非常具体。

HP AlphaServer                                                      Sun Fire Server

入门级 Servers: 1 – 4 CPU                                       入门级Servers: 1 -4 CPU

1 CPU:                                                               1 CPU:

. Digital Server 3300; 400MHz; 2GB max                  . Sun Fire V100/V120; 650MHz

. AlphaServer 800/1000; 500MHz; 2GB max               . Sun Fire V100/V120; 650MHz

. AlphaServer DS10; 600MHz; 1GB max                     . Sun Fire V100/V120; 650MHz

2 CPU:                                                               2 CPU:

. Digital Server 5305; 533MHz; 2GB max                  . Sun Fire V60x/V65x; 3GHz Intel -or- V210; 1GHz

. AlphaServer 1200; 533MHz; 4GB max                     . Sun Fire V60x/V65x; 3GHz Intel -or- V210; 1GHz

. AlphaServer DS20; 667/833MHz; 4GB max            . Sun Fire V280R; 1.2GHz -or- V250; 1GHz

. AlphaServer DS25; 1GHz; 16GB max                      . Sun Fire V280R; 1.2GHz

4 CPU:                                                                4 CPU:

. AlphaServer ES40; 500/667/833MHz; 32GB max      . Sun Fire V440; 1GHz -or- V480; 1.2GHz

. AlphaServer ES45; 1GHz; 32GB max                     . Sun Fire V440; 1GHz -or- V480; 1.2GHz

. AlphaServer ES47; 1GHz; 32GB max                     . Sun Fire V440; 1GHz -or- V480; 1.2GHz

. AlphaServer 4000/4100; 466/533/600MHz; 8GB mx . Sun Fire V440; 1GHz -or- V480; 1.2GHz


Mid Range Servers: 8 to 14 CPU                               Mid Range Servers: 8 to 14 CPU

8 CPU:                                                                  8 CPU:

. AlphaServer GS60; 700MHz;                                 . Sun Fire V880; 1.2GHz

. AlphaServer GS80; 731MHz/1.2GHz; 16GB max         . Sun Fire V880; 1.2GHz

. AlphaServer ES80; 1GHz; 64GB max                        . Sun Fire V880; 1.2GHz -or- V1280; 900MHz

. AlphaServer 8200; 6CPU 625MHz;                           . Sun Fire V880; 1.2GHz

14 CPU:                                                                14 CPU:

. AlphaServer GS140; 700MHz;                                 . Sun Fire V1280; 900MHz -or- 4800; 1.2GHz

. AlphaServer 8400; 625MHz                                    . Sun Fire V1280; 900MHz -or- 4800; 1.2GHz

高端Servers: 16 to 64+ CPU                                     高端Servers: 16 to 64+ CPU

16 CPU:                                                               14 / 24 CPU:

. AlphaServer GS160; 731MHz                                 . Sun Fire 4800; 1.2Ghz

. AlphaServer GS160; 1.2GHz                                    . Sun Fire 6800; 1.2GHz

32 CPU:                                                               14 / 24 / 52 CPU:

. AlphaServer GS320; 731MHz                                 . Sun Fire 4800; 1.2Ghz

. AlphaServer GS320; 1.2GHz                                    . Sun Fire 6800; 1.2GHz -or- Sun Fire 12K; 1.2GHz

. AlphaServer GS1280; 1.15Ghz                                 . Sun Fire 12K; 1.2GHz

64 CPU+:                                                               64 CPU+:

. AlphaServer GS1280; 1.15Ghz                                 . Sun Fire 15K; 1.2GHz




另外这种硬件移植也带来了一个我们不能忽视的问题:little-endian和big-endian。

            在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的最右边部分。比如一个16进制数字0x12345678, 在内存存放的方式如下:



            

值            0111,1000          0101,0110         0011,0100         0001,0010

地址         100                      101                      102                     103




            另一种称为big-endian,正好相反,存放在内存中最低位的数值是来自数据的最左边边部分。比如一个16进制数字0x12345678, 在内存存放的方式如下:

            

值            0001,0010          0011,0100            0101,0110            0111,1000

地址         100                     101                         102                        103






            Alpha是使用little-endian, 而SPARC架构是采用big-endian。因此现有代码中如果没有很好的封装这种数据存储顺序的差异,移植的时候就要特别小心。除了注意那些直接通过指针操作内存的动作,一些直接依赖内存数据布局的代码也要留意,比如:

struct date

{

char yr;

char mon;

char day;

char x; // struct var size is 4

} planned_date, end_date;



if ( (*(long * )&end_date) >

(*(long *)&planned_date))

{

   printf("Sorry, You missed the deadline \n");

}

由于这段程序直接使用内存数据来进行比较,在Alpha的平台下运行没有问题,但如果直接移植到UltraSPARC的机器上就会得到错误的结果。

如果要与其他机器交互,也要特别当心这个问题,比如某些文件需要在不同平台处理,或者通过Socket通信。这方面我们可以借助ntohl(), ntohs(), htonl(), and htons()函数进行格式转换。





OS操作系统

            Tru64

            Tru64s是第一个支持64位计算的商业UNIX, 它主要基于卡内基梅隆大学的March V2.5 Kernel, 还有来自于BSD 4.3, 4.4 和UNIX System V的模块。

            Solaris

            Solaris同样也是基于BSD和AT&T的UNIX System V。最重要的是两者都是符合POSIX标准的,所以如果使用应用是基于这种标准的技术,移植工作不会很复杂。如果使用Tru64特有的库或者架构,则需要采用Solaris相对应的库或者结构。

            Solaris最新的版本Solaris10不仅提供最新的特性:高效的TCP/IP实现,具有DTrace动态侦测 ;而且完全免费的。下载地址为http://www.sun.com/software/solaris/get.jsp。当然你必须要有SUN的online账号,如果没有的话,可以免费注册。

            Patch包可以到http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access免费下载,整个Patch包大概有90M。



Compiler编译器

            建议使用Sun Studio 11, 它具有最新的特性:对64位计算和多线程的更好地支持,提供更为有效的开发和调试环境。这个版本也是免费的。下载和安装详见http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=8&PartDetailId=SSSI9-110-TF99&TransactionId=try。

            虽然GNU的GCC也是免费而且应用广泛,但是Sun Stuidio对UltraSPARC芯片的支持程度更好,而且还带有IDE环境,给开发和调试带来很大的方便。



移植工具

            针对从Tru64到Solaris,SUN公司提供了一个migration tool for C/C++。免费下载,地址为:http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=8&PartDetailId=Tru_2_Solaris-1.0-G-F&TransactionId=try

这个工具通过扫描代码源文件找出有问题的文件,代码位置及其解决方法。

由于这个工具是java写的,所以需要JVM。建议使用最新的JVM。因为扫描处理源文件,还是很耗时的。由于 1.4版的JVM在性能上得到很大的提升,所以建议使用这个版本或者更高。
页: [1]
查看完整版本: 从Alpha Server + Tru64移植到UltraS