Linux
如何關閉單個程序的塊記憶體?
我有一個帶有許多磁碟綁定服務的大系統。它們在使用塊記憶體的情況下工作得更好。
除此之外,還有一些備份過程正在執行。
我知道他們應該如何使用塊記憶體:他們絕對不應該。
通過使用命令將塊設備複製到另一個來進行備份
buffer
。它需要任何記憶體的機率實際上為零。但是,如果備份執行,它會使普通服務變得更糟。降低
ionice
它並沒有太大幫助 - 問題不在於它的 IO 優先級,而是它用不需要的數據覆蓋塊記憶體。我可以以某種方式將此
buffer
命令設置為根本不使用塊記憶體嗎?如果重要,它會將 lvm 卷複製到另一個卷。
我找到了
nocache
完成任務的工具。一般來說,這在 Linux 中是不可能的:沒有這樣的選項、標誌或任何可以為程序設置的東西。
但是,該
posix_fadvise(...)
呼叫可用於建議塊/緩衝區高速記憶體子系統,當預期連續的讀/寫操作時。APOSIX_FADV_DONTNEED
向核心提供“額外資訊”,它不應該記憶體它們,因為它不會在不久的將來被重新讀取。
nocache``posix_fadvise(...)
通過LD_PRELOAD
環境變數注入的共享庫來攔截所有重要的文件操作。顧名思義,這只是一個建議;但是我的實驗顯示了巨大的性能改進(實際上,其他重要任務可以與後台備份並行執行,而最終使用者的性能不會明顯下降)。