哪些操作系统/发行版具有 64 位内核和 32 位用户空间?

哪些操作系统/发行版具有 64 位内核和 32 位用户空间?

哪些操作系统(或发行版)带有 64 位内核(x86_64、SPARC64、PPC64,以及其他?)和 32 位用户空间?

我希望所有小型用户空间程序(如 ls、cat 等)都是 32 位的,因为它们实际上不需要是 64 位的。但操作系统内核必须是 64 位才能使用 >=3 Gb 的 RAM。数据库程序(当使用大量内存时)也可以是 64 位的。

64 位模式可能会损害某些程序,使它们变得更大,占用(浪费)指针的内存(尤其是在列表、树等大型抽象数据类型中)。

64 位程序在每个指针上浪费了两倍内存。我不想要它。

问题不是“当 64 位处理器可用时是否需要 32 位程序”。问题是“哪些操作系统带有 32 位用户空间和 32/64 位模式下的内核”。此类操作系统的示例包括:Solaris/SPARC64、MACOSX/X86_64 (10.5)/...

答案1

目前的共识似乎是你毫无必要地担心。64 位很好,占用的空间不会比 32 位大很多。在我的几个系统上:

What    64-bit Size 32-bit Size
/bin/ls        101K         91K
/lib/libc.so   1.4M        1.3M
/usr/bin/php5  5.5M        5.1M

看吧——没那么重要。此外,64 位指针比你想象的更有用

答案2

我几乎可以相信,64 位内核和 32 位用户空间带给你的好处比讨论它所浪费的时间要多得多。当然,有时确实如此(我为 redis 服务器做了这件事)。

但是,如果你想开始混合 64 位和 32 位二进制文​​件(如你在评论中提到的那样),那你真的是在自找麻烦。这意味着很多库将在内存中映射两次,这将非常低效。没有发行版提供这种功能(即使 Debianmultiarch项目也不涵盖二进制文件)。

您提到“cat”、“dd”、“bash”甚至“gcc”等二进制文件不需要 64 位,但这些是使用 32 位指针而不是 64 位指针不会节省“任何东西”的典型程序示例。您在输入cat消息时所浪费的时间已经比您运行 32 位版本而不是 64 位版本所节省的时间要多。

更不用说x86_64不仅有更大的指针,还有两倍的通用寄存器,并且编译器可以对可用扩展做出与 一样多的假设i686(这比 还多i586,反过来又比 还多i486,反过来又比 还多i386)。性能最终可以明显提高。

如果您想同时使用 64 位和 32 位二进制文​​件,我个人的建议是运行(可能很少)指针密集型应用程序需要少于 4GB 的 RAM您真正关心的是其性能在 32 位chroot(或任何容器)中。除非它们在 Java 堆栈上运行,在这种情况下,您最好坚持使用 64 位用户空间并使用混合 JVM(带有压缩指针)。

如果您确实想要一个 64 位内核和一个 32 位用户空间,而不仅仅是因为您在某处读到它具有更好的性能,那么您可以随时从发行版的 64 位软件包中获取内核并将其挤压到 32 位安装中。

答案3

有一个新的X32 ABI正在开发中,其目标正是您正在寻找的:在 AMD64 硬件上实现 32 位用户空间和 64 位内核。X32 相对于传统 i386 ABI 的优势在于程序可以利用 AMD64 架构的其他功能,例如新指令和附加 CPU 寄存器。

但是,X32 尚未准备好使用,因此目前最好的选择是安装具有 64 位内核的 32 位发行版。例如,在 Debian 中,您需要安装linux-image-2.6-amd64(或者linux-image-amd64如果您正在运行 wheezy,它尚未发布,但使用 3.x 内核)。

答案4

我正在运行一个 64 位 KVM 服务器,它托管多个虚拟服务器(debian/woody - debian/sqeeze 和 Windows XP)。虚拟 linux 服务器有 32 位用户空间和一个 64 位内核(aptitude install linux-image-2.6-amd64)。

所以我认为您可以安装每个当前的 Linux 发行版并在其上运行 64 位内核 - 我对此设置没有任何问题。

相关内容