본문 바로가기
Visual C++/General

windows 별 npp ( non paged pool ) size

by hyperhand 2010. 1. 30.

1. NPP ( Non paged pool ) 이란?
Windows Kernel 이 하는 일중의 하나가 메모리 관리이다. kernel 은 memory pool 방식으로 메모리를 관리하는데, 미리 물리적 메모리에 pool 을 잡아놓고, 가상메모리( 하드디스크내에 존재하는 ) 에 있는 내용을 필요할 때 실제 메모리에 올리고, 필요 없을 떄 다시 가상메모리로 내린다. 이러한 방식을 memory page in/out 방식으로 말하곤 한다.
windows memory pool 에는 두가지 방식이 존재한다.
- paged memory pool : 물리적 메모리와 가상메모리를 오가며 처리되는 방식
- non paged memory pool : 물리적 메모리에만 상주 하는 방식
( 주로 드라이버들이나 IOCP 의 메모리버퍼가 이 영역을 사용합니다. )

당연히 non paged memory pool 은 제한된 영역으로 한정 되며, 잘못 사용하게 되면 시스템을 NPP 고갈상태로 만들 수 있습니다. 그래서 항상 Windows API를 사용할 때는 NPP 영역을 사용하는 방식인지 확인 할 필요가 있습니다.

 

 

 



2. 각 OS 별 NPP size
Windows 프로그래밍시 항상 이 NPP 크기를 고려하는 것이 중요 합니다. 시스템 부팅시에 NPP 및 가상메모리 사이즈를 조절 가능 하며, 그리고 특정 상황에서는 크기가 변동됩니다.  

Windows 2000

System RAM NonPaged Max Paged Max Paged Max (TS)
512 MB 131 MB 264 MB 160 MB *
1024 MB 212 MB 268 MB 160 MB *
1536 MB 256 MB 340 MB 160 MB *
2048 MB 256 MB 340 MB 160 MB *

2000에서 터미널 서비스 가 설치될경우 paged pool 은 160MB 으로 줄어 들게 됩니다.

 

Windows 2003 SP1

 

System RAM NonPaged Max Paged Max
512 MB 125 MB 184 MB
1024 MB 202 MB 168 MB
1536 MB 254 MB 352 MB
2048 MB 252 MB 352 MB

 

2003 서버에서는 터미널 서비스와 paged pool 크기와는 상관이 없습니다.

 

* 2000/2003 의 경우

   HKLM\System\CurrentControlSet\Control\Session Management\Memory Management\PagedPoolSize

   여기에 paged pool의 크기를 지정합니다. 0xFFFFFFF 로 지정하도 OS에서 설정된 맥스값을 사용하게 됩니다.  

 pre-Vista Operating Systems:

Region IA-64 x64 x86
Process Address Space 7152 GB 8192 GB 2 to 3 GB*
Paged Pool 128 GB 128 GB 470 to 650 MB
NonPaged Pool 128 GB 128 GB 256 MB

 

*  x86일때 boot.ini 를 수정하여 프로세스의 메모리를 3GB ( /3GB ) 로 늘린다면 NPP의 크기는 반으로 줄어들게 됩니다. 프로그램의 문제로 어플리케이션의 메모리영역을 늘릴때는 주의를 요합니다. x86일때 가상 메모리 영역은 커널이 2GB, 어플리케이션이 2GB를 사용하게 됩니다.그리고 x64나 IA-64의 경우는 NPP의 여유가 상당히 많아지겠죠?

반응형