[英]Window control for mmapped large file(linux, mmap)
映射大文件時如何控制RSS中的窗口? 現在讓我解釋一下我的意思。 例如,我們有一個超過 RAM 數倍的大文件,我們為多個進程進行共享內存映射,如果我們訪問某個虛擬地址位於此映射內存中的對象並捕獲頁面錯誤,然后從磁盤讀取,子問題是,如果我們不再使用給定的對象,是否會發生相反的情況? 如果像LRU一樣發生這種情況,那么LRU的大小是多少,如何控制呢? 這種情況下如何涉及頁面緩存?
這是 80 GB tar 文件的測試實例(2 線程,8 GB RAM)的 RSS 圖。 這個 3800 MB 的值是從哪里來的,並且當我在文件被映射后運行它時保持穩定? 我如何控制它(或建議內核控制它)?
只要您不采取顯式操作將頁面鎖定在內存中,它們最終就會自動換回。 內核基本上使用內存壓力試探法來決定將多少物理內存用於換入頁面,並根據需要經常重新平衡。
如果您想在控制此過程中發揮更積極的作用,請查看madvise()
系統調用。
這允許您調整您的 mmap 的分頁算法,操作如下:
MADV_FREE
(自 Linux 4.5 起)
MADV_COLD
(自 Linux 5.4 起)
MADV_SEQUENTIAL
MADV_WILLNEED
MADV_DONTNEED
在創建mmap
后發出madvise(MADV_SEQUENTIAL)
可能足以獲得可接受的行為。 如果沒有,您還可以在遍歷頁面組時穿插一些MADV_WILLNEED
/ MADV_DONTNEED
訪問提示(和/或MADV_FREE
/ MADV_COLD
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.