Memory

dd與頁面記憶體的關係

  • July 10, 2017

我的伺服器的免費命令輸出目前如下:

# 免費 -m
記憶體的已用空閒共享緩衝區總數
電話:995 780 205 0 49 599
-/+ 緩衝區/記憶體:140 854
交換:0 0 0

我們知道 dd 應用程序通常使用頁面記憶體來加速文件訪問。

發出命令後:

dd if=/dev/zero of=2.txt bs=1M count=10

下面的輸出顯示頁面記憶體增加了10M左右。

# 免費 -m
記憶體的已用空閒共享緩衝區總數
電話:995 790 215 0 49 599
-/+ 緩衝區/記憶體:140 854
交換:0 0

前面的輸出是正常的。

然後我跑了

同步

將頁面記憶體中的內容再次同步到硬碟的命令

免費-m

命令。

沒有任何改變如下。是否與回寫機制有關?這規定儘管執行了同步命令,但不會回收頁面記憶體,除非這部分頁面記憶體正在被更改。

或者在核心參數 /proc/sys/vm/drop_caches 被修改之前,頁面記憶體根本不會被回收?

# 免費 -m
記憶體的已用空閒共享緩衝區總數
記憶體:995 790 205 0 49 599
-/+ 緩衝區/記憶體:140 854
交換:0 0 0

如果是這樣,“free -m”中的記憶體可以達到的最大大小是多少?是否有任何核心參數控制它?謝謝。

dd 不直接使用頁面記憶體,它執行自動記憶體的 I/O。

僅僅因為送出了某些內容而刪除記憶體是低效的。下一次讀取需要來自底層設備,這可能比 RAM 慢數百到數千倍。

預計記憶體將使用幾乎所有未使用的 RAM。算作空閒記憶體,如果程序分配記憶體,記憶體是最先被回收的。

不要在生產操作中使用 /proc/sys/vm/drop_caches,它沒有幫助。來自文件/sysctl/vm.txt

該文件不是控制各種核心記憶體(inode、dentries、pagecache 等)增長的方法,當系統其他地方需要記憶體時,核心會自動回收這些對象。

使用此文件可能會導致性能問題。由於它會丟棄記憶體的對象,因此重新創建丟棄的對象可能會花費大量的 I/O 和 CPU,尤其是在它們被大量使用的情況下。因此,不建議在測試或調試環境之外使用。

vm 的 sysctl 文件確實列出了一些調整參數來控制虛擬記憶體子系統,包括臟頁行為和最小空閒。在您詳細了解這樣做的好處之前,我不建議您更改它們。在此之前使用預設或預定義的tuned配置文件。

引用自:https://serverfault.com/questions/860027