Linux
Linux 2.6 32 位 + BIGMEM 與 Linux 2.6 64 位?
有人告訴我,帶有 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 的?多麼臃腫啊!)