Xinfeng Liu

http://developers.sun.com.cn/blog/lxf/date/20080912 星期五 九月 12, 2008

使用SUN Studio编译C++程序几个注意问题

不喜欢C++,不规范的C++代码的移植简直就是一场恶梦,即使是在同一种编译器的不同版本间移植也会令人痛苦不堪。Mozilla甚至给出了一个编码规范,以减少跨平台/跨编译器移植的麻烦。不符合该规范的代码一律被认为BUG,即使代码的功能正确。

不同编译器编出来的C++代码通常是不能混用的。因为C++有个符号mangling的问题,不同的编译器有不同的mangling方法,导致符号不通用。Solaris上的Java虚拟机是用Sun compiler编译的,因此如果你有JNI代码是C++写的,你应该用Sun compiler编译JNI代码。(当然Sun compiler是免费的)。编译各种操作系统平台的JNI代码的建议编译选项见Kelly O'Hair的blog。

Sun compiler编译可执行程序时会自动链接 -lCstd -lCrun -lm -lc ,但编共享库时却不会。所以编共享库时应该显式地加上这些链接选项。

Sun compiler 也同时提供标准C++库的stlport实现,编译时可以加上-library=stlport4以使用stlport的实现而不是自带的libCstd.so.1。但这二者在同一程序中不能混用。

如果用DTrace来调试C++程序,函数名要使用mangle过的符号,因为DTrace不认识C++(mdb也是这样)。想得到mangle过的符号可以通过nm -C <binary name> 得到。如果要跟踪函数的参数,第一个参数通常应该是arg1而不是arg0,因为C++中类成员函数映射成C代码后第一个参数一般都是this指针。比如下面的DTrace脚本跟踪某个函数的调用过程:

#!/usr/sbin/dtrace -qFs
pid$target::__xxxxxx_:entry
{
self->traced=1;
printf("thread #%d is doing %s \n", tid, copyinstr(arg1)); /* suppose arg1 type is char* */
}
pid$target::__xxxxxx_:return
{
self->traced=0;
}
pid$target:::entry
/self->traced/
{
printf("thread #%d is calling %s .\n", tid, probefunc);
}

pid$target:::return
/self->traced/
{
printf("thread #%d returns from %s .\n", tid, probefunc);
}

 

http://developers.sun.com.cn/blog/lxf/date/20080820 星期三 八月 20, 2008

Opensolaris 2008.05 Getting Started 中文版

入门指南已经有10种语言了。

http://dlc.sun.com/osol/g11n/content/IPS/zh/partition.html

http://www.opensolaris.com/learn/#localized

http://developers.sun.com.cn/blog/lxf/date/20080729 星期二 七月 29, 2008

为什么opensolaris 2008.05关于系统调用的手册页都是空的

man -s 2 open (你看到了什么?) 

这是我在内部问到的答案:

Short answer: 系统调用的手册页是第三方写的,其license不允许包含在opensolaris 2008.05里。

Long answer: 为什么Solaris, Solaris Community Express, Solaris Developer Express包含系统调用的手册页?因为分发这些软件的人需要签协议同意那些License条款。 Opensolaris 2008.05 允许任何人分发/镜像,而无需签署协议。所以不能包含那些文件。

这可苦了软件开发人员了:要么上网访问联机手册页,要么登录到另一台Solaris机器看系统调用的man page。

用Opensource快把人培养成律师了:-) 一个小测验:假设opensolaris不放弃CDDL,Linux kernel不放弃GPL,如果要让Linux kernel 包含ZFS支持(不是User-level的),opensolaris和linux kernel需要怎样修改各自的License?


http://developers.sun.com.cn/blog/lxf/date/20080709 星期三 七月 09, 2008

如何恢复被意外搞坏的opensolaris 2008.05

