2026年2月13日 星期五

虛擬記憶體:zRAM

  虛擬記憶體是一個常見且相對必要的技術,在以前實體記憶體匱乏的年代,有人想到利用硬碟來模擬記憶體以增加可用的記憶體(此即爲SWAP),雖然會減低效能且不是萬用的,但至少保證了軟體可以持續運作而不易崩潰。現在爲何還需要虛擬記憶體?如果你的電腦實體記憶體容量不大(<=4 GB),沒有虛擬記憶體會容易使得電腦當機,因為現在的軟體、網頁會耗費不少的記憶體;根據我的經驗,非常穩定的Windows 7關閉虛擬記憶體會面臨不穩定,這似乎是Windows的特性——至少得有一定程度的虛擬記憶體;其實虛擬記憶體在現代操作系統最大的有感用處是增加電腦的反應時間,當實體記憶體即將用罄時,利用虛擬記憶體作爲緩衝,以免電腦崩潰、來得及殺掉進程來換取更多可用記憶體、將不常用的進程移到虛擬記憶體以騰出空間給其他程序……。我將介紹如何在Debian上使用zRAM+SWAP。

 

  爲何選擇zRAM+SWAP?先說一下zRAM,主要是在實體記憶體割出一個區塊來作爲虛擬記憶體,我們可以將實體記憶體的資料壓縮後放入zRAM,真的放不下在放入SWAP,這是本次的選擇zRAM+SWAP的理由。目前Fedora是預設使用zRAM,且不好關掉,如果你的實體記憶體不是很大,我會推薦使用zSWAP。其實zRAM有兩種實現方式,一種是使用systemd,另一種是使用zram-tools(Debian系列常用)。如果不知道,我是建議可以先從zram-tools下手,因為步驟很簡單。 

zram-tools 

  1. 安裝zram-tools

    sudo apt install zram-tools
     
  2. 編輯/etc/default/zramswap 

    #呼叫nano編輯器
    sudo nano /etc/default/zramswap


    #進入nano編輯器後,設定下列參數
    ALGO=zstd             #設定壓縮方式
    PERCENT=60        #限制zram至多占用多少比例的實體記憶體
    PRIORITY=100     
    # 設定優先級

     
  3. 啓動服務

    sudo systemctl restart zramswap 

systemd-zram-generator 

  1. 安裝systemd-zram-generator 

    sudo apt install systemd-zram-generator

  2. 編輯配置文件 

    sudo nano /etc/systemd/zram-generator.conf 

  3. 設定參數 

    [zram0]
    #單位是MiB。也可以用ram和分數表示,例如:ram / 2。還支持數學的邏輯表達方式,就例如:min(ram / 2 , 2048)是指二者取最小者
    zram-size = 4096   
    compression-algorithm = zstd    #設定壓縮方式,推薦zstd
    swap-priority= 100    #設定優先級,預設是100


  4. 啓動相關服務

    #執行下列命令使得zram0套用手動的設定
    sudo systemctl daemon-reload


    #啓動對應的zRAM
    sudo systemctl start /dev/zram0(此時將N換上你步驟3的中括號的值,預設是0)

  5. 使用zramctl來確認是否有正確的啓用,理論上會得到下列的輸出結果

    NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
    /dev/zram0 lz4             4G   4K   69B   20K         [SWAP]

設定SWAP 

  前面我們設定完zRAM後,我們現在來設定SWAP作爲虛擬記憶體的後盾。我預計是使用4GB的zRAM+4GB的SWAP,我們前面設定好zRAM的優先值(值是100),現在來設定SWAP,我們因為想要先用zRAM再用SWAP,因此我們只要把SWAP的優先值設定小於100即可(我就設爲60) 

  1. 建立交換文件(類似Windows的pagefiles) 

    #在根目錄下建立swapfile,大小是4GB
    sudo mkswap -U clear --size 4G --file /swapfile


    #啓動swapfile
    sudo swapon  
    --priority 60 /swapfile 

  2. 編輯/etc/fstab

    #啓動編輯器
    sudo nano /etc/fstab


    #添加下列參數
    /swapfile none swap defaults,pri=60 0 0



  3. 使用free -h會發現共有8GB的虛擬記憶體

                   total        used        free      shared  buff/cache   available
    Mem:            15Gi       4.0Gi        10Gi       1.0Gi       2.6Gi        11Gi
    Swap:          8.0Gi          0B       8.0Gi

  4. 使用swapon會得到下列結果

    NAME       TYPE      SIZE USED PRIO
    /dev/zram0 partition   4G   0B  100
    /swapfile  file        4G   0B   60

參考資料 

沒有留言:

張貼留言