류짱:Beyond MySelf

Windows Server 2003 운영체제에서는 시스템 시작 시 커널 리소스(paged pool, Nonpaged pool)서버의 환경(PAE, 3GB 옵션등)에 따라 135M~ 470M까지 할당 되었습니다.
http://ryuchan.kr/16


Nonpaged pool Paged pool 할당 값이 고정 됨으로써 유연하지 못하게 커널 리소스가 할당 되고 비 효율적으로 리소스가 운영 되어
Windows Server 2008 에서는 Limit을 제거하고 동적으로 메모리 공간을 조절할 수 있도록 하였습니다그래서 Windows server 2008 x86에서 최대 각 각 1.5G(Nonpaged pool) 2G(paged pool) 커널 리소스를 사용 할 수 있습니다.

해당 기능은 Default입니다. 즉 기본적으로 Windows server 2008 x86환경의 시스템은 dynamic kernel addressing을 사용 한 다는 것입니다.

그러나  큰 메모리를 사용하는 어플리케이션들이 실행되는 환경이라면 동적 메모리 할당 기능으로 인해 커널 메모리 단편화가 발생 되어 시스템에 hang 증상이나 메모리 부족 오류가 발생 할 수 있으므로 그럴 경우에는 아래와 같이 커널 메모리의 값을 변경 하시면 됩니다.
http://ryuchan.kr/226

Windows Server 2008 에서  기본적으로  로컬 커널 디버깅을 이용하여 커널 리소스를 확인 할 수 없습니다만 Livekd.exe를 이용하면 가능합니다.

서버에 Windows debugging 툴을 설치 한 후 Livekd.exe를 다운 받아 livekd.exe 파일을  c:\program files\Debugging Tools for Windows  폴더에 copy합니다.
그 후 명령프롬프트를 관리자 권한으로 실행 후 아래의 명령어를 실행 합니다.
livekd.exe -kl -y srv*symbols*http://msdl.microsoft.com/download/symbols
심볼이 로드 되고 kd> 화면이 보이면 !vm 1 입력하면 커널 리소스를 확인 할 수 있습니다.

Windows Vista 커널 속으로: 2

http://preview.library.microsoft.com/ko-KR/magazine/cc162480.aspx

동적 커널 주소 공간

Windows Windows용 응용 프로그램은 32비트 프로세서의 주소 공간 한계에 직면했습니다. , Windows 커널은 기본적으로 2GB 또는 전체 32비트 가상 주소 공간의 절반으로 제한되며 나머지 절반은 CPU에서 현재 실행되고 있는 스레드가 속한 프로세스에 사용하도록 예약됩니다.
커널은 이 절반의 주소 공간에서 자신을 매핑하고, 장치 드라이버, 파일 시스템 캐시, 커널 스택, 세션별 코드 데이터 구조 및 장치 드라이버가 할당하는 비페이징(잠긴 실제 메모리) 버퍼와 페이징 버퍼 모두를 매핑해야 합니다. Windows Vista 이전의 메모리 관리자는 부팅될 때 이러한 여러 용도로 할당할 주소 공간의 크기를 결정했습니다. , 이와 같이 유연하지 못하기 때문에 일부 영역에는 가용 공간이 많이 남고 일부 영역에는 가용 공간이 없는 상황이 발생하기도 합니다. 영역을 모두 사용하게 되면 응용 프로그램 오류가 발생하고 장치 드라이버는 I/O 작업을 마칠 수 없게 됩니다.

32비트 Windows Vista에서는 메모리 관리자가 커널의 주소 공간을 동적으로 관리하여 작업 부하 요구 사항에 따라 공간을 여러 용도에 할당 및 할당 취소합니다. , 장치 드라이버가 더 많은 주소 공간을 요구하면 페이징 버퍼 저장에 사용되는 가상 메모리의 양을 늘릴 수 있으며 드라이버의 요구가 사라지면 가상 메모리의 양을 줄일 수 있습니다. 따라서 Windows Vista는 더 다양한 작업 부하를 처리할 수 있으며, 마찬가지로 향후 발표될 Windows Server® 32비트 버전인 코드명 "Longhorn"에서는 더 많은 동시 터미널 서버 사용자를 처리할 수 있습니다.

물론 64비트 Windows Vista 시스템의 주소 공간에는 현재 실질적으로 아무런 제약이 없으므로 최대값으로 구성하기 위한 별다른 조치는 필요하지 않습니다

 

 

Memory Management, Dynamic Kernel Addressing, Memory Priorities and I/O Handling

http://blogs.technet.com/b/askperf/archive/2008/02/07/ws2008-memory-management-dynamic-kernel-addressing-memory-priorities-and-i-o-handling.aspx

