Windows如何提供大記憶體支援)

來源:互聯網
上載者:User

“淺談對於虛擬記憶體的一些認識”說到自己對作業系統中虛擬記憶體的一些認識,其中提到“/3GB switch”這個概念。它涉及到Windows到底如何使用大記憶體的問題,在這裡就詳細的說一下。

2^32 = 4,294,967,296 bytes
4,294,967,296 / (1,024 x 1,024) = 4,096 MB = 4GB

  從上面的算式可以得出這樣的結論,所有32位應用程式都有 4 GB 的進程地址空間(32位地址最多可以映射 4 GB 的記憶體)。對於Microsoft Windows 作業系統,應用程式可以訪問 2 GB 的進程地址空間,稱為使用者模式虛擬位址空間。應用程式擁有的所有線程都共用同一個使用者模式虛擬位址空間。其餘 2 GB 為作業系統保留(也稱為核心模式地址空間)。
  典型情況是當實體記憶體不大於 4 GB 時,在Windows下啟動並執行進程最多可以訪問 2 GB 的記憶體位址空間,其中一些記憶體是實體記憶體,另一些是虛擬記憶體(實體記憶體為 4 GB 則完全使用實體記憶體而不需要虛擬記憶體)。此時,啟動並執行程式越多進程也越多,佔用的記憶體位址空間也就越接近 2 GB 這一最大值。當出現這種情況時,分頁進程將顯著增加並且會對效能產生負面影響。為了避免這種情況,需要向程式提供更多的實體記憶體這會降低對交換分頁檔記憶體的需要,通常會使用 /3gb 參數或者 /pae 參數和AWE(也有兩者都使用的情況,但個人不建議)。
  系統分配給應用程式的地址空間和CPU能夠訪問的實體記憶體並不是一個概念,地址空間受到限制只能有 4 GB 但CPU則能夠訪問大於 4 GB 的實體記憶體,地址空間和實體記憶體的分配是沒有關聯的。 AWE 通過函數調用與系統協商把一段地址空間與某一段實體記憶體映射(使用三級指標,增加一級指標。以2的指數次方的效果增加了可以訪問的記憶體容量),應用程式除了按照通常方法訪問的實體記憶體以外,獲得的額外實體記憶體雖然增加了一些開銷,但與實體記憶體和硬碟之間的頁面交換還是提高了效率。

1、/3gb 參數。
為了支援 3 GB 的使用者模式進程空間,必須將 /3gb 參數添加到boot.ini檔案中並重新啟動電腦,從而使 /3gb 參數生效。設定此參數後,使用者應用程式線程可以定址 3 GB 的進程地址空間,而為作業系統保留 1 GB 的進程地址空間。它的思想是讓應用程式所需的記憶體有更多部分在實體記憶體中,而不是在分頁的虛擬記憶體中,但是這樣使得核心模式地址空間被壓縮,前面提到的 Non-Paged Pool會從256M下降到128M,因此作業系統的很多操作也會受到限制。
使用 /3gb 參數最多能為應用程式多提供 1 GB 地址空間,所以個人建議不要擠占核心模式地址空間使用 /pae 而不是 /3gb 參數。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)/WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)/WINDOWS="Windows Server 2003, Enterprise" /fastdetect /3GB

2、/pae 參數和AWE。
實體位址延伸(Physical Address Extension-以下簡稱PAE)可以支援 4 GB 以上實體記憶體,PAE允許將最多 64 GB 的實體記憶體用作常規的 4 KB 頁面。向 Boot.ini 檔案添加 /pae 參數並重新啟動電腦後系統將支援 4 GB 以上的實體記憶體。
地址視窗化擴充外掛程式(Address Windowing Extensions-以下簡稱AWE),AWE 是 Windows 的記憶體管理功能的一組擴充,它使應用程式能夠使用的記憶體量超過通過標準 32 位定址可使用的 2-3 GB 記憶體。AWE 允許應用程式擷取實體記憶體,然後將非分頁式記憶體的視圖動態映射到 32 位地址空間。雖然 32 位地址空間限制為 4 GB,但是非分頁式記憶體卻可以遠遠大於 4 GB。這使需要大量記憶體的應用程式(如大型資料庫系統)能使用的記憶體量遠遠大於 32 位地址空間所支援的記憶體量。AWE 只能應用於 32 位作業系統。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)/WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)/WINDOWS="Windows Server 2003, Enterprise" /fastdetect /PAE

註:如果電腦上的可用實體記憶體超過 16 GB,作業系統就需要 2 GB 的虛擬位址空間供系統使用,因此只能支援 2 GB 的使用者模式虛擬位址空間。為了使作業系統能夠使用超過 16 GB 的記憶體,應確保 Boot.ini 檔案中沒有 /3gb 參數。如果存在該參數,作業系統就不能使用超過 16 GB 的實體記憶體。
下面的樣本說明了如何配置 AWE
1、SQL Server 2000,啟用 AWE 並將 max server memory 配置為 12 GB:

