[Clint’s Windows Performance]Free SysPTEs 부족
"이 문서는 https://blogs.technet.com/cotw/default.aspx blog 의 번역이며 원래의 자료가 통보 없이 변경될 수 있습니다. 이 자료는 법률적 보증이 없으며 의견을 주시기 위해 원래의 blog 를 방문하실 수 있습니다. (https://blogs.technet.com/cotw/archive/2008/04/07/symptoms-lack-of-free-system-page-table-entries-ptes-and-system-wide-delays-i-o-request-failures.aspx)
증상 : 시스템 페이지 테이블 엔트리 부족과 시스템 지연(I/O 실패)
들어아기
이 문서의 목적은 Windows 성능 문제를 일으키는 Free system page table entry(PTEs) 에 대한 문제점을 분석하는 방법을 제공하기 위함 입니다.
Free system PTEs를 분석하기 위해서는 아래 성능 카운터를 확인해야 합니다.
- \Memory\Free System Page Table Entries
페이지 테이블은 Windows 메모리 매니저(VMM)가 가상 메모리와 물리 메모리의 매핑 정보를 저장하는 자료구조 입니다. 성능 카운터인 Free System Page Table Entries 는 현재 시스템에 의해 사용되고 있지 않은 페이지 테이블의 수를 나타냅니다.
프로세스의 관점에서 볼 때 가상메모리는 물리메모리를 참조 하고 가상메모리관리자(VMM) 과 프로세서 메모리 매니지먼트 유닛(MMU) 가 가상 메모리를 물리 메모리로 전환하는 역할을 합니다.
VMM 은 RAM을 정해진 크기의 페이지 프레임으로 나누고 System PTE 를 생성하여 페이지 프레임 정보를 저장하고 매핑합니다. System PTEs는 작은 커널 모드 메모리 버퍼로 디스크 I/O 그리고 네트워크 등에 사용됩니다. 각 PTE는 페이지 프레임을 나타내고 VMM이 페이지를 매핑하는데 필요한 정보를 가지고 있습니다.
참고 : System PTEs 문제를 해결하는 보다 자세한 정보는 참고 절의 “페이지 테이블 엔트리가 부족한 문제의 찾기, 분석 그리고 해결 방법”를 참고 하시기 바랍니다.
이 문서는 증상, 원인으로 정리 되어 있습니다.
증상 : Free System Page Table Entry (PTEs) 부족과 시스템 성능 지연(I/O 실패)
적용 :
- 32-bit Windows Server 2003
- 32-bit Windows XP
- 32-bit Windows Server 2000
증상 :
Free System Page Table Entry(PTEs) 부족 : “Memory\Free System Page Table Entries” 성능 카운터가 5000 이하인 경우. PTEs 를 검사하기 위해 커널 디버거에서 !pte 명령을 사용할 수 있습니다. (역자 주:!vm 명령과 !sysptes 명령으로 SysPTEs 의 최대 값과 현재 사용량을 확인할 수 있습니다.)
주기적인 시스템 전역적인 지연 : 사용자가 느끼기에 시스템 전역적인 지연 또는 행이 발생하거나 I/O 응답시간이 느려질 경우
가능한 원인 : PAE 커널 사용
분석 방법
- Windows 2003 이 PAE 커널로 부팅되었는지 “HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PhysicalAddressExtension” 레지스트리 키 값이 1로 설정되어 있는지 확인하여 알 수 있습니다. 다른 방법으로는 boot.ini 에서 /PAE 스위치가 설정되었는지 확인할 수 있습니다.
참고 : 32Bit Windows 에서 데이터 실행 방지가 활성화 되어 있다면 시스템은 자동으로 PAE모드로 부팅됩니다.
- PAE 스위치는 Windows가 4GB 이상의 물리 메모리를 사용할 수 있게 해 줍니다. X86시스템에서 페이지 테이블 인덱스는 10Bit (PAE 에서는 9) 이고 1024개의 4Byte PTEs를 사용합니다. PAE 스위치는 PTE 엔트리가 사용하는 가상 메모리 공간을 두 배로 늘리게 됩니다. 보다 자세한 내용은 Windows Internals를 참고 하시기 바랍니다.
해결 방법
- 64Bit Windows 사용 : 64Bit Windows는 많은 System PTE’s 를 사용할 수 있습니다. 32Bit 에서는 최대 660MB 가 PTE를 위해 할당되는데 64Bit는 128GB를 할당할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
- Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
- PAE 스위치 제거 : PAE 기능이 필요하지 않다면 boot.ini 에서 PAE 스위치를 제거 하십시오.
가능한 원인 : 3GB 스위치 사용
분석 하는 방법
- 3GB 스위치는 Free system PTEs를 줄이게 됩니다. 3GB스위치가 사용되었는지 아래 방법을 사용해 확인할 수 있습니다.
- Boot.ini를 열어서 3GB스위치가 사용되었는지 확인
- “HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions” 의 값을 확인
- WMI 프로바이더에서 root\cimv2\Win32_OperatingSystem.MaxProcessMemorySize 값이 3,145,536(3GBs)보다 크고 2,097,024(2GB)보다 작은지 확인
- 운영체제 구성에 따라서 Free PTEs 값이 달라지는 것을 아래 표를 통해 확인할 수 있습니다. 3GB 스위치를 사용하느냐에 따라서도 달라질 수 있습니다.
해결방법
- USERVA 사용 : Windows Server 2003에서 /USERVA를 사용하여 System PTE 를 위한 커널 메모리 공간을 약간은 더 할당할 수 있습니다. 보다 자세한 정보는 “/Userva 스위치를 /3GB 스위치와 함께 사용해서 사용자 모드 공간을 2GB에서 3GB 사이의 값으로 조정하는 방법” 에서 확인할 수 있습니다. https://support.microsoft.com/kb/316739
- 참고 : Windows 2000 에서는 /3GB 와 SystemPages 레지스트리 키를 사용하여 Userva 와 동일한 효과를 낼 수 있습니다. https://technet2.microsoft.com/windowsserver/en/library/c5ccbaec-f552-4f61-a488-8ee3330d1eeb1033.mspx
- 3GB 스위치를 제거 : 필요하지 않다면 boot.ini 파일에서 /3GB 스위치를 제거
- 물리 메모리의 크기를 줄임 : “32bit Windows에서 너무 많은 물리 메모리”를 확인
- 64Bit Windows 사용 : 64Bit Windows는 많은 System PTE’s 를 사용할 수 있습니다. 32Bit 에서는 최대 660MB 가 PTE를 위해 할당되는데 64Bit는 128GB를 할당할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
- Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
가능한 원인 : 너무 많은 물리 메모리
분석하는 방법
아래 “커널 리소스 할당 표”를 참조하면 Free PTE 들은 운영체제 설정마다 달라 집니다. 물리 메모리가 커질수록 Free system PTE 가 줄어드는 것을 볼 수 있습니다.
해결 방법
- 물리 메모리 줄이기 : 물리 메모리를 줄여 더 많은 System PTEs 와 가상 메모리 확보
- Migrate to Windows Server 2008 or Windows Vista: Windows Vista and Windows Server 2008 use dynamically memory pools to better manage system PTE memory. For more information, see https://support.microsoft.com/kb/294418.
- 64Bit Windows 사용 : 64Bit Windows는 많은 System PTE’s 를 사용할 수 있습니다. 32Bit 에서는 최대 660MB 가 PTE를 위해 할당되는데 64Bit는 128GB를 할당할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
- Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
가능한 원인 : 높은 리소스 사용과 잘못 개발된 디바이스 드라이버
해결 방법
- 하드웨어 호환성 리스트(HCL)에 없는 필요치 않는 드라이버 제거 : 하드웨어 호환성 리스트에 없는 드라이버들은 시스템에 장애를 유발할 수 있습니다. 보다 자세한 내용은 여기서 확인할 수 있습니다. https://winqual.microsoft.com/hcl/
- /BASEVIDEO 사용 : /BASEVIDEO를 boot.ini 에 사용하여 System Page Table Entry 를 좀 더 확보할 수 있습니다. 그래픽 드라이버는 버퍼를 커널 영역에 매핑하기 위해 system page table 을 사용합니다. Microsoft Exchange 에서
- 3GB 스위치를 제거 : 필요하지 않다면 boot.ini 파일에서 /3GB 스위치를 제거
- 물리 메모리의 크기를 줄임 : “32bit Windows에서 너무 많은 물리 메모리”를 확인
- 64Bit Windows 사용 : 64Bit Windows는 많은 System PTE’s 를 사용할 수 있습니다. 32Bit 에서는 최대 660MB 가 PTE를 위해 할당되는데 64Bit는 128GB를 할당할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
- Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. https://support.microsoft.com/kb/294418
가능한 원인 : Microsoft Exchange Server 에서 많은 메일 박스 사용
해결 방법
- 서버에 있는 메일박스의 수를 줄이거나 해당 서버의 공유 폴더 기능을 제거. 많은 Microsoft Exchange 메일 박스 저장소는 하나의 공용 폴더를 가집니다.
- 하나의 공유 폴더 서버를 기본 값으로 가지는 메일 박스 스토어를 줄이기. 이 방법으로 공유 폴더의 클라이언트 수가 줄어 들게 됩니다.
커널 리소스 평가 표
이 표에서는 32Bit Windows Server 2003에서 PAE, 3GB, 그리고 다른 물리 메모리를 사용할 경우 커널 리소스의 최대 값을 나타냅니다. 아래 정보는 커널 디버거에서 !vm 명령을 통해 확인하였습니다.
Memory |
Default ( /PAE for 6-16GB ) |
/3GB |
1GB |
Free System PTE: 51k Paged Pool: 282MB Non Paged Pool: 212MB |
Free System PTE: 32k Paged Pool: 163MB Non Paged Pool: 131MB |
2GB |
Free System PTE: 196k Paged Pool: 360MB Non Paged Pool: 262MB |
Free System PTE: 16k Paged Pool: 262MB Non Paged Pool: 131MB |
3GB |
Free System PTE: 195k Paged Pool: 360MB Non Paged Pool: 262MB |
Free System PTE: 14k Paged Pool: 262MB Non Paged Pool: 131MB |
4GB |
Free System PTE: 106k Paged Pool: 336MB Non Paged Pool: 285MB |
Free System PTE: 15k Paged Pool: 258MB Non Paged Pool: 154MB |
6GB |
Free System PTE: 186k Paged Pool: 366MB Non Paged Pool: 262MB |
Free System PTE: 12k Paged Pool: 239MB Non Paged Pool: 131MB |
8GB |
Free System PTE: 182k Paged Pool: 366MB Non Paged Pool: 262MB |
Free System PTE: 12k Paged Pool: 225MB Non Paged Pool: 131MB |
12GB |
Free System PTE: 175k Paged Pool: 366MB Non Paged Pool: 262MB |
Free System PTE: 12k Paged Pool: 196MB Non Paged Pool: 131MB |
16GB |
Free System PTE: 167k Paged Pool: 366MB Non Paged Pool: 262MB |
Free System PTE: 12k Paged Pool: 169MB Non Paged Pool: 131MB |
참고
- Detection, Analysis, and Corrective Actions for Low Page Table Entry Issues
https://www.microsoft.com/downloads/details.aspx?FamilyID=ed0e8084-abf7-4c00-ba6a-7d658cdb052a&DisplayLang=en - “Windows Internals Microsoft Windows Server 2003, Windows XP, and Windows 2000” by Mark E. Russinovich and David Soloman.
- Comparison of 32-bit and 64-bit memory architecture for 64-bit editions of Windows XP and Windows Server 2003
https://support.microsoft.com/kb/294418 - System Pages
https://technet2.microsoft.com/windowsserver/en/library/c5ccbaec-f552-4f61-a488-8ee3330d1eeb1033.mspx?mfr=true - How to use the /userva switch with the /3GB switch to tune the User-mode space to a value between 2 GB and 3 GB
https://support.microsoft.com/kb/316739