我想問一下關於內存buff/cache的問題
假設我們有帶有磁碟的 Linux 機器,以及一些將資料寫入磁碟 /var/data 的應用程式
根據我的理解,當應用程式將資料寫入磁碟時,該資料也將保存在記憶體快取中
一段時間後,X時間後應用程式資料將從記憶體快取中刪除
是否可以強制將特定資料保存在記憶體快取上而不是磁碟上?
我的問題的原因 - 是因為我們想要快速讀/寫,而磁碟對此非常慢
答案1
保存在記憶體快取中
確實不存在這樣的事情。你從這開始增益/快取:
]# free -g
total used free shared buff/cache available
Mem: 7 0 3 0 3 6
Swap: 0 0 0
這給出了目前用作緩衝區或高速緩存的 RAM 量。核心這樣做正是因為磁碟速度很慢,而且通常(如圖所示)有足夠的 RAM。
如果您想為某些檔案保留一部分 RAM,您可以將它們放入 RAM 磁碟 ( mount -t tmpfs ...
)。但隨後您必須記住將它們複製回磁碟。
答案2
我認為您可能對記憶體層次結構的工作原理有誤解。層次結構從最接近 CPU/最快到最慢:
CPU暫存器 > 高速緩衝記憶體 > RAM/主記憶體 > 磁碟
快取位於 CPU 和主記憶體之間,存取速度比主存快。通常,當存取記憶體位置時,附近的資料區塊(即位址範圍區塊的副本)會複製到快取中。然後,下次訪問記憶體位置時,首先檢查高速緩存,查看資料是否已經存在,並且無需訪問主記憶體即可節省時間。
所以,我認為你的問題不太有意義。主記憶體和磁碟之間通常沒有中間儲存或快取。目前使用的資料儲存在 RAM 中,這是儲存和存取資料的最有效方式。如果您想保存它以供以後使用,請在電腦關閉後將其複製到磁碟(因為這是您唯一的選擇)。如果您想立即快速存取數據,除非必須,否則您不想觸摸磁碟。
我不知道有什麼方法可以輕鬆地覆蓋快取管理並將某些內容儲存到快取中,但明確地不儲存到 RAM 中。通常已經有非常好的、有效率的系統來管理記憶體快取。
另外,我不相信 X 時間後資料會從快取中刪除。通常,它會被 CPU 想要存取的最新資料推出。