在 Linux 上已經有內建一些方法,可以很方便地將記憶體分配來當作檔案目錄來使用。
要在 Linux 上建立 RAM Disk 內建有三種方式:ramdisk
、ramfs
、tmpfs
,那我們一一來介紹,我的硬體環境是 GCP 上 N1-Standard-1 的 VM。
ramdisk
ramdisk 在一般常見的 Linux 發行版本大都是沒有的,必須要自己建置 Linux 的 Kernel 把 ramdisk 加進來才有得用,它預設會在 /dev
底下掛載 16 個 RAM Disk,使用者可以自行挑選要使用哪一個 RAM Disk,而且使用前還得先進行格式化,預設的 RAM Disk 大小都不大,想要調整的話,可以透過修改 GRUB 來設定。
由於 ramdisk 不是那麼方便使用,所以我們不在它上面著墨,把重點放在後面的 ramfs 及 tmpfs。
ramfs
ramfs 與 ramdisk 不同的是,ramfs 是虛擬的檔案系統,掛載起來就可以直接使用,不像 ramdisk 還要先格式化,建立的方式也很簡單,首先建立一個目錄,在哪都無所謂,一般都是建在 /mnt
底下。
sudo mkdir /mnt/ramfs
接著將 ramfs 掛載到剛剛建的目錄
sudo mount -t ramfs -o mode=0777 ramfs /mnt/ramfs
- -t ramfs:指定 vfstype 為 ramfs
- -o mode=0777:設定權限為 0777
- ramfs:指定 device 為 ramfs
掛載好了之後,就可以開始使用了,我用 sysbench 對 ramfs 進行隨機讀寫的測試,效能提升了 10 倍左右。
有兩件很重要的事要注意:
- ramfs 的大小是無法限制的,記憶體吃到滿為止。
- ramfs 在 df 指令中是看不到的。
tmpfs
由於 ramfs 存在著一些缺點,所以要在 Linux 上建立 RAM Disk 大都推薦使用 tmpfs,tmpfs 跟 ramfs 一樣是虛擬的檔案系統,但是它可以限制大小,而且它會使用到 SWAP 的空間,就不用太擔心 tmpfs 佔用的空間太大而吃滿記憶體,還有用 df 指令是可以看得到 tmpfs 的。
用 tmpfs 建立 RAM Disk 的過程跟 ramfs 是一樣的,一樣先建立目錄。
sudo mkdir /mnt/tmpfs
再來就是將 tmpfs 掛載到剛剛建立的目錄
sudo mount -t tmpfs -o size=300M,mode=0777 tmpfs /mnt/tmpfs
一樣用 sysbench 對 tmpfs 做隨機讀寫的測試,可以看到效能是差不多的。
用 df 指令也能夠看得到 tmpfs 的資訊
而且當空間不足以寫入檔案時,會出現 No space left on device
訊息。
開機時自動掛載 RAM Disk
掛載的 RAM Disk 預設都會在重新開機時消失,所以我們要修改 /etc/fstab 檔案,在開機時將 RAM Disk 掛載起來。
tmpfs /mnt/tmpfs tmpfs size=300M,mode=0777 0 0
這樣我們就保證都存取得到 RAM Disk,以上就提供給有需要在 Linux 建立 RAM Disk 的朋友參考。
參考資料
資料來源: https://dotblogs.com.tw/supershowwei/2020/09/28/091619
沒有留言:
張貼留言