簡體   English   中英

經常訪問文件映射的內存

[英]Frequently Accessing File Mapped Memory

頻繁訪問大文件映射內存(1〜2 GB)會導致性能下降嗎? (在一個緊密的循環中,例如游戲的更新循環中)

就Google而言,內存映射文件是由OS緩存的(使用頁面錯誤),這使得由於將其加載到內存中似乎可以安全地進行頻繁訪問。

但是,我還發現,由於已緩存 ,未加載 ,因此可能會導致性能下降。

請幫助我得到正確的答案,不勝感激。 我想知道Linux和Windows的答案,但我懷疑它們的行為有所不同。

注意:當我說“訪問”時,我會同時讀和寫。

您詢問有關重復訪問1-2 GB范圍的內存映射文件的問題。 簡短的答案是,是的,它會降低性能,特別是在您的頁面很小的情況下。

第一個問題是(默認情況下)重復訪問1 GB的任何內存將(默認情況下)趨向於驅逐您擁有的任何其他數據,並且CPU數據緩存的命中率將受到影響。 考慮到典型的CPU數據高速緩存大小僅為幾兆字節。

第二個問題是轉換后備緩沖區。 如果您使用的默認頁面大小為4 KB,則1 GB為250k頁面。 在Linux上,您應該啟用“大頁面”以減少由於訪問如此大的內存區域而導致的TLB負載。

第三個問題是您似乎尚未對其進行測試。 測試對於這種事情非常重要。 沒有它,您將永遠不會知道自己是一個真正的問題,還是只有一個假設的問題。

這在很大程度上取決於系統。 一個考慮因素是OS是否可以直接將內存映射到磁盤,或者是否需要某種中間轉換。 某些OS / File System組合允許將映射的文件完全視為頁面文件(提供良好的性能和最快的方式來讀取大文件,尤其是在磁盤上連續時)。 其他人沒有。

我懷疑他們的行為會有所不同。

它們實際上是完全不同的。 Windows使用支持連續文件的硬文件系統。 經典Unix沒有連續文件的概念

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM