지난 수십년간 PC를 이루는 구성요소들은 모두 끊임없는 기술개발로 눈부신
발전을 이룩했습니다. 특히 CPU를 비롯한 기술집약적인 반도체의 발전속도는
실로 경이롭다고 할수있을 정도입니다. 그러나...
이런 발전에도 불구하고 여전히 문제로 남아있는 것은 구성요소간의 불균형입니다.
위로는 가장 빠른 CPU부터 아래로는 가장 느린 Serial(RS-232/422/485)까지..
구성요소간 인터페이스에 따른 데이타 처리량이나 전송속도의 차이는 전체적인
성능 불균형의 문제를 야기했습니다.
물론 Serial과 CPU의 속도가 같을 필요는 없습니다. 그러나 각각의 구성요소간
연결되어 있는 인터페이스간의 속도차이는 기술의 발전에도 불구하고 완전한
해결책이 없는 문제로 남아있습니다.
그리하여, 이런 문제점에 대한 방편으로 캐쉬(버퍼)라는 개념이 도입되었습니다.
캐쉬의 원리는 단순합니다.
한번 읽어들인 데이타나 읽어들일 데이타를 미리 예측(분기 예측)해서
유휴시간(대기 시간)을 활용해서 양자를 이은 인터페이스에서, 보다 빠른쪽에
임시적인 저장공간(버퍼)을 마련해 두고 그곳에 저장함으로써 이후에 예측이
적중하거나 버퍼에 존재하는 데이타에 대한 요구가 있을경우에는
인터페이스-인터페이스간 전송이 아니라 구성요소내에서 바로 전송함으로써
인터페이스간 속도차이로 인한 지연시간을 없애는 것입니다.
PC에서는 구성요소간 데이타 이동이 빈번하지만, 가장 핵심적인 부분은
CPU-메모리간 , Storage(주저장매체)-메모리간, CPU-노스(사우스)간입니다.
지난 수년간 메모리 기술은 급격히 발전해 왔지만 여전히 CPU의 처리속도에는
미치지 못하고.. 이런 격차를 극복하고자 CPU안에 고속의 SRAM을 데이타캐쉬와
명령어캐쉬로 활용하고 있습니다.
주기억장치로 활용되는 HDD역시 지난 수년간 끊임없이 기록밀도 증가와 인터페이스
개선으로 전송속도를 비약적으로 발전시켜 왔지만 HDD못지 않게 메모리의 전송속도
역시 크게 발전해서, 여전히 그 격차가 커보입니다.
최근에는 SSD(Solid State Disk), HHD(Hybrid Hard Drive) 같은 플래쉬 메모리를
저장매체로 사용하는 기술들이 선보이고 있는데, 차기 OS인 Vista에서 채용되는
Ready Boost같은 기능을 십분활용해서 부팅시간 단축과 커널파일등의 핵심파일에
대한 접근시간 단축등의 효과를 가져온다고 하더군요. 나와봐야 알겠지만....
앗^ 서론이 길었군요..
NT 계열에서 메모리에 대한 설정은 시스템 등록 정보→고급→성능 부분에 있습니다.
하지만 여기에 있는 설정은 몇개 안되는군요. 레지스트리로 갑니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
여기 들어있군요. 중요한거 몇개만 알아보겠습니다.
※ LargeSystemCache (XP 설정 기본값 : 0)
메모리(RAM)의 일부를 파일캐쉬로 사용합니다. HDD에서 읽어들인 내용을 버퍼영역에 저장해서
이후에 캐쉬가 적중할 경우 HDD에서 데이타를 요구하지 않고 메모리에서 바로 읽어들입니다.
0 - Windows XP에서 기본값입니다.
시스템 등록 정보→고급→성능→설정→고급→ "메모리 사용계획"에서
"프로그램"으로 설정합니다. 즉 등록정보의 설정이 이곳의 값을 변경하는 것입니다.
값이 0이면 기본적으로 최소 8MB의 공간을 캐쉬로 예약해서 사용합니다.
이후 캐쉬에 존재하는 데이타에 적중실패(Pages Drops) 횟수가 1000번이 넘어갈때까지
캐쉬내에 데이타가 남아있을수 있습니다. 이 설정은 대량의 메모리를 집중적으로 사용하는
S/W에서 유리합니다. 우선순위로 처리되는 프로세스(S/W)를 위해서 높은 히트율의 작은
공간의 캐쉬만을 소비하고, 남는 메모리는 다른 S/W를 위해서 남겨놓기 때문입니다.
1 - Windows Server 2003 에서 기본값입니다.
시스템 등록 정보→고급→성능→설정→고급→ "메모리 사용계획"에서
"시스템 캐쉬"로 설정합니다.
필요할경우 전체 물리메모리에서 4MB를 제외한 공간을 캐쉬로 사용할수있습니다.
이후 캐쉬에 존재하는 데이타에 적중실패(Pages Drops)가 250번이 넘어갈때까지
남아있을수 있습니다. 이 설정은 전체 가용한 물리메모리의 많은 부분을 시스템
캐쉬 (DNS캐쉬,아이콘캐쉬,네트웍캐쉬)로 소비하기 때문에 응용S/W에 할당하기 위한
메모리가 부족해질수 있습니다.
하지만 메모리가 충분할 경우 접근시간 단축의 장점이 있습니다.
Server 서비스(파일공유,프린트 공유,네트웍 공유)를 사용하거나 Windows Server를
사용하는 경우, 아래 레지스트리 위치를 통해서 네트웍 성능을 조절합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
에 Size값이 있습니다. 이 값의 설정에 따른 차이는 다음과 같습니다.
1 → (LargeSystemCache값이 0일때) 최소메모리 사용
2 → (LargeSystemCache값이 0일때) 성능과 메모리 사용량 균형적
3 → (LargeSystemCache값이 1일때) 파일 공유를 위한 최대한의 자원 할당
3 → (LargeSystemCache값이 1일때) 네트웍 S/W를 최대한의 자원 할당
※ 캐쉬 적중율(Hit Ratio)과 실패율(Miss Ratio)
캐쉬는 그 크기와 빠르기가 아주 중요하지만 그에 못지않게 중요한게 효율입니다.
캐쉬의 적중율이 낮으면 쓸데없이 캐쉬검색시간만 낭비해 버리기 때문입니다.
개체가 요구하는 데이타를 캐쉬에서 찾아냈을때를 Cache Hit, 찾아내지 못했을
때를 Cache Miss라고 합니다. 이 비율을 적중율 (Cache Hit Ratio)라고 합니다.
적중율이 100%(이런일은 절대로 있을수가 없지만)라면 10번 데이타를 요구했을때
그중에 10번을 캐쉬에서 찾아냈다는 뜻입니다. 적중율이 50%라면, 10번 요구중에
5번을 캐쉬에서 찾아내고, 5번을 캐쉬에서 찾지못해서 HDD에서 읽었다는 뜻입니다.
캐쉬 적중율은 CachemanXP같은 캐쉬관련 프로그램을 사용해서 사용량으로 알수있습니다.
그래프가 높을수록 캐쉬 사용량(즉, 적중율)이 높다는 뜻입니다.
CachemanXP 다운로드 ☞ 클릭
아니면 윈도우에서 자체적으로 제공하는 MSC(MS Console) 로도 확인할수 있습니다.
일단, 서비스에서 "Performance Logs and Alerts"를 수동으로 설정합니다.
시작→실행→compmgmt.msc 를 실행하면 "컴퓨터 관리자"가 실행됩니다.
상당히 복잡해 보이는데... 일단 왼쪽에서 성능로그및 경고중에 "카운터 로그"를 선택합니다.
캐쉬에 대한 카운터를 추가해야 모니터링 할수 있는데.. 마우스 우클릭해서 새로
로그를 만들거나 이미 만들어진 로그에 개체와 카운터를 추가해야 합니다.
성능개체중에 "Cache"라는 부분이 있는데, 개체로 캐쉬를 추가하면 밑에 카운터중에
여러가지가 보입니다. 무슨무슨 Hit %, 무슨무슨 Rate..등등 여러 측정항목이 보입니다.
원하는 것을 선택해서 측정할 로그에 추가합니다.
이제 로그이름에서 오른쪽을 클릭해서 "시작"을 누르면 모니터링을 시작합니다.
모니터링한 데이타는 로그파일 생성경로에 설정한 이름과 형태로 저장되는데..
읽어서 확인해야 합니다. 시작→실행→perfmon.msc를 실행합니다.
"성능"이라는 MSC가 실행됩니다. 여기에서도 로그를 만들거나 변경할수 있습니다.
저같은 경우 "My Log"라는 캐쉬에 대해서만 모니터링하는 로그를 만들었습니다.
이제 설정한 로그를 시작후에 왼쪽에서 "시스템 모니터" 부분을 클릭하면
그래프나 히스토그램(분포도)형태 또는 보고서 형태로 볼수 있습니다.
특정항목만 강조해서 선택하거나 속성을 조절하거나 값을 추가/삭제, 그래프 고정..등
여러기능을 가지고 있습니다.
단순히 모니터링 뿐만 가능한게 아니라 "추적 로그"와 "경고"를 통해서 캐쉬 히트율이
일정비율이상으로 떨어지면 경고한다거나 값의 변동사항을 추적하거나..하는 여러가지
성능에 대한(메모리,프로세서,HDD..등) 관리/감시를 할수있습니다.
※ 캐쉬 크기 조절
CacheSet이라는 프로그램으로 캐쉬 크기를 조절합니다.
DOS시절에 SmartDrv 사용하셨던분은 기억하시겠지만, 똑같이 사용합니다.
명령행 실행은 CacheSet.exe 최소크기 최대크기
즉, Run레지스트리키에 등록해서 부팅시마다 작동하게 하려면
C:\CacheSet.exe 16384 65536
같이 입력합니다. Smartdrv와 똑같습니다.
다운로드 ☞ 클릭
주의할것은, 캐쉬가 크다고 무조건 좋은게 아닙니다.
캐쉬크기와 적중율의 상관관계를 나타내는 그래프인데.. 캐쉬크기가
커질수록 적중율이 급격이 상승하다 완만한 곡선으로 변하는 것을 알수 있습니다.
어느정도의 크기 이상은 효과가 없다는 뜻입니다.
※ CPU에서 사용하는 두가지 캐쉬
Write Back(Behind) → 80486이후 마이크로 프로세서에서 사용하는 방식인데,
L1 Cache(명령어캐쉬)에 저장된 데이타가 필요할 경우에만 주메모리에 기록됩니다.
기록시에는 CPU 대기(CPU Wait-State)시간을 사용해서 후면작업(백그라운드)을
하듯이 데이타 기록(Write)과정을 처리합니다.
Write Through → 데이타 쓰기작업을 L1캐쉬와 주메모리에서 필요시에는 동시에
병렬로 처리합니다. 유휴시간이 아니라 그때그때 바로바로 데이타 쓰기작업을 합니다.
캐쉬에 쓰기작업중에 캐쉬에 대한 데이타 읽기가 요구될 경우에도 동시 작업으로
처리합니다. Write Back은 동시 요구시에 읽기가 끝난후에 쓰기작업을 재계합니다.
낙후된 기술로, Write Back보다 효율면에서 뒤떨어지는 방식입니다.
※ 읽기캐쉬와 쓰기캐쉬
캐쉬를 읽기에 사용할때는 캐쉬를 사용하던 안하던 아무문제가 없습니다.
그러나.. 캐쉬를 쓰기작업에 사용한다면 문제가 달라집니다.
캐쉬가 비어있지 않은 상태에서 전원을 끄거나 전송작업이 예정된 장치가
연결 해제될 경우, 실제로 사용자는 "기록"을 했다고 생각하겠지만
"캐쉬에 기록"했을 뿐이고, OS에서는 대기시간을 이용해서 캐쉬에 담긴
데이타를 저장매체로 "실제 기록"합니다.
그렇기 때문에 장치 연결을 해제하기 전에 반드시 "캐쉬를 비어야"합니다.
보통 USB저장매체에서 이런문제가 발생할 확률이 높은데..
USB 저장매체를 설치후에 시스템 장치관리자 등록정보에 보면
"쓰기 캐쉬 및 안전 제거"라는 항목이 보입니다. 두가지가 있는데..
빠른 제거를 위해 최적화 → 쓰기작업에 캐쉬를 사용하지 않습니다.
그렇기 때문에 쓰기를 하면 실제 장치에 바로 "기록"합니다.
그래서.. 아무때나 빼고싶을때 마구 빼버려도 무방합니다.
성능을 위해 최적화 → 쓰기작업에 캐쉬를 사용합니다. 말그대로
성능을 위한다는 건데.. 캐쉬를 사용한다면 실제로 바로 기록하지 않으니
뺄때는 반드시 트레이를 통해서 "장치 안전 제거" 과정을 거쳐서 캐쉬를
비운후에 빼야합니다. 그렇지 않으면 데이타가 완전히 기록되지 않습니다.
※ IoPageLockLimit
가끔 문서 편집이나 어떤 작업을 하다보면 "파일에 대한 접근이 금지..."
"다른 프로세스에서 사용 ~어쩌구 ~~~ " 라는 메시지가 뜨는경우가 있습니다.
그 프로세스와 메모리로 읽어들인 데이타에 대해서 특정한 권한을 갖는
사용자나 프로세스에 의한 입출력 작업만 허용하고 나머지는 잠근다는 뜻인데..
예를 들어, 포토샵 열어서 그림을 열나게 편집합니다.. 작업이 끝나지 않아서
변경사항을 저장하지는 않았고 포토샵으로 열어서 작업중입니다..
그런데.. 잠시 자리를 비운사이에 누군가가 그림판을 통해서 포토샵으로
작업중인 그림을 읽어서 장난을 친후에 저장했습니다.
포토샵에서 이미 읽어 들여서 편집중인데, 그걸 그림판에서 편집해서 저장해
버린겁니다. 이런 경우 실제로는 저장되지 않고 "다른 프로세스 어쩌구 ~~~ "
이런 메시지가 뜰텐데.. 우선권을 가진 프로세스에서 특정영역에 대해서
입출력을 제한한 겁니다. 즉.... IO(입출력) Page Lock(잠그는) Limit(한계)
값을 설정합니다. KB단위로 메모리 영역을 잠그는데..
한때 이 설정으로 "파일 입출력 속도를 증가" 시킬수 있다는 팁아닌 팁이
떠돌았는데 (설마 지금도.. ??) 사실 무근입니다. 전혀 근거가 없는 말입니다.
게다가 이 키, IoPageLockLimit키는 XP에서는 아예 존재하지도 않습니다.
만들어서 값을 입력해 봤자 쓰지를 않는다는 말이지요. 무조건 PASS.........
※ ClearPageFileAtShutdown
기본값이 0입니다. 시스템이 정지했을때(Hang) 페이지 파일(가상메모리)내에서
활성화된 페이지 영역외에 나머지 영역을 모두 0으로 채웁니다.
활성화된 페이지를 남겨놓는 이유는 시스템이나 제어권을 가진 프로세스를 위한
만약의 경우를 대비한 조치입니다.
이것은 Windows Server 관련 OS에서 보안을 위해서 사용하는 키입니다.
인터넷상에서는 "재부팅할때마다 스왑파일을 지워서 성능을 향상" 이라는
엉뚱한 내용이 알려져 있는데, 사실과는 전혀 다릅니다.
(도대체 누가 이런식으로 엉뚱한 내용을 퍼뜨리는 것인지.... -_-)
※ DisablePagingExecutive
커널 모드 드라이버와 커널모드 시스템 코드의 페이징 여부를 결정합니다..
간단히 풀어서 말하자면, 커널파일(OS를 구성하는 핵심적인 파일)들을 항상 물리메모리(RAM)에
위치시킬 것인지.. 아니면 필요하면 페이징(스왑파일-HDD를 이용한 가상메모리로 옮길지)할지
를 결정하는 것입니다.
0이면 필요시에 페이징됩니다. 1이면 항상 물리메모리에만 위치합니다.
이값을 1로 사용하는 이유는 드라이버 디버깅때문인데, 모든 코드와 데이타가 메모리에
상주하기 때문입니다. 또한 1로 설정시에는 성능면에서도 유리합니다.
이것때문에 제가 큰문제를 겪은적이 있는데, 자세한 내용은 ☞ 이글 에 있습니다.
※ PhysicalAddressExtension
IA-32기반 시스템에서 4GB이상의 물리메모리를 사용하는 방법이 두가지가 있습니다.
하나는 PSE (Page Size Extension)이고 다른 하나가 PAE (Physical Address Extension) 입니다.
PAE라는 것은 뜻을 그대로 옮기면 물리주소확장??이 되는데, IA-32에 기반한 인텔 펜티움프로
이상의 플랫폼에서는 PAE를 통해서 최대 64GB까지 물리주소를 사용할수 있습니다.
PAE는 2000/XP(32bit)/Windows Server 2003 에서만 사용할수 있습니다.
DWORD형태인 이값이 1이면 PAE가 활성화 됩니다. PAE를 사용하기 위해서는 PAE를 지원하는
OS(위에서..), PAE를 지원하는 메인보드/바이오스, 최소 4GB이상의 메모리..가 필요합니다.
원본글 출처 : 파코즈
No comments:
Post a Comment