![在 64 GB RAM 電腦上交換分割區大小以進行記憶體密集型工作](https://rvso.com/image/1414634/%E5%9C%A8%2064%20GB%20RAM%20%E9%9B%BB%E8%85%A6%E4%B8%8A%E4%BA%A4%E6%8F%9B%E5%88%86%E5%89%B2%E5%8D%80%E5%A4%A7%E5%B0%8F%E4%BB%A5%E9%80%B2%E8%A1%8C%E8%A8%98%E6%86%B6%E9%AB%94%E5%AF%86%E9%9B%86%E5%9E%8B%E5%B7%A5%E4%BD%9C.png)
我有 64 GB RAM 和 240 GB固態硬碟在我的計算機上,我將使用它進行記憶體密集型計算(機器學習、資料探勘等)。我在網路上找到的大多數建議都是關於 2-4-8 GB RAM 的計算機,他們建議 RAM 交換分割區大小為 2 倍(即 128 GB)。
建立 128 GB 的交換分割區是否合理?創建一個巨大的交換分區有什麼好處?
我是否正確理解,如果我用完實體 RAM:
- 如果我沒有交換,我會收到“內存不足”錯誤
- 如果我確實有交換,則一些 RAM 頁面將複製到交換分區,並且程式將繼續運行(儘管速度較慢)。
有些人說在 SSD 上進行交換不是一個好主意,因為它的讀/寫週期數量有限。使用交換會以多快的速度耗盡SSD讀取/寫入週期(據我所知,大約是50000寫入IOPS)?
我正在使用 Linux(烏班圖14.04(值得信賴的塔爾))。
現在設定 16 GB 的交換空間,因為它應該足夠了(例如,RedHat 建議 4 GB),而 16 GB 的磁碟空間實際上並不是什麼大問題。
答案1
您可能只需要少量的交換。當你有足夠的 RAM 來滿足電腦的典型工作集時(我很確定你這樣做),你只需要交換兩件事:
您需要交換來獲取可能永遠不會從 RAM 中訪問的信息,從而為磁碟快取釋放更多空間。許多應用程式在系統啟動時運行,並且永遠不會再次訪問。您不希望他們弄髒的任何頁面永遠卡在 RAM 中。所以你需要交換來持有它們。
您需要交換來覆蓋永遠不會被填滿的分配。該空間必須可用,即使它不會被使用。如果沒有它,即使系統有足夠的可用實體 RAM,系統也將不得不拒絕分配內存,因為它沒有足夠的後備存儲來允許一次使用所有分配的內存。
這些都不需要大量的交換。例如,16GB 應該綽綽有餘。目的不是讓您以犧牲速度為代價來運行更大的工作集。目的是讓您有效地使用 64GB,而不必用垃圾堵塞它或將其保留用於永遠不會發生的邊緣情況。
(我同意 Bert 的觀點,4GB 很可能就足夠了。)
答案2
然而,尺寸互換更多的是一門藝術而不是一門科學。這取決於機器的用途、擁有多少磁碟空間和記憶體以及其他因素。記住,您以後隨時可以添加更多交換。
對於當今系統的記憶體量來說,使用 2X 實體記憶體規則已經過時了。但不建議以零交換運行,除非您知道自己在做什麼。建議的 4 GB 是一個很好的起點。
答案3
在 Linux 上,您需要足夠的交換,以便可用的總虛擬記憶體(RAM + SWAP)足以滿足您要同時運行的所有進程及其最大虛擬佔用空間。
如果交換空間少於此值,或根本沒有交換空間,則會發生以下情況:系統在嘗試指派頁面時記憶體不足。但是,即使沒有交換,這仍然是一個軟故障,因為系統有大量的「受害者」頁面可以刪除以騰出空間:即所有檔案支援的記憶體映射的頁面,例如可執行檔和共享庫!
隨著您的系統需要越來越多的資料空間(無法換出),它將越來越多地撤出可執行程式碼(共享庫和可執行檔),從而導致可怕的抖動,因為工作集被修剪成越來越緊的集合。
交換空間透過為匿名(非檔案映射)頁面提供交換位置來緩解此問題:用於記憶體分配的頁面,以便可執行程式碼可以保留在記憶體中。
即便如此,如果您不經常執行記憶體密集型任務,您也許可以在大多數時間執行無交換,並在需要時手動設定交換檔案(而不是專用分割區)。若要動態建立交換文件,請成為 root 並:
dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768 # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile
當您不再需要它時:
swapoff /path/to/swapfile
rm /path/to/swapfile
筆記:
您絕對不需要配置至少與 RAM 一樣多的交換空間。這個經驗法則可以追溯到作業系統,由於交換的設計方式,這是一個硬性要求。
有一些方法可以讓 Linux 在沒有可用記憶體時發生嚴重故障,即透過操作這些 sysctl 條目的值:
vm.overcommit_memory vm.overcommit_ratio
答案4
您想要應用於電腦的工作負載需要一定量的記憶體才能運作(請記住在方程式中添加足夠的記憶體以處理峰值負載),並且您需要將電腦配置為至少具有該記憶體量。
現代作業系統提供虛擬記憶體作為實體記憶體和交換空間的組合,因此如果您需要的記憶體多於機器可用的內存,您可以必須增加足夠的交換空間來填補空白。即,如果您最大需要 80 GB,而機器有 64 GB,則需要 16 GB 交換空間。
通常,作業系統安裝程式會要求您建立初始交換區域(因為這是最簡單的,甚至允許安裝小型電腦),並且已經發現,典型 Unix 操作的一個好的經驗法則是將虛擬記憶體大小設為物理內存的三倍,因此通常建議這樣做。但是,您對使用模式有更多了解,因此可以根據需要進行更改。
如果您的記憶體壓力始終較小,那麼在沒有交換空間的情況下工作並沒有什麼問題。 Linux 將透明地使用任何未使用的記憶體作為磁碟快取。