달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2013. 4. 2. 17:59

디스크 성능 분석 도구 (SQLIO) Performance2013. 4. 2. 17:59

많은 분들이 디스크 성능 측정과 관련해 IOMeter 등의 도구들을 많이 사용하시고 계실텐데요, 제가 소개해 드릴 도구는 Microsoft에서 배포하는 SQLIO라는 디스크 성능 측정 도구입니다.

SQLIO Disk Subsystem Benchmark Tool
http://www.microsoft.com/en-us/download/details.aspx?id=20163

우선 프로그램을 다운 받아 설치하시면 되며, 기본적으로 32비트 Program Files\SQLIO 디렉터리에 설치됩니다.
실행 방법은 간단히 SQLIO.EXE 프로그램을 실행하실 수도 있겠으나 몇 가지 설정 방법을 설명 드리겠습니다.
*주의* 운영 중인 서버에서는 실행하시지 말 것을 적극 권장 드립니다.

먼저, 설치 디렉터리에 보면 param.txt 라는 이름의 기본 설정 파일이 있습니다.
이 파일을 메모장으로 열어 보시면 기본적으로 아래와 같은 내용이 입력되어 있습니다.

c:\testfile.dat 2 0x0 100
#d:\testfile.dat 2 0x0 100


입력된 값에 대한 설명은 다음과 같습니다.
c:\testfile.dat : IO 테스트 파일 경로
2 : 실행 스레드 수
0x0 : CPU 마스크
100 : 테스트 파일 크기(MB)

부연 설명을 드리자면 테스트할 드라이브에 파일을 생성하도록 설정하고, 실행 스레드 수는 시스템의 코어 수를 입력하시면 전체 CPU를 사용하게 됩니다. 그리고, 테스트에 사용할 파일은 되도록이면 크게 잡아주시는 것이 좀 더 정확한 데이터를 얻으실 수 있으니, 적어도 5GB 이상으로 설정해 주시는 것이 좋겠습니다. 참고로, 저의 테스트 환경에서는 아래와 같이 설정하였습니다.

c:\testfile.dat 16 0x0 5120
#d:\testfile.dat 2 0x0 100



설정 파일에 대한 수정이 끝나셨으면 이제 SQLIO.exe 명령을 아래의 예를 보시고 적당한 매개 변수를 달아 실행하시면 되겠습니다. 기본 테스트 시간은 30초이며, 테스트 시간을 정하시고자 하는 경우에는 -s 매개 변수를 사용하시면 됩니다.

sqlio -kR -BH -LS -o8 -fsequential -Fparam.txt -b8

옵션에 대한 설명
-kW : 쓰기 테스트 실행
-kR : 읽기 테스트 실행
-BH : 캐시 설정(하드웨어 캐시)
-LS : 지연 설정(시스템 타이머)
-o16 : 스레드 당 동시 IO 수(16개)
-frandom : 렌덤 IO 테스트
-fsequential : 순차 IO 테스트
-Fparam.txt : 참조 파라미터 파일
-b8 : 테스트 블럭 크기(8KB)


아래는 테스트 결과를 C:\<서버 이름_SQLIO>.txt 파일로 기록하는 내용인데, 텍스트 파일로 내린 이유는 아래에서 설명 드리겠지만 결과를 분석해 엑셀 시트로 간편하게 만드는 방법이 있기 때문입니다.

sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b8 > C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -fsequential -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt

sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b8 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -fsequential -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt

sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b8 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kR -BH -LS -o16 -frandom -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt

sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b8 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b32 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b64 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b128 >> C:\%COMPUTERNAME%_SQLIO.txt
sqlio -kW -BH -LS -o16 -frandom -Fparam.txt -b256 >> C:\%COMPUTERNAME%_SQLIO.txt


출력된 결과를 직접 눈으로 확인하고 정리를 하셔도 되겠지만 좀 더 편하게 결과를 분석할 수 있는 방법을 알려 드리겠습니다. 먼저, 결과 파일을 MS Office가 설치되어 있는 PC로 복사해 온 다음 첨부된 PowerShell 스크립트 파일을 매개 변수로 결과 파일을 주어 실행하시면 아래와 같이 자동으로 결과를 Parsing 해서 엑셀 시트로 만들어 줍니다. PowerShell 스크립트의 출처는 http://sqlblog.com/blogs/jonathan_kehayias 입니다.