最近有些朋友升级了一些和系统有关的包导致系统无法启动,而Opensolaris 2008.05的启动菜单里没有fail-safe选项。解决办法:

  • 用opensolaris 2008.05 Live CD启动
  • su - 密码是opensolaris 
  • 把硬盘上的opensolaris挂上来 zpool import -f rpool 
  • 如果要改grub的配置,到/rpool/boot/grub/menu.lst去改
  • 如果你需要更新boot-archive

mkdir /ttt
mount -F zfs rpool/ROOT/opensolaris /ttt  (需要手工mount根分区)
cp /etc/zfs/zpool.cache /ttt/etc/zfs/zpool.cache
bootadm update-archive -R /ttt
如果还要更新grub,则/ttt/boot/solaris/bin/update_grub -R /ttt
umount /ttt
reboot

  • 如果更新boot-archive还救不了你,幸好我们用的是ZFS,可以用快照恢复。如果自己没有做过快照,opensolaris 2008.05缺省安装后自动做了一份快照。快照并不是单独占用存储空间,所以不用担心容量问题。用这个快照恢复:
    zfs rollback rpool/ROOT/opensolaris@install
    reboot 

注意:

  • opensolaris IPS server上的包的版本会经常更新,升级与系统有关的包比如SUNWtoo要小心一点,否则系统可能无法启动。另外,现在有些软件包的依赖关系有问题,会自动升级一些系统包。
  • 升级包或安装以前没装过的新版本的包,最好做个快照。快照是瞬间生成的,不用担心时间。



http://developers.sun.com.cn/blog/lxf/date/20080624 星期二 六月 24, 2008

SSD,你准备好了吗?

磁盘(HDD)的存取速度增长越来越跟不上处理器的速度增长。也许人们已经习惯了一个机械设备和高速的电子设备在一起工作,但是整个系统的性能越来越拖累于慢速的磁盘,即使是15K RPM FC Disk。虽然可以通过增加内存缓存一些数据来提高数据存取性能,但是存储容量的增长速度远高于内存容量的增长。

SSD(Solid State Disk)并不是新概念,只是以前有一些技术问题没有解决而没有大规模地商用。一切都在变化,如今SSD的商用时代已经到来了。对比一下当前SSD和HDD的性能:

HDD: 180 write IOPS, 320 read IOPS    

SSD:7000 write IOPS, 35000 IOPS

也许HDD将来的优势只有容量了。 

特别是 ZFS更为SSD做了优化,可以把SSD作为文件系统的二级缓存(L2 ARC)以及ZIL(ZFS Intent Log)以大幅提高性能。在当前的过渡期,服务器内混合使用SSD和HDD不失为一种明智的选择。也就是说,从某个角度讲,把SSD作为HDD的cache以提高系统的I/O处理速度。

今年四月在上海举行的Intel IDF大会上,ZFS的主要设计师之一Bill Moore到场做了一个专题讲座,讲的就是这个话题。演讲资料可以从这里下载, 或访问 https://intel.wingateweb.com/SHchina/catalog/controller/catalog ,然后在网页中搜索 Bill Moore。

真是巧合,我写完这篇博客后,发现Jonathon博客中文版最新一篇也在讲同样的话题,而且他的论述更精辟。强烈推荐各位去读一下:http://blogs.sun.com/jonathan_zh/date/20080620

 


 

ZFS文件系统的性能调优

写了篇文章,虽然是为别的目的写的,但主要内容讲的是ZFS的性能分析。希望大家提出宝贵意见。下载

http://developers.sun.com.cn/blog/lxf/date/20080615 星期日 六月 15, 2008

《Solaris Application Programming》

我终于把这本书看完了。相当不错。作者是在Sun负责编译器性能的lead。这本书对于Solaris上的开发者和性能调优者非常有帮助。作者的blog上也有相当多有用的信息,很好记:http://blogs.sun.com/d/  强烈推荐。

-Xinfeng 


http://developers.sun.com.cn/blog/lxf/date/20080517 星期六 五月 17, 2008

opensolaris 2008.05 试用记

这么多年没有一种x86平台上的桌面操作系统能令我满意。[Read More]