从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
");
}
由于这段程序直接使用内存数据来进行比较,在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&
artDetailId=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&
artDetailId=Tru_2_Solaris-1.0-G-F&TransactionId=try
这个工具通过扫描代码源文件找出有问题的文件,代码位置及其解决方法。
由于这个工具是java写的,所以需要JVM。建议使用最新的JVM。因为扫描处理源文件,还是很耗时的。由于 1.4版的JVM在性能上得到很大的提升,所以建议使用这个版本或者更高。