:
Posted by 커널64
사용자 유형 프로필 별 리소스 할당 및 평균 IOPS 값 예시
VDI Virtual Desktop Infrastructure CPU Memory Disk IOPS Performance Hyper-V User Profile
아래 값이 절대적인 값은 아니며 참고 용도로만 사용해야 한다. 평균 IOPS 값은 Steady 상태일 경우이다.

사용자 유형 운영 체제 vCPU 할당 메모리 할당 평균 IOPS 코어 당 사용자
Light Windows XP 1 768MB~1GB 3~5 10~12
Windows 7 1 1GB~1.5GB 4~6 8~10
Normal Windows XP 1 1GB~1.5GB 6~10 6~8
Windows 7 1 1.5GB~2GB 8~12 6~8
Power Windows XP 1 1.5GB~2GB 12~16 6~8
Windows 7 1~2 2GB~3GB 15~25 4~6
Heavy Windows XP 1 2GB 20~40 4~6
Windows 7 2 4GB 25~50 2~4



:
Posted by 커널64

perfmon 결과 값에서 아래 값이 점차적으로 증가하면 메모리 누수 의심
Memory\Pool Nonpaged Bytes
Memory\Pool Paged Bytes

!vm 1 - 메모리 사용량 표시 -> Free System PTEs가 부족하지 않은지 확인
!sysptes - Total System PTE 확인 -> Total System Ptes와 Total free를 확인해 부족 여부 확인
!sysptes 4 - 모듈별로 사용한 PTE 표시

gflag를 이용해서 pooltagging Enable (2003은 Default로 enable)
pool usage - Pool 사용량 표시
!poolused - Module별로 Pool 사용량 표시
!poolused 2 - nonpage pool로 정렬 -> 메모리 많이 먹는 놈의 Pool Tag 확인

Pool Tag가 확인되었다면 어떤 드라이버가 사용하는지 확인
1. CMD 창에서는
C:\WINDOWS\system32\drivers 로 이동해서
findstr.exe /m /i <Tag Name> *.* - 해당 sys 파일이 확인된다

2. Windbg 에서는
!for_each_module s-a @#Base @#End "<Tag Name>" - 해당 Tag를 사용하는 메모리 주소가 확인된다
lm <Memory Address> - 메모리 주소에 Mapping되어 있는 파일이 확인된다.

:
Posted by 커널64

윈도우 2000에서는 기본적으로 논리 디스크 성능 카운터가 Disable 상태이다.
만약 LogicalDisk에 관련된 Counter 수집이 필요하다면 다음과 같은 명령으로 Enable 시켜야 한다.
명령 실행 후 재부팅을 해야 적용된다.

DISKPERF -Y
모든 디스크 성능 카운터 Enable

DISKPERF -YD
실제 드라이브에 대한 성능 카운터 Enable

DISKPERF -YV
논리 드라이브에 대한 성능 카운터 Enable

DISKPERF -N
디스크 관련 모든 성능 카운터 Disable

DISKPERF -ND
실제 드라이브에 대한 성능 카운터 Disable

DISKPERF -NV
논리 드라이브에 대한 성능 카운터 Disable

:
Posted by 커널64
2009. 2. 17. 12:46

/3GB /PAE AWE 정리 Performance2009. 2. 17. 12:46

/3GB

응용 프로그램에서 사용하는 4GB의 가상 메모리는 커널 모드 2GB, 사용자 모드 2GB로 쓰여진다.

(사용자 모드 주소: 0x00000000 ~ 0x7FFFFFFF, 커널 모드 주소: 0x80000000 ~ 0xFFFFFFFF)

 

boot.ini /3GB 파라미터를 사용하면 커널 메모리 1GB, 사용자 모드 3GB로 사용된다.

(사용자 모드 주소: 0x00000000 ~ 0xBFFFFFFF, 커널 모드 주소: 0xC0000000 ~ 0xFFFFFFFF)

 

