[Clint’s Windows Performance]Free SysPTEs 부족

"이 문서는 http://blogs.technet.com/cotw/default.aspx blog 의 번역이며 원래의 자료가 통보 없이 변경될 수 있습니다. 이 자료는 법률적 보증이 없으며 의견을 주시기 위해 원래의 blog 를 방문하실 수 있습니다. (http://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를 참고 하십시오. http://support.microsoft.com/kb/294418
  • Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. http://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 사이의 값으로 조정하는 방법” 에서 확인할 수 있습니다. http://support.microsoft.com/kb/316739
  • 참고 : Windows 2000 에서는 /3GB 와 SystemPages 레지스트리 키를 사용하여 Userva 와 동일한 효과를 낼 수 있습니다. http://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를 참고 하십시오. http://support.microsoft.com/kb/294418
  • Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. http://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 http://support.microsoft.com/kb/294418.
  • 64Bit Windows 사용 : 64Bit Windows는 많은 System PTE’s 를 사용할 수 있습니다. 32Bit 에서는 최대 660MB 가 PTE를 위해 할당되는데 64Bit는 128GB를 할당할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. http://support.microsoft.com/kb/294418
  • Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. http://support.microsoft.com/kb/294418

 

가능한 원인 : 높은 리소스 사용과 잘못 개발된 디바이스 드라이버

해결 방법

  • 하드웨어 호환성 리스트(HCL)에 없는 필요치 않는 드라이버 제거 : 하드웨어 호환성 리스트에 없는 드라이버들은 시스템에 장애를 유발할 수 있습니다. 보다 자세한 내용은 여기서 확인할 수 있습니다. http://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를 참고 하십시오. http://support.microsoft.com/kb/294418
  • Windows Server 2008 이나 Windows Vista 사용 : Windows Vista 나 Windows Server 2008은 동적 메모리 할당을 사용하여 System PTEs를 보다 잘 관리할 수 있습니다. 보다 자세한 정보는 KB를 참고 하십시오. http://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

참고