Linux - 將磁碟用作 RAM
我有一個虛擬機,其中有一個消耗大量記憶體(~200GB)的程序。某種記憶體數據庫。我需要在標準筆記型電腦上執行它,我無法重新編譯它或查看程式碼。
我用
pri=32767
in/etc/fstab
和vm.swappiness=100
in添加了 256GB 的交換空間,/etc/sysctl.conf
但它載入數據庫的速度不夠快(24 小時後卡在 4GB;似乎不再增長)。(編輯:我複製了機器,將 RAM 從 256GB 更改為 4GB,添加了硬碟,將其格式化為 ext4 並創建了大小為 256GB 的交換文件(dd -> mkswap -> swapon …))
為什麼停止增長?
我懷疑緩慢是由於它是交換空間造成的,因此作業系統正忙於“交換”(載入 -> 沒有足夠的空間 -> 決定交換什麼……)。
我正在尋找一種“添加更多記憶體”但讓作業系統將其視為普通記憶體的方法。或者我的交換配置錯誤?
我知道這會損害性能,但我可以接受。
虛擬機是 CentOS 6。
查看http://www.corsair.com/en-us/blog/2015/september/ddr3_vs_ddr4_generational,記憶體頻寬在 4 GB / s 左右(文章有點老,但讓我們使用這個數字作為參考)寫入和讀取。
然後,對於硬碟,順序操作的頻寬大約為 100 MB/s ( http://www.buildcomputers.net/hard-disk-speed.html )。對於隨機訪問,頻寬要小得多。
因此,即使軟體以順序方式訪問記憶體,RAM 也會快 40 倍。但是,軟體的記憶體訪問很可能是非常隨機的,到處都是小塊,這使得 RAM 的總體性能要高得多。
然後是交換實際如何工作的問題。處理器訪問數據的每個操作都必須使用 RAM 來儲存數據。如果數據不在記憶體中,則將 RAM 的某些部分換出到 HDD,並將所需部分從 HDD 讀取到記憶體中。當 RAM 中有太多“熱”數據時,會不斷進行交換,這會導致您描述的情況。
處理器不可能直接將HDD用作RAM,因為定址和介面完全不同。