对于32位内核,PAE和非PAE的优缺点是什么?

жҲ‘жӯЈеңЁдҪҝз”ЁUbuntu 12.04 32дҪҚж“ҚдҪңзі»з»ҹгҖӮжҲ‘зҡ„еҶ…ж ёжҳҜPAEеҶ…ж ёгҖӮжҲ‘зҹҘйҒ“иҝҷдәӣеҶ…ж ёйҖӮз”ЁдәҺе…·жңү4GB RAMзҡ„32дҪҚж“ҚдҪңзі»з»ҹпјҢд»ҘеҲ©з”Ёе…ЁйғЁ4GB RAMгҖӮ
жҲ‘зҡ„зі»з»ҹжҳҜ32дҪҚзі»з»ҹпјҢжүҖд»ҘжҲ‘и®ӨдёәжҲ‘дёҚйңҖиҰҒе®ғ们гҖӮеҰӮжһңжҲ‘继з»ӯиҝҗиЎҢPAEеҶ…ж ёпјҢжҲ‘дјҡжңүд»Җд№ҲдјҳеҠҝе’ҢеҠЈеҠҝе‘ўпјҹ
raja@badfox:~$ uname -a
Linux badfox 3.2.0-24-generic-pae #39-Ubuntu SMP Mon May 21 18:54:21 UTC 2012 i686 i686 i386 GNU/Linux

3PAE允许32位系统使用超过3.2GB的RAM。如果你的RAM较少,或者你有一个64位系统,你就不需要它了。我对它没有任何问题的了解。 - Marty Fried
@EliahKagan 我的系统是32位的,我的操作系统也是32位的,但我的内核是PAE的。那么,如果我继续使用PAE内核,有什么优点和缺点呢? - Raja G
1主要问题是:你的系统有多少RAM?PAE的优点在于它允许你的32位操作系统访问超过3.2GB的RAM。这就是它存在的原因。64位操作系统已经可以访问更多的内存,所以不需要任何帮助。 - Marty Fried
@EliahKagan:谢谢,但我觉得izx的回答可能会超越我所能写的任何东西。:) 我没有将它作为答案,因为我不确定有什么缺点,只是它们并不大,并且从未困扰过我。但你可能是对的,在这种情况下,简单的答案可能是最好的。 - Marty Fried
3个回答

