- 论坛徽章:
- 0
|
从Alpha Server + Tru64移植到UltraSPARC Server + Solaris\r\n\r\nAdam Zhang\r\nTechnical Consultant, MDE\r\nSun Microsystems, Inc\r\n \r\n\r\n\r\n\r\n介绍\r\n\r\n 随着SUN公司Solaris操作系统的开放,从操作系统的免费下载,到源代码的开放,有众多的软件提供商开始考虑将应用移植到Solaris上。本文在这里讨论一下将Alpha Server,Tru64平台上的应用移植到SUN公司UltraSPARC芯片,Solaris平台上的一些知识,可能出现的问题,以及SUN提供的相关移植工具。\r\n\r\n \r\n\r\n从Alpha到UltraSPARC\r\n\r\n如果要将原来基于Alpha的应用移植到UltraSPARC,性能是必须要考虑的问题:基于现有的硬件,需要怎样配置的服务器,UltraSPARC芯片需要多少颗,芯片频率是多少?一个常规的认识是当Alpha芯片的频率小于731赫兹的时候, 1.2GHZ UltraSPARC III相当于1.4倍的Alpha;当Alpha芯片的频率是1GHZ或者是1.2GHZ,这种芯片就可相当于同频率的UltraSPARC III芯片。大家也可以参考下面这张从Alpha Server到Sun Fire Server的映射表格,非常具体。\r\n\r\nHP AlphaServer Sun Fire Server\r\n \r\n入门级 Servers: 1 – 4 CPU 入门级Servers: 1 -4 CPU\r\n \r\n1 CPU: 1 CPU:\r\n\r\n. Digital Server 3300; 400MHz; 2GB max . Sun Fire V100/V120; 650MHz\r\n\r\n. AlphaServer 800/1000; 500MHz; 2GB max . Sun Fire V100/V120; 650MHz\r\n\r\n. AlphaServer DS10; 600MHz; 1GB max . Sun Fire V100/V120; 650MHz\r\n\r\n2 CPU: 2 CPU:\r\n\r\n. Digital Server 5305; 533MHz; 2GB max . Sun Fire V60x/V65x; 3GHz Intel -or- V210; 1GHz\r\n\r\n. AlphaServer 1200; 533MHz; 4GB max . Sun Fire V60x/V65x; 3GHz Intel -or- V210; 1GHz\r\n\r\n. AlphaServer DS20; 667/833MHz; 4GB max . Sun Fire V280R; 1.2GHz -or- V250; 1GHz\r\n\r\n. AlphaServer DS25; 1GHz; 16GB max . Sun Fire V280R; 1.2GHz\r\n\r\n4 CPU: 4 CPU:\r\n\r\n. AlphaServer ES40; 500/667/833MHz; 32GB max . Sun Fire V440; 1GHz -or- V480; 1.2GHz\r\n\r\n. AlphaServer ES45; 1GHz; 32GB max . Sun Fire V440; 1GHz -or- V480; 1.2GHz\r\n\r\n. AlphaServer ES47; 1GHz; 32GB max . Sun Fire V440; 1GHz -or- V480; 1.2GHz\r\n\r\n. AlphaServer 4000/4100; 466/533/600MHz; 8GB mx . Sun Fire V440; 1GHz -or- V480; 1.2GHz\r\n\r\n\r\nMid Range Servers: 8 to 14 CPU Mid Range Servers: 8 to 14 CPU\r\n \r\n8 CPU: 8 CPU:\r\n\r\n. AlphaServer GS60; 700MHz; . Sun Fire V880; 1.2GHz\r\n\r\n. AlphaServer GS80; 731MHz/1.2GHz; 16GB max . Sun Fire V880; 1.2GHz\r\n\r\n. AlphaServer ES80; 1GHz; 64GB max . Sun Fire V880; 1.2GHz -or- V1280; 900MHz\r\n\r\n. AlphaServer 8200; 6CPU 625MHz; . Sun Fire V880; 1.2GHz\r\n\r\n14 CPU: 14 CPU:\r\n\r\n. AlphaServer GS140; 700MHz; . Sun Fire V1280; 900MHz -or- 4800; 1.2GHz\r\n\r\n. AlphaServer 8400; 625MHz . Sun Fire V1280; 900MHz -or- 4800; 1.2GHz\r\n\r\n高端Servers: 16 to 64+ CPU 高端Servers: 16 to 64+ CPU\r\n \r\n16 CPU: 14 / 24 CPU:\r\n\r\n. AlphaServer GS160; 731MHz . Sun Fire 4800; 1.2Ghz\r\n\r\n. AlphaServer GS160; 1.2GHz . Sun Fire 6800; 1.2GHz\r\n\r\n32 CPU: 14 / 24 / 52 CPU:\r\n\r\n. AlphaServer GS320; 731MHz . Sun Fire 4800; 1.2Ghz\r\n\r\n. AlphaServer GS320; 1.2GHz . Sun Fire 6800; 1.2GHz -or- Sun Fire 12K; 1.2GHz\r\n\r\n. AlphaServer GS1280; 1.15Ghz . Sun Fire 12K; 1.2GHz\r\n\r\n64 CPU+: 64 CPU+:\r\n\r\n. AlphaServer GS1280; 1.15Ghz . Sun Fire 15K; 1.2GHz\r\n\r\n\r\n\r\n\r\n另外这种硬件移植也带来了一个我们不能忽视的问题:little-endian和big-endian。\r\n\r\n 在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的最右边部分。比如一个16进制数字0x12345678, 在内存存放的方式如下:\r\n\r\n \r\n\r\n \r\n\r\n值 0111,1000 0101,0110 0011,0100 0001,0010\r\n \r\n地址 100 101 102 103\r\n \r\n\r\n \r\n\r\n 另一种称为big-endian,正好相反,存放在内存中最低位的数值是来自数据的最左边边部分。比如一个16进制数字0x12345678, 在内存存放的方式如下:\r\n\r\n \r\n\r\n值 0001,0010 0011,0100 0101,0110 0111,1000\r\n \r\n地址 100 101 102 103\r\n \r\n\r\n \r\n\r\n \r\n\r\n Alpha是使用little-endian, 而SPARC架构是采用big-endian。因此现有代码中如果没有很好的封装这种数据存储顺序的差异,移植的时候就要特别小心。除了注意那些直接通过指针操作内存的动作,一些直接依赖内存数据布局的代码也要留意,比如:\r\n\r\nstruct date\r\n\r\n{\r\n\r\nchar yr;\r\n\r\nchar mon;\r\n\r\nchar day;\r\n\r\nchar x; // struct var size is 4\r\n\r\n} planned_date, end_date;\r\n\r\n \r\n\r\nif ( (*(long * )&end_date) >\r\n\r\n(*(long *)&planned_date))\r\n\r\n{\r\n\r\n printf(\"Sorry, You missed the deadline \\n\");\r\n\r\n}\r\n\r\n由于这段程序直接使用内存数据来进行比较,在Alpha的平台下运行没有问题,但如果直接移植到UltraSPARC的机器上就会得到错误的结果。\r\n\r\n如果要与其他机器交互,也要特别当心这个问题,比如某些文件需要在不同平台处理,或者通过Socket通信。这方面我们可以借助ntohl(), ntohs(), htonl(), and htons()函数进行格式转换。\r\n\r\n \r\n\r\n \r\n\r\nOS操作系统\r\n\r\n Tru64\r\n\r\n Tru64s是第一个支持64位计算的商业UNIX, 它主要基于卡内基梅隆大学的March V2.5 Kernel, 还有来自于BSD 4.3, 4.4 和UNIX System V的模块。\r\n\r\n Solaris\r\n\r\n Solaris同样也是基于BSD和AT&T的UNIX System V。最重要的是两者都是符合POSIX标准的,所以如果使用应用是基于这种标准的技术,移植工作不会很复杂。如果使用Tru64特有的库或者架构,则需要采用Solaris相对应的库或者结构。\r\n\r\n Solaris最新的版本Solaris10不仅提供最新的特性:高效的TCP/IP实现,具有DTrace动态侦测 ;而且完全免费的。下载地址为http://www.sun.com/software/solaris/get.jsp。当然你必须要有SUN的online账号,如果没有的话,可以免费注册。\r\n\r\n Patch包可以到http://sunsolve.sun.com/pub-cgi/ ... atches/patch-access免费下载,整个Patch包大概有90M。\r\n\r\n \r\n\r\nCompiler编译器\r\n\r\n 建议使用Sun Studio 11, 它具有最新的特性:对64位计算和多线程的更好地支持,提供更为有效的开发和调试环境。这个版本也是免费的。下载和安装详见http://javashoplm.sun.com/ECom/d ... p;TransactionId=try。\r\n\r\n 虽然GNU的GCC也是免费而且应用广泛,但是Sun Stuidio对UltraSPARC芯片的支持程度更好,而且还带有IDE环境,给开发和调试带来很大的方便。\r\n\r\n \r\n\r\n移植工具\r\n\r\n 针对从Tru64到Solaris,SUN公司提供了一个migration tool for C/C++。免费下载,地址为:http://javashoplm.sun.com/ECom/d ... p;TransactionId=try\r\n\r\n这个工具通过扫描代码源文件找出有问题的文件,代码位置及其解决方法。\r\n\r\n由于这个工具是java写的,所以需要JVM。建议使用最新的JVM。因为扫描处理源文件,还是很耗时的。由于 1.4版的JVM在性能上得到很大的提升,所以建议使用这个版本或者更高。 |
|