題 增加應用程序的虛擬地址空間可能帶來的負面影響?


這是我係統的配置:

  • Windows 8開發人員預覽版(32位)
  • 2 GB RAM
  • Nvidia GeForce 8400 M(256 MB RAM)

為了運行內存密集型應用程序,我需要將虛擬地址空間從2 GB增加到3 GB。 (注意,這與此無關 虛擬內存  - 一個完全不同的概念。)

將虛擬地址空間增加1 GB會產生哪些可能的負面影響?我的猜測是Windows會緩存更少的磁盤讀取,更多地使用頁面文件等等。有什麼比較重要的我應該擔心嗎?


4
2017-11-13 03:23


起源


實際上,虛擬地址空間和虛擬內存的概念完全相同。您將增加每個進程可用的虛擬內存,從2GB增加到3GB。 - David Schwartz
@DavidSchwartz:嗯......我的意思是增加頁面文件的大小不會增加虛擬地址空間,因為我最初錯誤地認為:P - Nathan Osman
那是對的。由於不幸的事實是頁面文件大小是Windows虛擬內存面板中唯一的UI可調參數,人們開始將分頁與虛擬內存混淆。 Windows在其虛擬內存系統中實現了分頁(正如大多數現代操作系統所做的那樣,因此調優控制就是這樣的原因),但是就概念而言,你可以擁有一個而不是另一個。 - David Schwartz


答案:


在32位版本中,您的虛擬地址空間總共為4GB;用戶空間為2GB,系統為2GB。當您為用戶空間使用3GB時,您只需為系統空間留出1GB空間。這意味著它耗盡系統地址空間的兩倍,因此您可能會遇到內核級驅動程序問題(如磁盤控制器和其他I / O)。

我在TechNet上發現這篇優秀文章解釋了一些陷阱:“內存管理 - 揭秘/ 3GB“...

這是一個適用的模糊:

請記住,我們只有4GB的總地址空間可供使用。如果   我們必須額外分配1GB的這個地址空間   用戶模式空間,然後系統空間減少一半。司機,堆,   分頁和非分頁內存都只有一半的資源可供使用   現在。但是,由於內存映射的工作方式,削減了   內核空間減少了不僅僅是減少地址   空間。內核虛擬內存空間中的許多結構   減少了50%以上。例如,我們採用了Windows   安裝了1GB RAM的Server 2003 Enterprise R2計算機和   在啟用/ 3GB開關的情況下比較某些值。

默認OS構建:

免費系統PTE:251,980(1,007,920 kb)

NonPaged Pool Max:206,848 kb

啟用/ 3GB:

免費系統PTE:34,884(139,536 kb)

NonPaged Pool Max:129,312 kb

如您所見,Free System PTE的下降超過200,000。留在   請注意,這只是一個不受任何影響的測試服務器   加載。中等到重載的機器很容易耗盡   免費PTE - 意味著系統無法再映射系統頁面   例如I / O空間,內核堆棧和內存描述符列表。在   此外,在啟用/ 3GB參數後查看NonPaged Pool。


6
2017-11-13 03:49



那麼為用戶空間應用程序分配2.5 GB呢?這會減輕內核對內存的壓力嗎? - Nathan Osman
這樣可以降低成本,降低成本。如果額外的512MB虛擬內存會產生很大的不同,那就去吧。 (請記住,應用程序需要編碼以使用額外的地址空間。並且它們不得包含任何導致它們在指針出現時相同的錯誤 負 簽名整數。) - David Schwartz
@DavidSchwartz:對 - 我所指的應用程序確實利用了額外的地址空間。它的 的Lightworks。實際上 - 直到我增加虛擬地址空間才會運行。 - Nathan Osman
您是否知道64位版本的Windows為32位進程提供了完整的4GB虛擬地址空間,這些進程可識別大地址。見微軟 Windows版本的內存限制。切換到64位操作系統。 - David Schwartz