Linux

Linux 2.6 32 位 + BIGMEM 與 Linux 2.6 64 位?

  • November 19, 2010

有人告訴我,帶有 bigmem 核心的 32 位 Linux(當系統具有 >=4GB RAM 時)將比64 位 Linux執行得更好。

我很想為你定義“表現比”好,但不幸的是,告訴我這個的人沒有詳細說明/證明……因此這篇文章!

這有什麼道理嗎?在什麼情況下這是真的?

謝謝

在 x86 處理器中,64 位程式碼有兩種幫助:

  • 更大的地址讓您可以直接訪問更多記憶體(僅與管理大型數據集的程序相關)
  • 更多的寄存器可能會讓編譯器減少對緊湊變數的記憶體訪問(輕微的額外優化,除了高度優化的程式碼的緊湊循環外不明顯)。

並有以下缺點:

  • 越來越多的寄存器意味著在每次上下文切換時要保存/恢復的狀態更多。
  • 更大的指針意味著更多的 RAM 使用和更大的結構,更多的數據要讀/寫。

因此,在很多情況下,兩全其美的是 64 位作業系統和 32 位程序:

  • 64 位作業系統可以處理大量 RAM,既可以容納許多程序,也可以用於大記憶體
  • 32 位應用程序的每個程序限制為 2 或 3 GB RAM,但對於絕大多數任務來說已經足夠了。
  • 無論 32 位任務的 RAM 位於 64 位空間中的哪個位置,它都只需要 32 位指針即可訪問其記憶體,因此所有指針和資料結構仍然是較小的 32 位品種。
  • 32 位任務(程序或執行緒)只需保存/恢復 32 位 x86 中可用的少數小寄存器,64 位 Linux 調度程序可以很好地處理這種情況。

但是,總的來說,優勢很少被注意到(只是猜測它會遠低於 5%),所以只要到處使用 64 位,讓它變得更簡單。

我肯定會選擇 32-on-64 的唯一情況是在進行 OpenVZ 類隔離時。這樣,每個分區所有者都會充分利用他可以訪問的有限 RAM。

仍然,我不知道 PAE 比 64 位有什麼優勢(甚至不是小指針,因為每個 PAE 指針都有一個 32 位偏移量和一個額外的(最多 32 位)“開始”(記住分段記憶體8086 的?多麼臃腫啊!)

引用自:https://serverfault.com/questions/203726