[料理佳餚] 在 Linux 上建立 RAM Disk

上一篇文章有介紹到在 Windows Server 建立 RAM Disk 來用,這篇文章要改換在 Linux 系統上建立 RAM Disk,沒想到意外地簡單,在 Linux 上已經有內建一些方法,可以很方便地將記憶體分配來當作檔案目錄來使用。

要在 Linux 上建立 RAM Disk 內建有三種方式:ramdiskramfstmpfs,那我們一一來介紹,我的硬體環境是 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 倍左右。

有兩件很重要的事要注意:
  1. ramfs 的大小是無法限制的,記憶體吃到滿為止。
  2. 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 的朋友參考。

參考資料

C# 指南 ASP.NET 教學 ASP.NET MVC 指引
Azure SQL Database 教學 SQL Server 教學 Xamarin.Forms 教學