LARGE_ADDRESS_AWARE 플래그가 설정된 응용 프로그램만 이 늘어난 1GB의 사용자 메모리 공간을 사용할 수 있으며 그렇지 않은 응용 프로그램은 영향 받지 않는다.

LARGE_ADDRESS_AWARE 옵션이 설정되어 있는지 여부는 Visual Studio dumpbin.exe /HEADERS 명령으로 확인 가능하다.

 

1GB로 줄어든 커널 메모리 공간으로 인해 시스템 캐시(System PTE, 페이징 풀, 비 페이징 풀 등)의 공간이 현저하게 줄어들게 된다.

 

응용 프로그램에서 특별히 권고하지 않는 한 일반적으로 /3GB 옵션은 권장되지 않는다.

예를 들어, SQL Server의 경우 /3GB 옵션이 권장되나 파일 서버의 경우에는 사용하지 않는 것을 권장한다.

 

 

/PAE (Physical Address Extension)

32bit 운영체제 메모리 주소의 한계인 4GB(2^32) 이상의 실제 메모리 공간에 접근하기 위해 사용된다.

4GB 이상(36bit: 64GB)의 메모리를 사용하기 위해 운영체제 커널의 메모리 변환 스키마가 변경된다.

Boot.ini /PAE 옵션은 운영체제를 PAE 커널로 변경시킨다.

(단일 프로세서 서버의 경우 ntkrnlpa.exe, 다중 프로세서 서버의 경우 ntkrnlpamp.exe)

 

/PAE 옵션이 응용 프로그램이 사용하는 가상 메모리 공간인 4GB를 늘리는 것은 아니며 응용 프로그램의 가상 메모리 공간은 여전히 4GB로 제한된다.

 

 

AWE (Address Windowing Extension)

/PAE 옵션이 프로세서가 36bit의 메모리 공간을 사용할 수 있게 해주나 응용 프로그램은 여전히 4GB의 가상 메모리 공간을 사용한다.

이 응용 프로그램이 사용하는 4GB의 가상 메모리 공간을 확장하기 위한 API이며 대표적으로 SQL Server가 있다.

 

, AWE를 사용하는 응용 프로그램은 커널 메모리 공간 2GB와 사용자 메모리 공간 2GB 이상을 사용할 수 있게 된다.

:
Posted by 커널64
2008. 12. 3. 13:32

윈도우 서버의 메모리 (32bit/64bit) Performance2008. 12. 3. 13:32

 

 아키텍처 구성 요소  64비트 윈도우  32비트 윈도우
 가상 메모리  16테라바이트  4GB
 페이징 파일 크기  512테라바이트  16테라바이트
 하이퍼스페이스  8GB  4MB
 페이징 풀  128GB  470MB
 비페이징 풀  128GB  256MB
 시스템 캐시  1테라바이트  1GB
 시스템 PTE  128GB  660MB


가상 메모리

컴퓨터에서 사용할 수 있는 실제 메모리를 늘리는 방법입니다. 가상 메모리 시스템에서는 운영 체제에서 페이지 파일이나 스왑 파일을 만들어 메모리를 페이지라고 하는 단위로 나눕니다. 최근에 참조된 페이지는 실제 메모리나 RAM에 있습니다. 메모리 페이지가 잠시 참조되지 않을 경우 페이지 파일에 기록되는데, 이것을 메모리 "스와핑"이나 메모리 "페이징 아웃"이라고 합니다. 이 메모리 부분이 나중에 프로그램에 의해 참조될 때 운영 체제가 페이지 파일에서 실제 메모리로 메모리 페이지를 다시 읽어 들이는데, 이것도 메모리 "스와핑"이나 메모리 "페이징 인"이라고 합니다. 프로그램에 사용할 수 있는 총 메모리 양은 컴퓨터의 실제 메모리 양과 페이지 파일의 크기를 더한 것입니다. 단기적으로 중요한 고려 사항은 Windows x64 Edition에서 32비트 응용 프로그램을 실행할 경우 32비트 응용 프로그램도 늘어난 가상 메모리 주소 공간으로 인해 성능이 향상된다는 것입니다. 32비트 Windows에서 /3GB 스위치를 사용해야 하는 경우처럼 /LARGEADDRESSAWARE 옵션을 사용하여 컴파일된 응용 프로그램은 부팅 시간 스위치를 사용하거나 x64 Windows로 변경하지 않고도 자동으로 4GB의 가상 메모리를 주소 지정할 수 있습니다. 물론 운영 체제에서는 이 4GB의 공간을 공유하지 않아도 되기 때문에 메모리 제한을 전혀 받지 않습니다.

