我在64位Linux中运行一些32位应用程序。我发现CPU使用率很高,并且在“顶部”输出窗口的“sy”上花费了3/4的CPU。我不明白为什么内核的CPU使用率如此之高 - 应用程序中没有太多的IO操作。
所以我的问题是:在64位Linux中运行32位应用程序的性能如何?例如,如果应用程序在32位Linux中占用10%的CPU,那么它会在相应的64位Linux中占用更多的CPU吗?操作系统是否使用某些软件方法来模拟应用程序的运行环境?
答案 0 :(得分:2)
在64位Linux中运行32位应用程序的性能如何?
我认为,表现相似。
例如,如果应用程序在32位Linux中占用10%的CPU,那么它会在相应的64位Linux中占用更多的CPU吗?
您应该分割用户和系统时间。
用户时间将非常相同(在CPU上运行相同的代码)
系统时间可能会更大一些,因为内核需要将来自用户空间的32位请求转换为64位(特别是在传递struct时,如readv
系统调用)。此外,内核应将CPU切换为32位“遗留”模式(较重switch_to
或上下文切换)。内核也应该以不同的方式创建页表。
但是,如果您的应用程序在系统调用上花费的时间很少并且进行少量系统调用,那么性能将会很好。
操作系统是否使用某些软件方法来模拟应用程序的运行环境?
不,几乎没有仿真(在x86-64 / x86,SPARC64 / 32,PowerPC64 / 32和其他使用_compat
技术的拱门的情况下)。 Linux内核只使用_compat
版本的系统调用处理程序将32位系统调用接口转换为内部格式。