--顯示進階選項,預設某些隱藏選項無法查看和更改。
sp_configure 'show advanced options', 1
--更新系統預存程序更改的配置,使用當前已配置值。
RECONFIGURE
GO
--啟用 AWE
sp_configure 'awe enabled', 1
RECONFIGURE
GO
--配置最大服務記憶體為 12G
sp_configure 'max server memory', 12288
RECONFIGURE
GO

2、SQL Server 2005,啟用 AWE 並將 min server memory 配置為 4 GB,將 max server memory 配置為 12 GB:
啟用 AWE:

sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'awe enabled', 1
RECONFIGURE
GO

重新啟動 SQL Server 後,SQL Server 錯誤記錄檔中應顯示以下訊息:

Address Windowing Extensions enabled

配置記憶體:

sp_configure 'min server memory', 4096
RECONFIGURE
GO
sp_configure 'max server memory', 12288
RECONFIGURE
GO

對上面的設定有以下幾點說明:
(1)、SQL Server 2005啟用 AWE 之後需要重啟SQL Server服務,而2000沒有要求重啟。
(2)、SQL Server 2005支援動態分配 AWE 映射記憶體,記憶體設定使緩衝池動態管理 4 GB 到 12 GB 之間的 AWE 映射記憶體,而SQL Server 2000中不適用此動態 AWE 。
(3)、 min server memory 保證了 SQL Server 執行個體的緩衝池可用的最小記憶體量。SQL Server 不會在啟動時立即分配 min server memory 指定的記憶體量。不過,除非降低 min server memory 的值,否則當記憶體使用量量由於用戶端負荷而達到該值後,SQL Server 不能從已指派的緩衝池中釋放記憶體。
SQL Server 並不一定分配 min server memory 指定的記憶體量。如果伺服器上的負荷從不需要分配 min server memory 指定的記憶體量,則 SQL Server 將以較少的記憶體運行。
(4)、 max server memory 避免了 SQL Server 緩衝池使用的記憶體量多於指定的記憶體量,這樣剩餘的可用記憶體可以用來快速啟動其他應用程式。SQL Server 不會在啟動時立即分配 max server memory 指定的記憶體量。記憶體使用量量會隨著 SQL Server 的需要增加,直到達到 max server memory 指定的值。除非提高 max server memory 的值,否則 SQL Server 不能超過此記憶體使用量量。
(5)、SQL Server 2005需要在啟用 AWE 之前鎖定記憶體頁,啟用之後最大化網路應用程式資料輸送量
(6)、鎖定記憶體頁
確定哪些帳戶可以使用進程將資料保留在實體記憶體中,從而阻止系統將資料分頁到磁碟的虛擬記憶體中。在 SQL Server 2005 中,“鎖定記憶體頁”選項預設設定為 OFF,需要將此許可權指定給正在運行 SQL Server 的帳戶。
如何啟用“鎖定記憶體中的頁”選項
1). 在“開始”菜單上,單擊“運行”。在“開啟”框中,鍵入 gpedit.msc。
    將開啟“組策略”對話方塊。
2). 在“組策略”控制台上,展開“電腦配置”,再展開“Windows 設定”。
3). 展開“安全設定”,再展開“本地策略”。
4). 選擇“使用者權利指派”檔案夾。
    詳細資料窗格中隨即顯示出策略。
5). 在該窗格中,雙擊“鎖定記憶體中的頁”。
6). 在“本地安全性原則設定”對話方塊中,單擊“添加”按鈕。
7). 在“選擇使用者或組”對話方塊中,添加有權運行 sqlservr.exe 的帳戶。
(7)、最大化網路應用程式資料輸送量
如果在“網路連接”中選中了“最大化檔案分享權限設定的資料輸送量”選項,則作業系統將在檔案系統快取中緩衝應用程式的 I/O 頁面,從而優先處理執行緩衝輸入/輸出 (I/O) 操作的應用程式。此選項可能會限制可用於 SQL Server 正常操作的記憶體。
檢查當前作業系統的設定:
1). 在“控制台”中,雙擊“網路連接”,再雙擊“本地串連”。
2). 在“常規”選項卡上,單擊“屬性”,選擇“Microsoft 網路的檔案和印表機共用”,再單擊“屬性”。
3). 選中“最大化網路應用程式資料輸送量”,單擊“確定”,再關閉其餘對話方塊。
  上面羅嗦了半天實際上就是對Windows系統如何支援 4 GB 以上的實體記憶體。這裡參考了SQL Server 2005 聯機叢書以及283037和274750兩篇KB。

看過51CTO朋友xintao800的一篇關於虛擬記憶體的文章,對裡面的一些觀點保留意見。

出處http://beacon.blog.51cto.com/442731/133762

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.