The Memory Manager in Windows Server 2008 has been enhanced to provide better performance, scalability, security, and reliability in the following areas:

             Support for dynamic system address space, including on-demand allocation of system virtual address space and kernel page table pages, and support for very large registries.

             To address this, the Dynamic Kernel Address Space feature, in 32-bit versions of Windows Server 2008, the Memory Manager dynamically manages the kernel's address space, allocating and deallocating space to various uses to meet the needs of the system.  As a result, the amount of virtual memory being used for paged and nonpaged pool, system PTE's and session space will grow and shrink based on system activity.  Thus, the need for manual tuning is reduced given the scaling improvements built into the operating system.

 

 

감사합니다.

Comment 0

Windows Server 2003 운영체제까지는 NonPagedPool 그리고 PagedPool, System PTE 커널 리소스가 부족하여 장애가 발생하는 경우가 있어, Windows Server 2008 에서 Limit 제거하고 동적으로 메모리 공간을 조절할 있도록 하였습니다.

그러나 큰 메모리를 사용하는 어플리케이션들이 실행되는 환경이라면 동적 메모리 할당 기능으로 인해 커널 메모리 단편화가 발생 되어 시스템에 hang 증상이나 메모리 부족 오류가 발생 할 수 있습니다.

[환 경
]
Windows Server 2008 x86 + SP2
Physical Memory: 64G

[증 상]
1. Windows Failover Cluster 환경에서 실행 중인 특정 클러스터 리소스의 온라인 실패
2. 프로세스 실행 시 메모리 부족 오류 발생

[원 인]
PagedPool, NonPagedPool Limit 값이 운영체제로부터 2GB (자동) 설정되어 있어서 메모리 할당 해제가 반복되면서 kernel address space 단편화 되었음

커널 메모리 공간의 단편화는 디스크 공간의 단편화와 동일 한 것으로 파일이 디스크에 쓰여지는 크기가 제각기 다르듯이 시스템 리소스 공간에서 드라이버에서 요구하는 Tag별 할당되는 Pool 의 크기도 서로 다르며, 작은 고정된 전체 공간이 아닌 동적 주소 범위의 경우 Allocation/Free 가 빈번하게 발생하면서 발생할 수 있습니다.

[조치 사항]
1. 64bit 운영체제를 사용합니다.
2. 아래와 같은 방법으로 단편화 방지를 위해 Kernel 메모리 할당을 static하게 변경 합니다.

Dynamic Addressing 기능이 사용 되지 않게 고정으로 Kernel 메모리가 할당 되게 한 상황에서도 메모리 블록의 할당과 해제가 지속적으로 반복 되면 메모리 단편화는 발생 할 수 있지만 전체 사이즈가 고정 되어 있기 때문에 단편화가 발생하여도 문제가 되지 않으며 다만 전체 2G의 커널 메모리 중 Pool Memory(Nonpaged pool & paged pool) 1.25G가 할당 됨으로써 커널 메모리를 사용하는 다른 영역(System PTE, 시스템 맵 뷰, 페이지 테이블 등)의 크기가 줄어 들어 또 다른 성능 이슈가 발생 할 수 있습니다.

이러 부분을 해결 하기 위해서는 64bit 운영 체제를 사용 하시는 것이 권장 됩니다^^

Memory Management Registry Keys
http://msdn.microsoft.com/en-us/library/bb870880(VS.85).aspx


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
   NonPagedPoolLimit = (REG_DWORD) 300 (decimal)
   PagedPoolLimit = (REG_DWORD) 900 (decimal)}


[참고자료]

WS2008: Memory Management, Dynamic Kernel Addressing, Memory Priorities and I/O Handling

http://blogs.technet.com/b/askperf/archive/2008/02/07/ws2008-memory-management-dynamic-kernel-addressing-memory-priorities-and-i-o-handling.aspx


We've done several posts on the memory address space on 32-bit systems.  There is a total of 4GB of virtual address space available (2^32 = 4GB) of which 2GB is allocated to the kernel by default, with the other 2GB being allocated to user-mode memory.
 Internal components, device drivers, the file system cache, kernel stacks, per-session code data structures as well as paged and nonpaged pool memory are all mapped by the kernel.
 
Prior to Windows Vista and Windows Server 2008, the Memory Manager determined at boot time how much of this address space would be allocated to these different needs. 

However, this led to situations whereby one area would become depleted, while another area had plenty of free space. 
Exhaustion of one of these areas led to application and sometimes system failures. 

To address this, the Dynamic Kernel Address Space feature, in 32-bit versions of Windows Server 2008, the Memory Manager dynamically manages the kernel's address space, allocating and deallocating space to various uses to meet the needs of the system. 

As a result, the amount of virtual memory being used for paged and nonpaged pool, system PTE's and session space will grow and shrink based on system activity.  Thus, the need for manual tuning is reduced given the scaling improvements built into the operating system.


 



감사합니다.^^

 

Comment 0