Skip to content

[Linux] 將資料儲存在 RAM 當中提昇讀取速度

Last Updated on 2021-06-28 by Clay

最近在進行深度學習的模型訓練時遇到了瓶頸,最主要是『速度』的方面 —— 訓練的速度實在是快不起來。

上網找了找大家的分享,意外看見了這個將檔案放置於『記憶體』當中,用來提高程式讀取速度的方法。這個方法聽起來實在很有意思,就研究了一下。

下面列出了我實際測試的結果,大致上分成『寫入』與『讀取』兩個部份,分別在 RAM、SSD、HDD 上進行測試。


掛載 RAM 硬碟

其實只需要透過 "mount" 指令,便可以輕鬆地建立 RAM 的硬碟。

mkdir /tmp/memory
mount -t tmpfs -o size=1G tmpfs /tmp/memory/

這樣一來,我就將 1GB 的記憶體掛載在了我所建立的 "memory" 資料夾中。接下來,我們只需要將資料放在 "/tmp/memory/" 路徑底下,就能享受 RAM 的高速度了。

為了確認是否真的有成功掛載,還是只用指令看一下比較好。

df -h

Output:

如果是剛掛載上去的,這個磁碟理應是全空著的。不過目前我將測試的檔案放在其中了,所以已經使用一部分了。


寫入速度的比較

接下來開始測試資料放在 RAM 中究竟有多快了。我有一份叫做 "test.json" 的檔案,使用 "du" 指令查看其大小:

du -m test.json

Output:

然後我分別使用 "cp" 指令,將這份檔案檔案從 HDD 移動到 RAM、SSD、另一塊 HDD。

他們速度分別為:

RAMSSDHDD
5.308s5.781s7.025s

其實 RAM 好像只有比 SSD 快一點而已,只有 HDD 明顯比較慢一些。順帶一提,為了不要讓 Cache 影響我寫入檔案的速度,我還特地使用了以下指令清理了 Cache。

sudo -i
sync; echo 3 > /proc/sys/vm/drop_caches

不知道,是否是我的實驗方法不對?


讀取速度

讀取速度的測試,我是使用 Python 程式來讀取剛剛的 "test.json" 檔。同樣,每次讀取完我都有清除 Cache。

RAMSSDHDD
14.876s14.636s14.883s

這個結果真的太糟糕了......沒有我原先想像的那麼好用。

不知道是不是我哪邊的操作方法有問題呢?我想,我可能還得研究一陣子。


卸載 RAM 硬碟

其實要移除掉也是非常簡單的,還記得剛才我掛載的路徑 "/tmp/memory" 嗎?

sudo umount /tmp/memory

只要像這樣移除掉即可。

話又說回來,其實在 Linux 當中 Page Cache 都做得很好,如無特別需求,其實似乎不用特地建立 RAM Disk 就能運行得挺流暢的了。以上是一點個人感想。


References

Tags:

Leave a Reply