/dev/shm 比 /tmp 快嗎?

/dev/shm 比 /tmp 快嗎?

這個問題查詢是否使用/dev/shmor /tmp。在提供的答案中,總體印像是比寫入 RAM 而不是寫入磁碟/dev/shm更快。/tmp搜尋有關該主題的網路模糊地證實了這一印象。不幸的是,我無法找到可靠的來源,毫無疑問地顯示哪個性能更高,例如通過測量。

例如,引用第一個答案:

由於 RAM 明顯快於磁碟存儲,因此您可以使用 /dev/shm 而不是 /tmp 來提高效能,如果您的進程是 I/O 密集型並且大量使用臨時檔案。

連結的文章指出:

/dev/shm只不過是傳統共享記憶體概念的實作。它是在程式之間傳遞資料的有效方法。一個程式將創建一個記憶體部分,其他進程(如果允許)可以存取該記憶體部分。這將加快 Linux 上的速度。

這既沒有證實引用該網站的答案,也沒有比較/dev/shm與的性能/tmp。它只是對現狀的描述/dev/shm

儘管如此,有一個評論在第一個答案中,指出(截至今天):

使用 /dev/shm 不會提高效能。 /dev/shm 是由磁碟(交換)支援的記憶體(tmpfs)。 /var/tmp 是由磁碟(磁碟檔案系統)支援的記憶體(磁碟快取)。實際上,效能大致相同(tmpfs 有輕微優勢,但不足以影響)。 /tmp 可能是 tmpfs,也可能不是,這取決於管理員如何配置它。沒有充分的理由在腳本中使用 /dev/shm。

由於此評論仍然沒有受到質疑,並且其他答案和評論表明並非如此,所以問題仍然是是否/dev/shm更快/tmp

注意:我很清楚答案很可能是「視情況而定」。有關於 SU:SE 的一個問題關於使用哪個檔案系統/tmp。還有一個相關問題在SO

答案1

當你使用時,/dev/shm你並不是直接寫入RAM。它是一個臨時檔案系統檔案系統,臨時檔案系統將所有檔案保存在虛擬記憶體(作為 RAM 擴充的磁碟)中。

內核.org:

如果將其與 ramfs(這是建立 tmpfs 的範本)進行比較,您將獲得交換和限制檢查。另一個類似的東西是 RAM 磁碟 (/dev/ram*),它在實體 RAM 中模擬固定大小的硬碟,您必須在上面建立一個普通的檔案系統。 Ramdisk 無法交換,而且您無法調整它們的大小。

由於 tmpfs 完全存在於頁面快取和交換中,因此所有 tmpfs 頁面將在 /proc/meminfo 中顯示為“Shmem”,在 free(1) 中顯示為“Shared”。請注意,這些計數器還包括共享記憶體(shmem,請參閱 ipcs(1))。取得計數最可靠的方法是使用 df(1) 和 du(1)。

記憶體檔案系統是一個基於 RAM 的檔案系統:

Ramfs 是一個非常簡單的檔案系統,它將 Linux 的磁碟快取機制(頁面快取和 dentry 快取)匯出為基於 RAM 的可動態調整大小的檔案系統。

因此,回答您的問題,由於(/dev/shm 和 /tmp)都使用磁碟,因此效能沒有提升。

您可以透過以下範例驗證何時寫入 RAM:

mkdir /mnt/ram
mount -t ramfs -o size=2g ramfs /mnt/ram
# Create random file of 2GB
dd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc
# Check ram usage
free
cp /tmp/testfile /mnt/ram
# Check ram usage again
free

相關內容