星期五 九月 12, 2008
Xinfeng Liu
- All
- Java & JES
- 杂谈
- Solaris
- 新闻
使用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);
}
Posted at 12:52上午 九月 12, 2008 by xinfeng liu in Solaris | Comments[0]
Opensolaris 2008.05 Getting Started 中文版
入门指南已经有10种语言了。
http://dlc.sun.com/osol/g11n/content/IPS/zh/partition.html
或
http://www.opensolaris.com/learn/#localized
Posted at 10:10下午 八月 20, 2008 by xinfeng liu in Solaris |
为什么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?
Posted at 07:27下午 七月 29, 2008 by xinfeng liu in Solaris |
如何恢复被意外搞坏的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要小心一点,否则系统可能无法启动。另外,现在有些软件包的依赖关系有问题,会自动升级一些系统包。
- 升级包或安装以前没装过的新版本的包,最好做个快照。快照是瞬间生成的,不用担心时间。
Posted at 06:20上午 七月 09, 2008 by xinfeng liu in Solaris |
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
Posted at 08:13下午 六月 24, 2008 by xinfeng liu in Solaris |
ZFS文件系统的性能调优
写了篇文章,虽然是为别的目的写的,但主要内容讲的是ZFS的性能分析。希望大家提出宝贵意见。下载
Posted at 03:58上午 六月 24, 2008 by xinfeng liu in Solaris |
《Solaris Application Programming》
我终于把这本书看完了。相当不错。作者是在Sun负责编译器性能的lead。这本书对于Solaris上的开发者和性能调优者非常有帮助。作者的blog上也有相当多有用的信息,很好记:http://blogs.sun.com/d/ 强烈推荐。
-Xinfeng
Posted at 10:34下午 六月 15, 2008 by xinfeng liu in Solaris |
opensolaris 2008.05 试用记
这么多年没有一种x86平台上的桌面操作系统能令我满意。[Read More]
Posted at 08:11上午 五月 17, 2008 by xinfeng liu in Solaris |
