3
如果您嘗試使用Rust的任何內存分配機制(包括每晚alloc_api
)分配大量內存,則無法預填充頁表,即不能重新創建mmap的MAP_POPULATE選項。相反,當我需要分配大面積內存時,我只使用libc::mmap
。有沒有辦法預先爲操作系統的頁面表填充Rust分配?
除了循環使用Vec<usize>
或Vec<SomeTypeOfPageSize>
並觸發頁面錯誤之外,是否還有另一種方法在Rust中預填充頁表?
由於pointed out by @FlorianWeimer,有平臺特定的方式來做到這一點。我將掃描Rust RFC以查看新分配器API是否包含任何預填充選項。
出於好奇,你會看到這樣一個前人口增長是什麼樣的加速? – Shepmaster
@Shepmaster:作爲一名在HFT工作的人,我的典型回答是,吞吐量不如延遲的可預測性。單個頁面錯誤會導致延遲(在很多執行過程中)的尾部分佈,這是真正令人厭惡的,因爲在中位數上高達100倍/ 1000倍。 –
添加到@MatthieuM中。說它更多的是控制啓動期間的延遲。在程序的整個生命週期中,它沒有任何區別(假設你最終填充了頁表)。但是,當每秒執行數百萬個數據包時,任何涉及中斷/系統調用的阻塞行爲都非常昂貴,並且可能會導致數據包被丟棄,直到頁表被填充爲止。 –