简短回答:如果可以的话,请选择64位系统,它比PAE/non-PAE 32位系统更快;如果不行的话,non-PAE系统可能比PAE系统快1-2%。
理论上,PAE相对于非PAE有一点点的额外开销...
PAE的一个重要优势是允许32位处理器/系统使用超过4GB的RAM。
但是这需要比非PAE稍微多一些开销,可能会导致性能稍微下降。
以下是一个非常简单的解释:在非PAE模式下,32位CPU必须查找(访问)两个表来访问物理内存地址;而在PAE模式下,它必须查找三个表来完成这个操作。额外的一次查找需要一些(非常小的)额外时间,从而增加了开销。
本答案末尾有两张图片来自Wikipedia PAE article,用于说明上述观点。
NX/XD位:PAE内核还支持64位处理器上的No-eXecute/eXecute-Disable位,这可以帮助防止某些类型的病毒/恶意攻击(缓冲区溢出),但在选择Ubuntu的32位内核时,我认为这并不重要。
...但在实际操作中,这种额外开销可以忽略不计(几乎没有)...
Phoronix多年来进行了许多测试,结果显示,在4GB或更少的系统上,PAE内核可能比非PAE内核慢最多约5%。这仅适用于特定的测试应用程序;通常的差异小于1%。 - 12.04 LTS - 8 GB system!的测试结果 - 11.04 - 4 and 8GB systems的测试结果
而64位几乎总是优于32位内核 - 去尝试吧!
这些Phoronix基准测试告诉你的唯一一件事就是64位是王者,即使你只有不到4GB的内存(虽然我建议最低1GB)。 如果你有一颗64位处理器——通常是2006年之后的任何处理器,除了Intel Atom——使用32位内核可能会导致性能下降!
比较非PAE和PAE页面表访问:
1. 非PAE ![enter image description here](https://istack.dev59.com/jFD7g.webp)
2. PAE ![enter image description here](https://istack.dev59.com/e36gO.webp)

2所以,如果你的RAM小于4GB,你是说64位比32位更快吗?为什么呢?此外,您没有提到与32位软件的兼容性问题,这些软件可能尚未转换或在转换过程中存在错误。您认为这会成为一个问题吗?看起来好像曾经是个问题,但也许这已经成为过去了。 - Marty Fried
当然,上述评论有一点值得思考。 - Raja G
@MartyFried 有时候64位比32位更快,因为编译器在64位上做得更好。我不记得具体细节,所以也许有人可以详细说明一下,但我认为这与程序可以分配的最大连续内存块(甚至远少于2GiB/4Gib)有关。 - Eliah Kagan
2需要记住的其他事情是:(1)64位可能会更快,因为它使用了AMD64/EM64T指令集中添加的指令(而32位大多数程序都是编译为最低公共分母,最好是i686),以及(2)在内存少于4 GiB的机器上,64位可能会更快,因为RAM中的内存和交换到磁盘的内存都是每个程序的虚拟内存空间的一部分,并且该虚拟内存空间在32位系统上使用32位指针,在64位系统上使用64位指针。也许izx可以谈谈其中的一些问题。 - Eliah Kagan
感谢@MartyFried和Eliah的评论。我明天会详细更新答案,但这是要点(Eliah基本上说得对):1. “未转换”的32位二进制文件在64位上运行速度很快,但需要所有32位依赖项(以前的ia32-libs等)。2. 为32位编写但编译为64位的程序很可能会更快,程度不同,因为编译器可以利用AMD64架构中的某些功能(无论内存需求如何)。3. 为64位编写/优化的程序将充分利用它并且更快。 - ish
2@EliahKagan:你认为这个问题可能是一个很好的标准问题候选吗: "我有一台64位处理器但内存少于4GB。我应该选择三个内核中的哪一个?" - ish
感谢 @izx、Eliah Kagan 和 Marty Fried,关于它们能做什么和不能做什么的解释真是太棒了。 - Raja G
@izx:我认为这将是一个不错的话题。我有一台64位处理器,配备4GB的内存,在过去,由于一些孤立问题或者只支持32位的程序/驱动等,我一直避免使用64位版本。此外,Canonical在下载页面上始终推荐使用32位版本。作为一名退休的Windows程序员,我知道那些假设32位整数的程序所带来的问题,我也知道捕捉所有天真程序员错误有时候很困难,因此我一直在犹豫是否要选择64位,可能并没有太多好处。我还有更多问题,但这里不太适合讨论。 - Marty Fried
为什么Canonical总是推荐使用32位版本呢?(来自Marty) - rsjethani
@MartyFried x86_64在RAM小于4GB的系统上速度更快,原因在于此处提到的几点。一般来说,这是因为具有双寄存器数量和隐含的SSE2指令集。ARM64也是如此,因为它具有更多的寄存器和更新的指令集。 - phuclv


我在使用32位的12.04版本时遇到了严重的问题,特别是在使用某些软件(zfs文件系统)时,揭示了32位系统的vmalloc限制(我尝试过pae和非pae、vmalloc和depmod参数调整,甚至调试得快要绝望了...但没有成功)。 这可能是一个特例,但可以作为一个例子。32位内核中的某些深层限制是1GB,即使可用空间高达3.2GB。

如果您可以选择64位,请选择64位。 我非常确定您可以...我猜到现在,几乎任何正在运行的系统都支持64位CPU内核。稍后的“升级”有点困难(实际上意味着重新安装),即使dpkg和复制/ etc/和/ home/可能有助于新安装的运行...但仍然应该可以接受。 我认为使用64位不会有什么问题可担心,即使您由于某种原因被迫使用旧的/闭源的32位应用程序或某些库。