linux - 在 64 位 Linux 上运行 32 位应用程序的性能如何?

标签 linux linux-kernel 32bit-64bit

我在 64 位 Linux 中运行一些 32 位应用程序。我发现 CPU 使用率很高,3/4 的 CPU 花在了“top”输出窗口中的“sy”上。我不明白为什么这么多 CPU 使用率是用于内核——应用程序中没有太多的 IO 操作。

所以我的问题是:在 64 位 Linux 中运行 32 位应用程序的性能如何?比如app在32bit Linux下占用10%的CPU,那么在对应的64bit Linux下会不会占用更多的CPU? OS是否通过一些软件的方式来模拟应用程序的运行环境?

最佳答案

how about the performance for running 32bit app in 64bit Linux?

我认为,性能是相似的。

For example, if the app occupies 10% CPU in 32bit Linux, then will it occupy more CPU in the corresponding 64bit Linux?

您应该拆分用户和系统时间。

用户时间将非常相同(相同的代码在 CPU 上运行)

系统时间可能会更大一些,因为内核需要将来自用户空间的 32 位请求转换为 64 位(尤其是在传递结构时,如 readv 系统调用)。此外,内核应该将 CPU 切换到 32 位“传统”模式(更重的 switch_to 或上下文切换)。内核还应该以不同的方式创建页表。

但是,如果您的应用程序在系统调用上花费的时间很少并且执行少量系统调用,则性能会很好。

Does the OS use some software methods to emulate the running environment for applications?

不,几乎没有仿真(在 x86-64/x86、SPARC64/32、PowerPC64/32 和其他使用 _compat 技术的架构对的情况下)。 Linux 内核仅使用系统调用处理程序的 _compat 版本将 32 位系统调用接口(interface)转换为内部格式。

关于linux - 在 64 位 Linux 上运行 32 位应用程序的性能如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7176729/

相关文章:

c# - 创建 64 位应用程序

在 C 中将 32 位应用程序转换为 64 位应用程序

PHP 简单 Dom 解析器空白数组

linux - 在 Linux 上的何处放置/查找调试库?

使用较新的编译器编译 linux 2.6 内核模块

networking - Linux 网络堆栈 : adding protocols with an LKM and dev_add_pack

python - 在 Python 中复制和移动文件?

c++ - 无法在 NetBeans 的 Linux 中用 C++ 和 OpenGL (GLFW) 编译简单的源代码

linux - 内核模块编译和 KBUILD_NOPEDANTIC

c++ - 64 位 Windows - 我需要使用 IMAGE_NT_HEADERS64 吗?