페이징 파일
컴퓨터에서 가상 메모리의 실제 저장소 양을 늘리기 위해 사용하는 디스크 파일입니다.

하이퍼스페이스
몇 가지 작업을 위해 프로세스 작업 집합 목록을 매핑하고 다른 실제 페이지를 임시로 매핑하는 데 사용되는 특수 영역입니다. 해당하는 작업에는 0으로 채워진 목록이 비어 있고 0으로 채워진 페이지가 필요한 경우 사용 가능한 목록에 있는 페이지를 비우는 작업, 대기 목록에서 페이지를 제거하는 경우와 같이 다른 페이지 테이블에 있는 페이지 테이블 항목을 무효화하는 작업 및 프로세스 생성과 관련하여 새 프로세스의 주소 공간을 설정하는 작업 등이 있습니다.

페이징 풀
시스템 공간에서 시스템 프로세스의 작업 집합을 페이징 인 및 페이징 아웃할 수 있는 가상 메모리 영역입니다. 페이징 풀은 시스템을 초기화하는 동안 만들어지고 커널 모드 구성 요소에서 시스템 메모리를 할당하는 데 사용됩니다. 단일 프로세서 시스템에는 두 개의 페이징 풀이 있고 다중 프로세서 시스템에는 네 개의 페이징 풀이 있습니다. 페이징 풀이 두 개 이상 있으면 시스템 코드에서 풀 루틴의 동시 호출을 차단하는 횟수가 줄어듭니다.

비페이징 풀
시스템 가상 주소의 범위로 구성된 메모리 풀로, 실제 메모리 내에 상주하고 있기 때문에 페이징 I/O(입/출력)를 발생시키지 않고도 원하는 주소 공간에서 액세스할 수 있습니다. 비페이징 풀은 시스템을 초기화하는 동안 만들어지고 커널 모드 구성 요소에서 시스템 메모리를 할당하는 데 사용됩니다.

시스템 캐시
시스템 캐시에 열려 있는 페이지를 매핑하는 데 사용되는 페이지입니다.

시스템 PTE
I/O 공간, 커널 스택 및 메모리 설명자 목록 같은 시스템 페이지를 매핑하는 데 사용되는 시스템 PTE(페이지 테이블 항목)의 풀입니다. 64비트 프로그램은 16테라바이트 튜닝 모델(8테라바이트 사용자와 8테라바이트 커널)을 사용하지만 32비트 프로그램은 계속 4GB 튜닝 모델(2GB 사용자와 2GB 커널)을 사용합니다. 즉, 64비트 버전의 Windows에서 실행되는 32비트 프로세스가 4GB 튜닝 모델(2GB 사용자와 2GB 커널)에서 실행됩니다. 64비트 버전의 Windows에서는 부팅 옵션에서 /3GB 스위치를 사용할 수 없습니다. 일반적으로 64비트 포인터는 16엑서바이트까지 주소 지정할 수 있습니다. 64비트 버전의 Windows에서는 현재 주소 공간이 16테라바이트까지 구현되었습니다.

:
Posted by 커널64
2008. 11. 10. 10:51

Performance Analysis for Logs(PAL) Tool Performance2008. 11. 10. 10:51

http://www.codeplex.com/PAL

 

윈도우 서버 시스템의 성능 로그 분석 도구

사전 요구 사항

l  .NET Framework 2.0

l  Log Parser 2.2

l  Microsoft Office Web Components 2003

 

사용 방법

     위 링크에서 다운 받아 설치(설치는 대상 서버가 아닌 워크스테이션에 설치) 후 실행

     Threshold File 탭에서 필요한 Template Export한다.

③   Export한 정의 파일을 대상 서버에서 Import해 성능을 수집

     수집한 성능 로그 파일(.blg, .csv)을 분석할 워크스테이션으로 가져와 분석

 

:
Posted by 커널64