一台服务器上的程序,版本升级之后,零拷贝采集失效。经组长检查,确认函数库里零拷贝部分的代码与老版本的代码不一致。
老的调用方式是:
_syscall3(int, zcopy_check, int, index, void *, addr_info, void **, addr_list);
新的调用方式是:
#define zcopy_check(type1,type2,type3) syscall(4,__NR_zcopy_check,type1,type2,type3);
在网上搜索了一下,
_syscall3适用于Linux 2.6.18及以前版本,syscall适用于2.6.19及以后版本。出问题的服务器是2.6.9的。
参考文章:
Linux中应用程序如何使用系统调用syscall
关于linux系统调用,参考:
使用 Linux 系统调用的内核命令
http://www.ibm.com/developerworks/cn/linux/l-system-calls/
总结:
很多东西都在变化,破除一成不变的思维,与时俱进,居安思危。
阅读(436) | 评论(0) | 转发(0) |