哪些操作系统(或发行版)带有 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 位内核 - 我对此设置没有任何问题。