Linux

如何關閉單個程序的塊記憶體?

  • May 30, 2020

我有一個帶有許多磁碟綁定服務的大系統。它們在使用塊記憶體的情況下工作得更好。

除此之外,還有一些備份過程正在執行。

我知道他們應該如何使用塊記憶體:他們絕對不應該。

通過使用命令將塊設備複製到另一個來進行備份buffer。它需要任何記憶體的機率實際上為零。

但是,如果備份執行,它會使普通服務變得更糟。降低ionice它並沒有太大幫助 - 問題不在於它的 IO 優先級,而是它用不需要的數據覆蓋塊記憶體。

我可以以某種方式將此buffer命令設置為根本不使用塊記憶體嗎?

如果重要,它會將 lvm 卷複製到另一個卷。

我找到了nocache完成任務的工具。

一般來說,這在 Linux 中是不可能的:沒有這樣的選項、標誌或任何可以為程序設置的東西。

但是,該posix_fadvise(...)呼叫可用於建議塊/緩衝區高速記憶體子系統,當預期連續的讀/寫操作時。APOSIX_FADV_DONTNEED向核心提供“額外資訊”,它不應該記憶體它們,因為它不會在不久的將來被重新讀取。

nocache``posix_fadvise(...)通過LD_PRELOAD環境變數注入的共享庫來攔截所有重要的文件操作。

顧名思義,這只是一個建議;但是我的實驗顯示了巨大的性能改進(實際上,其他重要任務可以與後台備份並行執行,而最終使用者的性能不會明顯下降)。

引用自:https://unix.stackexchange.com/questions/572328