Solaris技术
Sun ATS 自动性能优化工具简介
SUN中国软件技术中心罗浩/Benny Luo Benny.luo@Sun.com
ATS简介
ATS 全名叫做Automatic Tuning and Troubleshooting System, 它作为一个附加的自动性能调优的工具加载在Sparc系统上的官方发布的GCC编译器或者是Sun公司的最新的C/C+/Fortran开发工具Sun Studio 11, 并且只支持Sun Studio 11,不支持以前的版本。 Sun Studio 11可以在Sun公司的官方网站http://www.sun.com/下载,包含在Solaris Enterprise System里面,Solaris Enterprise System包含了Solaris 10,Java Enterprise System以及Sun的最新的一系列的开发工具, 所有这些软件目前都是免费开放使用的。
在以前的对C/C++/Fortran代码的调优过程中,往往需要加上编译器不同的选项来令到代码达到最佳效果,这需要多次尝试, 而在一个大型的项目中,通常一次完整的编译需要耗费大量的时间,所以通常在以往的代码调试过程中,需要程序员对代码和编译器选项都非常熟悉,以及长时间的研究,才能得到相对而言比较好的结果。ATS最大的吸引性是自动和省时,即编译器可以自动地为代码附上丰富多样的选项进行编译,并且和其他的测试工具相结合对程序进行测试,最后客户可根据不同编译选项的程序所表现的不同性能指标结果选取最适合某项性能指标的编译选项。
ATS是一个通过对编译好的二进制执行文件重新优化和编译的工具,它通过重新建立一套PEC (Portable Executable Code)的二进制执行文件来进行优化,PEC文件是通过特定编译选项(这个特定的选项目将在下面的文章中详细介绍)所编译好的包含了附加信息的二进制执行文件,这些附加在PEC文件里面的信息,可以让PEC文件在没有源代码或者原来的编译脚本和架构(比如说make 文件或者脚本)的情况下用新的编译选项进行重新编译,那么,在优化过程中不再需要对原来的源代码文件进行重新编译, 这就显著地减少了手工代码调优的重编译时间,使应用调优过程简单和迅速。ATS不仅仅可以找到最优的客户程序编译选项,而且可以用来进行客户程序的运行实时问题的调试。
ATS安装和使用
1。首先我们要下载和安装Sun Studio 11.
-
在 Sun Studio 11 上下载Sun Studio 11.
-
安装Sun Studio 11.
-
cd <my_download_dir>
-
bunzip2 studio11-sol-sparc.tar.bz2
-
tar xvf studio11-sol-sparc.tar
-
./installer
-
添加环境变量
vi /.profile
PATH=$PATH:/opt/SUNWspro/bin
export PATH
MANPATH=$MANPATH:/opt/SUNWspro/man/
export MANPATH
2。然后下载和安装ATS.
-
在 sun download center 上下载ATS。
-
安装ATS。
-
cd <my_download_dir>
-
gzip -dc SPROprfns.SPARCV9.tar.gz | tar xvf -
-
pkgadd -d <my_download_dir> SPROprfns
-
添加环境变量, 将ATS的常用命令加入PATH路径。
vi /.profile
PATH=$PATH:/opt/SUNWspro/extra/bin
export PATH
3。使用ATS:
ATS使用非常简单,首先要确保你的源代码编译成PEC二进制可执行文件,这里要确保本身的编译优化选项为O3或以上,才能顺利地编译成PEC二进制可执行文件。
编译PEC二进制文件方法:
如果是gcc编译器,可使用:gcc -O3 -xpec
如果是Sun Studio 11编译器,可使用: cc -xO3 -Wd,-pec
然后可使用ATS的autotuning来进行性能调优:
autotuning可以重新以不同的编译选项自动编译和运行, 采取优胜劣汰的机制,凡是对程序性能有改进的编译选项自动地被记录并且积累使用到下一次的编译,对性能没有改进或者有所倒退的编译选项自动被放弃,当然,如果在最后时间允许的情况下ATS允许它和其他编译选项结合测试。
Autotuning是如何使用的,大家可以看看下面的例子:
编译PEC和使用autotuning:
% cc -xO3 -Wd,-pec *.c
% ats -i 'script:autotuning' a.out
由于autotuning是ATS默认的行为,所以我们可以简单地写成:
% ats a.out
ATS实例
在这里举一个简单的实际C程序的自动性能调优,希望对大家理解ATS有所帮助:
首先我们有一个非常简单C程序 – loop.c,这个程序涉及到循环运算和乘法运算, 这个简单的程序大家一看就能明白,让我们来看看ATS可以在程序性能上帮到我们什么。
代码文件:loop.c
#include <stdio.h>
int main()
{
int i,j,k,z;
printf("n");
for(i=1;i<1000;i++)
{
for(j=1;j<1000;j++)
for (k=1;k<1000;k++)
{
if (i!=k&&i!=j&&j!=k)
z=i*j*k;
}
printf( "The current z value is: %in", z );
}
return 0;
}
首先使用Sun Studio 11编译确保程序可以通过:
-
cc loop.c 生成a.out, 运行./a.out确保程序正常。
-
使用ptime ./a.out计算未用ATS进行自动优化前程序需要运行时间。
-
ptime ./a.out
在我的Sun Blade 1500 机器上所得到的运行时间大约为12秒。
-
real 12.104
-
user 11.959
-
sys 0.017
-
-
使用ATS重新编译得到PEC二进制文件。
-
cc -xO3 -Wd,-pec loop.c
-
利用ATS进行自动调优, 下面由系统自动选择60个选项进行尝试,当然,如果有更多时间的话,可以限更多的次数或者不限次数。
-
ats -i 'script:autotuning' -stopon runs 60 a.out
-
ATS自动编译和运行过程的快照如下:

-
ATS运行完后自动生成html报告,默认放在程序调试目录下面的ATS/run(Number), 下面是一个html报告的快照:

-
根据报告中的性能最好的数据选择编译选项,在此次测试中我选用了:-xO4
-
用选取的选项重新编译C源程序 – loop.c
-
cc -xO4 loop.c
-
-
再次使用ptime看应用运行时间:
-
real 7.436
-
user 7.316
-
sys 0.013
系统运行时间已明显改善40%左右的运行时间,虽然很多朋友都知道-xO4的作用,但这里旨在说明ATS的自动调优功能,如果时间充足的话,多次自动尝试后一定还能找到比-xO4更为理想的选项组合。
结论:
不同客户对每个项目进行调优所期望的指标值有所不同,比如说在一个项目中客户可能希望应用的响应时间能够更快,但在另一个项目中可能对应用需要更大的吞吐量,所以在现实生活中,我们必须结合其他的系统性能测试工具,比如loadrunner等等,与ATS协作来满足客户的指标性能需要。
资源:
http://cooltools.sunsource.net/studioaddon/install.html
Posted at 05:08下午 六月 16, 2006 by mde in Solaris开发 |