● 가상메모리 (Vitrual Memory)
Vitrual Memory로 말그대로 실재 존재하지는 않지만 메모리 역할을 하는 것을 말하는데 윈도우는 하드 디스크의 일정 영역을 '가상 메모리'로 사용합니다.
● 스왑 (swap)
시분할 운영체제에서 어떤 작업의 주기억장치 영역의 이미지를 보조기억장치에 기록하고, 다른 작업의 이미지를 주기억장치에 읽어 넣는 방식
* 주메모리의 한도를 넘는 프로세서를 실행하면 가상메모리(하드디스크의 일부분)에 주메모리가 로드할 데이터들중 일부 이미지들이 보내지어 작업처리량을 높이며 효율적으로 한다는것이 바로 가상메모리와 스왑의 메카니즘이긴하나
하드디
스크와 램사이의 전송속도자체의 차이와 주메모리가 넘겨주었던 데이터이미지들을 하드디스크로부터 다시 받는 이 과정에서 연산제어가 딱
맞아떨어지면 그횟수가 합리적 경제적으로 적어지겠지만 그렇지 못하는 경우가 생길때도 있어 흔히 이럴때 우리가 하드스왑현상으로
작업대기및 지연시간이 생겼다라고 말하는것같습니다.
● 메모리의 구조와 설명 <첨부사진참조>
* Null-pointer Assignment
이 지역은 프로그램상의 메모리 접근 오류를 잡아내기 위하여 할당된 영역입니다. 어떤 프로그램이든
이 영역에 읽고 쓰기가 금지되어 있는데 이 지역에 read/write가 행해지면 시스템은 access viloation을
발생시킵니다.
시스템으로부터 메모리를 정상적으로 할당 받지 못할 경우 NULL(0x0)을 리턴받게 되는데 바로 이런 NULL pointer assignment를 방지하기 위한 공간입니다.
* MS-DOS 16-bit Compatibility(win98 only)
win9x에만 존재하는 4MB의 공간으로 MS-DOS와 win16과의 하위 호환성을 유지하기 위한 공간입니다.
이 공간 또한 read/write가 금지되어야 하는데 MS사에서 기술적인 몇 가지 이유로 이 공간을 보호하지 못했다고 하군요
win2000에서는 DOS나 win16 어플리케이션을 자신의 유저 주소 공간에서 실행하기 때문이 이 영역이 없다고합니다.
* User area
프로세스의 사용자 공간입니다. 다른 프로세스에 의해 간섭받지 않는 고유의 공간으로서 이 공간에 exe와 dll 모듈등 자신들만의 데이타를 담는거라고 합니다.
특기할 만한 것은 win9x에서는 처음 4MB를 제외한 0x400000부터 0x7FFFFFFF인 반면,
win NT는 0x10000부터 0x7FFEFFFF로 역시 처음 2GB에서 64KB를 제외한 부분입니다.
이는 어떤 프로그램이 실행될 때 메모리 상의 베이스 주소가 다를 수 있다는 것인데, 때문에 프로그램을 만들 때
win NT는 win 9x와 호환성에 주의해야 하는것이더군요.
win NT에 맞추어 프로그램의 베이스 메모리를 0x10000로 맞추었다가는 win9x에서는 접근이 금지된 지역이므로 실행이 불가능하게 됩니다. (물론 요즘엔 win 9x가 사라져가는 추세라서 그리 큰 영향은 없겠지만..)
* 64KB Off-Limits(win2000 only)
0x7FFF0000부터 0x7FFFFFFF까지는 win NT에서 처음 64KB의 영역과 마찬가지로
메모리 경계(off-limit)를 나타내는 지역입니다. 커널 영역의 접근을 방지하기 위한 일종의 완충지역이라고 보면 된다고
하는데 어렵군요.
* Shared Memory Mapped File(win98 only)
win9x에만 존재하는 이 1GB의 영역은 모든 프로세스들이 공통적으로 접근하고 공유할 수 있는
시스템 dll들과 MMF(memory-mapped files)가 적재되는 곳입니다. 3대 시스템 dll이라 불리는
kernel32.dll, user32.dll, gdi32.dll에서 advapi32.dll도 이 영역에 로드되며, win
NT에서는 이런 시스템 dll조차 비공유 메모리 영역에 따로 적재하여 사용합니다.
(이런한 이유로인하여 2000의 보안성이 더 높아 금융권에서도 아직 널리 사용되는건 아닐련지 생각해봅니다 --+)
* Kernel area
win9x에서는 1GB, win NT에서는 2GB로 예약되어 있는 커널 공간입니다.
스케쥴러, 메모리 관리자, 파일 시스템 코드, 네트워크 코드등의 OS 코드와 디바이스 드라이버 레벨의 모듈이 적재되는 곳이며, 원칙적으로는 이 영역에 대한 read/write가 금지되어 있지만,
win98에서는 이 영역에 대해 접근이 가능합니다. 유저 어플리케이션에서 이 영역을 손상시킬 수 있다는 점 때문에 win98이 자주 다운되고 불안하다는 비난을 받게 된 이유입니다.
● 물리적 메모리와 가상 메모리의 매핑 관계<첨부사진참조>
* Page table에는 페이지가 RAM에 존재하는지 paging file에 존재하는지에 대한 정보를 가지고 있습니다.
옛날 DOS및 윈3.1 시절에는 시스템의 메모리는 그 시스템에 설치된 RAM이 전부였습니다.
만약 시스템에 1MB의 RAM이 설치되어 있다면 커밋할 수 있는 메모리는 1MB가 전부였던 것이지요
(예를들어 Dos경험자 분들의 공통적인 눈물겨운 사투 EMM386등을 이용한 메모리 확장(Extened) 노가다 ㅜ_ㅜ)
그러나 오늘날의 현대적 운영체제들은 대부분 시스템에 설치된 RAM 이외에 디스크 파일을 메모리로 간주할 수 있는 메커니즘을 제공하고 있으며, 이 때 이 메모리로 간주되는 파일을 페이징 파일(paging file)이라고 합니다.
간단히 말해 자신의 시스템에 256MB의 메모리와 256MB의 페이징 파일을 가지고 있다면 물리적 메모리는 512MB가 되는 것입니다.
● 쓰레드 (thread)
thread는 process 안에서 실행되는 코드의 실행 흐름이라고 할 수 있습니다.
쓰레드는 프로세스가 할당한 메모리 영역에서 실행되며 프로세스에 할당된 시스템 자원을 사용하게 되며, 프로세스가 생성되고 초기화될 때마다 운영체제는 기본쓰레드(primary thread)를 생성하게됩니다.
각 쓰레드는 명령 코드와 함께 CPU 레지스터 상태를 저장하는 context와 2개의 스택 영역이 포함되고, 2개의 스택 영역은 특권 프로세스 모드와 사용자 모드를 위한 스택입니다.
● 스레싱( thrashing)
한 프로세스의 어떤 쓰레드thread 가 프로세스 주소 공간에 있는 데이타에 접근하려고 할 때 그 데이타가 RAM에 존재하고 있다면 CPU는 프로세스의 가상 주소를 해당 물리 주소에 맵핑하고 데이타에 접근하게 됩니다.
그러나 데이타가 RAM에 없다면 그 데이타가 페이징 파일에 있는지 확인하게 되겠지요.
이 상황을 Page fault라고 합니다. page fault가 발생하면 시스템은 페이징 파일내에 데이타가 존재하는지 확인하고 없다면 access violation을 발생시킵니다.
접근하려는 데이타가 페이징 파일에 있다면 시스템은 현재 RAM에 비어 있는 페이지가 존재하는지 확인하고 존재하지 않는다면 RAM상의 어떤 페이지 중에 한 페이지를 선택해서 이를 해제free하게 됩니다.
만일 해제하려는 페이지의 데이터가 RAM에서 변경된 적이 있다면 (이를 데이터가 더럽혀졌다(dirty)라고 합니다)
해당 페이지의 내용을 페이징 파일에 갱신한 후 해당 RAM 페이지를 해제하는데, 새로 비워진 페이지에 원래 접근하려고
했던 데이터가 존재하는 페이지를 페이징 파일로부터 로딩하게 되고 CPU가 가상 주소를 물리 주소에 맵핑한 후에야 비로소 데이터에
접근하게 되는 것입니다.
만일 시스템에 RAM이 부족하게 되면 page fault가 빈번하게 발생하게 되고 운영체제는 계속해서 RAM과 하드 디스크의 페이징 파일 사이에서 페이즈를 바꾸는 작업에 대부분의 시간을 소모하게 되겠지요.
이런 현상을 바로 thrasing이라고 부르는데 가끔 win2000/Xp계열을 사용하다보면 어느 순간에 이유없이 하드 디스크가 버버벅 거리며 돌아가면서 성능이 저하되는 모습을 본적이 있을 것입니다.
이때가 바로 thrashing이 발생한 경우이며 이쓰레드는 인텔계열로 치자면 CPU자체의 L2캐쉬의 크기와 듀얼코어이냐
싱글코어이냐에 따라 발생하는 쓰레씽이 작업지연시간이 줄어들고 여러개의 쓰레씽들도 처리하는 속도가 차이가 나게됩니다.
여기서 한 시스템에 수많은 프로그램들이 동시에 실행된다면 그 많은 프로그램들의 실행 코드나 데이타들을 페이징 파일에서 할당해야 할 테니 페이징 파일이 대책없이 커지지 않을까 하는 의문을 가질 수 있는데.
이것을 방지하기 위해 시스템은 프로그램이 실행될 때 실행 파일을 열고 코드와 데이타의 크기를 먼저 확인한 뒤에 실행에
필요한 만큼의 영역을 확보한 후 실행 파일의 이미지 자체를 영역으로 할당합니다. 프로그램의 .exe 실행 파일이나 DLL등의
파일 이미지가 주소 공간의 확보된 영역으로 사용될 때 이를 memory mapped file이라고 합니다.
(예를들어 윈도우즈에서 실행중인 파일이나 dll을 삭제하려고 할 때 "실행중이므로 삭제할 수 없다"라는 메시지가 뜨면서
삭제가 안되는 경우를 많이 보았을 것입니다. 이는 실행한 파일이나 dll을 전부 메모리에 올리지 않고 필요한 부분만 메모리에
올려지고 나머지는 memory mapped file로 묶여져 있기 때문인 것입니다.)
● 가상메모리 설정법
가상메모리는 실제 물리적메모리의 1.5~2배정도를 설정해주는것이 좋다는 MS사의 비공식? 사항이 있었던 것으로 기억하며 설정방법은 최소와 최대를 모두 같은값(실제 물리적메모리의 1.5~2배 의 값)으로 설정하는 것을 추천합니다.
그리고 가상메모리공간을 확보할 하드디스크는 운영체제가 설치되어있는 드라이브가 아닌 다른 드라이브로 함으로써
스왑현상을 어느정도 해소하게 하는것이 좋습니다.
* 가상메모리에 관한 정확한 설정법이 이렇다고 딱 말씀드릴수는 없는것이 개개인마다의 컴퓨터 사양과 사용하시는 프로그램들이
발생시키는 페이지파일과 그로인한 쓰레딩들의 갯수 크기가 다 틀리시며 하드디스크의 관리하시는 방법도 틀리며 무턱대고 가상메모리를
늘린다한들 주메모리 D램과 하드디스크사이의 데이터이미지를 주고받는 일련의 과정 스왑이 발생되는 횟수및 시간이 증가되기 때문입니다.
그래도 위의 실메모리의 1.5배~2배사이는 MS사에서도 비공식적으로 인정한 부분이니 그렇게 사용하고있습니다 저도
이상으로 가상메모리에 관한 컴맹의 글을 마치겠습니다
출처: 파코즈
윈도 속도 최적화 팁(HOW PC)
★팝업 메뉴 속도 향상 시키기☆
마우스 오른쪽 버튼을 누를 때 나타나는 팝업 메뉴는 자주 사용하는 기능을 빠르게 실행할 수 있어 편하다. 이번에는 여기에서 한 걸음 더 나가 레지스트리를 수정해 좀더 빠른 속도로 팝업 메뉴가 뜨도록 만들어보자.
시작 - 실행 - Regedit 를 치고 엔터
첫번째 `HKEY_CURRENT_USER - ControlPanel - desktop 으로 이동한다.
두번째 오른쪽 창의 `MenuShowDelay` 항목값이 `400`으로 설정되어 있다. 이 항목을 더블 클릭해 곧장 뜨는 `문자열 편집`대화 상자에서 `값 데이터`란에 0 이라고 입력하고 확인 버튼을 누른다.
0 에 가까울수록 팝업 메뉴가 뜨는 속도가 빨라진다.
★L2 캐시 지정해 속도 향상시키기
윈도 에서는 Cpu와 주변기기 사이의 병목 현상을 줄여주는 보조저장장치인 L2 캐시와 CPU의 클록을 자동으로 인식하는데,
간혹 그 일을 제대로 수행하지 못할 경우가 있다. 이럴 때에는 레지스트리 값을 조작해서 CPU의 작업 속도를 향상 시켜야 한다.
시작 - 실행 - Regedit 를 치고 엔터
첫번째 `HKEY_LOCAL_MACHINE - SYSTEM - CurrentControlSet - Control - Session Manager - Memory Management 로 들어간다.
두번째 오른쪽 창의 `SecondLevelDataCache` 항목을 더블클릭한 다음 `문자열 편집` 대화 상자에서 자신의 CPU에 맞게 10진수 값을 수정한다. 입력할 10진수 값은 아래 표를 참조한다.
CPU L2 캐시값
AMD DURON 64
셀러론A, 셀러론2 128
/팬티엄2 모바일,/
/팬티엄3 EB, 팬티엄4/
/AMD K6-3/ 256,
/AMD 선더버드/,
/사이릭스3/
/AMD K6-2, 팬티엄2/
/팬티엄3,/
/팬티엄3 카트마이/ 512
/AMD애슬론/
/팬티엄2 Xeon/
/팬티엄3 Xeon/ 1024
★캐시 메모리 최적화 하기☆
프로그램이 실행되면 하드디스크 읽기가 시작된다. 그런데 이 때 하드디스크는 램보다 속도가 느리기 때문에 램과 하드디스크
사이에 일정량의 임시 메모릴를 만들어두고 프로그램이 처음 실행되면 램으로 들어오는 데이터를 이 곳에 보관한다. 이런 임시
메모리를 캐시 메모리라고 한다. 이 캐시 메모리를 램의 용량에 맞고 수정하면 윈도의 속도를 향상시킬 수있다.
시작 - 실행 - Regedit 를 치고 엔터
첫번째 `HKEY_LOCAL_MACHINE - SYSTEM - CurrentControlSet - Memory Management 로 들어간다.
두번째 오른쪽 창을 마우스 오른쪽 버튼을 클릭하고 `새로 만들기 - DWORD 를 선택한 다음 `새 값`에 `iopagelocklimit` 라고 입력한다. 대소문자에 주의해서 입력해야 한다.
세번째 `iopagelocklimit` 를 더블클릭하고 값 데이터 란에 자신에게 맞는 램 크기를 입력한다.
입력할 값은 아래 표를 참조한다.
램 값
64mb 1000
128mb 4000
256mb 10000
384mb 22000
512mb 이상 40000
★윈도우 2000 커널, 메모리에 바로 띄우기
윈도 2000을 운영하는 데 꼭 필요한 커널은 윈도 시작과 동시에 메모리와 가상 메모리에 로드된다. 이 떼 만약 속도가
느린 가상 메모리에 로드되어 스왑되면 시스템 성능이 떨어지므로 메모리에 로드되도록 하자. 시스템의 성능 향상은 물론이고 부팅
시간도 단축시킬 수 있다.
시작 - 실행 - Regedit 를 치고 엔터
첫번째 `HKEY_LOCAL_MACHINE - System - CurrentControlSet - Control - Session
Management 로 이동해 오른쪽 창에 나타나는 `DisablePagingExecutive 를 더블 클릭한다.
DWORD 값 편집 대화 상자가 열리면 `값 데이터` 입력란에 1 이라고 입력하고 확인 버튼을 누른다.
★쓸데없이 하드디스크 읽는 현상 없애기
PC를 사용하다 보면 아무 작업도 하지 않았는데 하드디스크 드라이브의 표시등이 켜지면서 하드 스크가 작동할 때가 있다.
이는 윈도에 인덱싱 서비스 기능이 포함되어 있기 때문인데, 이 기능은 로컬 및 원격 컴퓨터에 있는 파일을 빠르게 찾고자 할
때에는 유용하지만 시스템의 속도를 떨어뜨리는 한 요인이므로 해제 하는것이 좆타.
첫번째 제어판 - 관리도구 - 서비스 에 들어간다.
두번째 Indexing Service 를 더블클릭한다음 대화 상자에서 시작유형을 사용 안 함으로 설정
여기 저기 자료를 찾아보면 레지스트리 최적화 캐쉬메모리 IoPageLockLimit 셋팅이 틀리다.. 과연 어떤말이 맞는 말인가?
크게 다음 2가지로 요약되는데 그 차이는 어마어마 하다.
시스템속도에 엄청난 영향을 미치는 부분인데 어느것이 맞는지 확실히 해둘필요가 있겠다.
가장기본적으로는 아래 마이크로소프트의 아래부분이 기본이 되어야 겠다.
참고 해서 판단해 보세요.
512메가를 기준으로 생각해보면
1의방법은 16진수로 40,000===> 10진수로 환산하면 262,144
2의방법은 10진수로 67,108,864 이다. 300배의 차이가 발생한다. 어느것이 맞는 말일까?
여러분의 생각을 들어보고 싶어서 글을 올립니다. 답변 부탁드립니다.
1.
레지스트리 편집기를 보니깐 마치 윈도우탐색기 처럼 생겼네요
윈도우탐색기에서 폴더사이를 왔다갔다하고 폴더안에 들어있는 파일을보는것이라고생각하시면 쉽게 하실수 있습니다
레지스트리편집기의 좌측에는 폴더가 우측에는 선택된폴더안에 들어있는 파일과 폴더들이 표시됩니다
(이해를 돕기위해서 파일과 폴더라는 용어를 사용하였습니다)
그럼 레지스트리 편집을 해봅시다
1.좌측의 폴더트리에서 아래의 순서대로 하위폴더로 이동하십시요
HKEY_LOCAL_MACHINE
↓↓↓↓↓↓↓↓
SYSTEM
↓↓↓↓↓↓↓↓
CurrentControlSet
↓↓↓↓↓↓↓↓
Control
↓↓↓↓↓↓↓↓
Session Manager
↓↓↓↓↓↓↓↓
Memory Management
2.Memory Management를 클릭하면 우측에 몇개의 파일들이 보일것입니다.
그럼 파일이 없는 빈공간흰곳 아무대나 마우스커서를 올려놓고 오른쪽클릭을 합니다.
오른쪽클릭을하면 하위메뉴가 나옵니다 하위메뉴에서
새로만들기 -> DWORD값을 선택합니다
마우스 오른쪽 버튼 클릭하여 새로만들기->DWORD값을 선택한다.
그럼 파일이름을 입력하게됩니다
파일이름은 : IoPageLockLimit 라고 입력합니다
(반드시!!!반드시!!!대소문자를 정확히!! 구분해야합니다)
3.키값입력하기
파일이름을 IoPageLockLimit 라고 지정해줬으면
아까 만든 그파일 IoPageLockLimit 을 더블클릭합니다
오른쪽의 옵션버튼은 `16진수`를 선택합니다
그리고 왼쪽의 택스트박스에는 아래와 같이 입력합니다
램이 64MB 일때는 : 1000
램이 128MB 일때는 : 4000
램이 256MB 일때는 : 10000 (램이 256MB이니 10000 이라고 입력하세요)
램이 384MB 일때는 : 22000
램이 512M 이거나 그보다 높을때는 : 40000
===========================================================
2.
● "IoPageLockLimit" 총정리
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management \IoPageLockLimit 값이 디스크 캐쉬 용도? 과연 그럴까요?
1)
IoPageLockLimit 값의 단위는?
우선 마이크로소프트사 사이트에서 "IoPageLockLimit"를 검색해보면 분명 단위가 "bytes" 라고 되어 있다.
2)
IoPageLockLimit 값의 최대 설정 크기는?
- 64MB 미만일 경우엔 “Memory Size = -7MB”
- 64MB ~ 500MB 일 경우엔 “Memory Size = -16MB”
- 500MB 이상일 경우엔 “Memory Size = -64MB”
그러므로, RAM용량이 256MB 인 경우엔 240MB까지 설정가능
3)
IoPageLockLimit 값은 무엇에 쓰이는가?
코리아인터넷닷컴의 게시물을 인용해보면 이 값은 "특정시간에 물리적인 메모리에서 잠금이 될 수 있는 응용 프로그램메모리의 최대량을 나타낸다"라고 나와 있다. (http://korea.internet.com/channel/content.asp?kid=10&nid=17000&cid=112)
이 말은 프로그램에서 파일을 저장 시 하드디스크에 읽고 쓸 데이터에 Lock을 걸 수 있는 최대 크기라는 것이다. (플로피디스크의 경우도 그렇고 랜카드, 프린터 등 모든 하드웨어 장치에 입출력 할 때 사용되는 값이다.)
예를 들어, 메모장에 "abcdefg....z" 라고 쓰여 있을 때 저장하기를 누르게 되면 하드디스크에 저장이 되는데 저장
도중(매우 짧은 시간이지만)에 다른 프로그램에서 데이터를 바꿀 수도 있다. 만약 데이터를 바꿀 수 있다면 어떻게 될까? 메모리의
같은 공간에 읽기와 쓰기가 동시에 일어난다. 데이터가 엉망이 될 것이다. 또한 이 경우 메모리에 있는 데이터를 읽는 데에도
시간이 더 걸린다. 그래서 Lock을 거는 것이다.
그런데 만약 이 값이 너무 작게 설정되어 있다면 어떨까?
16384(16KB)로 설정되어 있는 경우 한번에 16KB까지 락을 건다.
그
런데 메모리에 저장되어 있는 10MB짜리 데이터를 하드에 쓸 경우 우선 맨 앞쪽의 16KB에 Lock을 한 후, 해당 데이터를
하드에 저장한 후 UnLock을 한다. 이 과정을 계속해서 반복하게 되는데 무려 640번을 반복해야 한다. 반면
16777216(16MB)로 설정된 경우 1번만 반복하면 된다.
4)
디스크 캐쉬는 어떤 값으로 설정할까?
디스크 캐쉬는
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
Memory Management 아래에 있는 "LargeSystemCache"라는 값이 담당하고 있다.
값을 보면 Windows XP, Windows 2000 Pro의 경우 0, Windows 2000 Server의 경우 1로 설정되어 있다.
▶ 0의 경우 RAM용량 -8MB까지 캐쉬로 사용하고 1000개의 파일까지 캐쉬한다.
▶ 1은 RAM용량 -4MB까지 캐쉬로 사용하고 250개의 파일까지 캐쉬한다.
이 설정은 웬만하면 바꾸지 않는 것이 낳을 듯 싶다. Server의 경우 개인적인 용도로 사용한다면 0으로 고치는 것도 괜찮을 듯 싶다.
5)
IoPageLockLimit 값의 최상 값은?
다시 IoPageLockLimit 값으로 돌아가서 실제 적용할 수 있는 크기는 RAM용량/8로 설정하면 된다. 즉, 다음과 같이 10진수 값으로 설정하면 된다.
32MB= 4194304
64MB= 8388608
128MB= 16777216
192MB= 25165824
256MB= 33554432
384MB= 50331648
512MB= 67108864
참고)
DisablePagingExecutive 값은 1로 하는 것이 좋은가?
우선 이 값은 널리
알려진 대로 "Drivers and the kernel 을 실제 메모리상에만 존재하게 하느냐, 아니면 가상메모리상에 Paging
하느냐"를 설정하는 값인데 0으로 할 경우에는 Paging 되고, 1로 하면 실제 메모리상에만 존재하게 된다. 빠른 속도를
위해선 1로 설정하는 것이 좋다.
L: http://club.kpda.com/hikki/files/lan.rtf
-----------------------------------------------------------
보통 속도패치는 레지를 수정합니다.
<자신의 MTU 값 구하는 방법>
우선 Windows안에 있는 MS-DOS 모드에서 Ping Test를 통해 Largest Non_Fragmented Value를 구해야 합니다.
시작-실행-cmd를 실행하면 명령프롬프트창이 뜹니다
MS-DOS 모드 명령어 실행
기본례) c:\>ping -f -l [Packet 사이즈(1 ~ 1500)] [ 서비스 회사의 주소]
실례) c:\>ping -f -l 1500 www.kornet.net
f 다음의 기호는 숫자 1 이 아니고 영어 소문자 l 입니다.
패킷 사이즈는 1500 부터 시작해서 숫자단위를 20씩 줄여나가면서(일단위부터 줄여나가도 상관없어요) 내려오면되구요. 이 핑테스트를 했을때
packet needs to boe fragmented but DF set이란 에러 대신에 Reply from ...
이라고 나오면은 이값을 구합니다. 거기서 만약 나온값이 1472 라면 거기서 멈추지 말고 한숫자 위에 걸로 또
해보세요..1473 ..또 Reply from 나오면 또 올려보구요.
이 최대값이 Largest Non-Fragmented Value, 즉 깨지지 않는 가장 큰 단위(Packet)이며,
Ping test를 통해 얻은 이 Largest Non-Fragmented Value에 28을 더한 값이 MTU값이 됩니다.
아마 한통 사용자들은 대개 1464 부터 reply from 이란 메시지가 나올듯싶네요.여기에 28을 더한값이 MaxMTU 값이죠.
다른 서비스업체분들도 저렇게 자신의 MTU값을 구해보세요. 서비스 회사의 주소는 자신이 가입되어 있는 통신 회사의 주소를 적는거 잊지말구요. (저의 경우 1472가 나오네요)
<자신의 MSS값 구하는 방법>
ping test로 얻은 MTU(Maximum Transmission Unit)값에서 Header의 크기인 40을 빼면 MSS(Maximum Sagment Size) 가 됩니다.
*계산 방법
저의경우 예)1500 - 40 = 1460
위의 1460이 MSS값입니다.
< RWIN값 구하기 >
RWIN의 값은 정확하게 MSS의 배수가 되어야 합니다. 그래야만 Packet의 손실을 막을 수 있습니다. 비씨파크는 MSS에 176 사이스피드는 352를 곱했네요. 저는 176을 곱해서 256960이란 값으로 해보겠습니다.
(176곱한걸 추천합니다. RWIN값이 높으면 지연율이 높을수 있다네요.. 그리고 이왕이면 3년동안 연구했다던 박병철(비씨파크 대표 --;;)의 말을 믿어보는게 좋을거 같기도 하고...)
그리고 이 숫자를 16진수 값으로 바꿔야 하는데 하는 방법은 윈도우에 있는 계산기 실행시켜서 보기탭에서 공학용으로 바꿉니다. 숫자를 입력한후 Dec에서 Hex로 바꾸면 됩니다. 저의경우 3ebc0으로 나왔네요.
< TTL값 구하기 >
이 값은 가능한 값(64 or 128) 중에서 하나를 선택해 Ping test에서 얻은 근사치를 적으면 됩니다. 위에서
MTU 구할때 핑테스트시, 오른쪽에 보면 TTL 수치도 뜨죠.거기서보구 근사치를 입력해줍니다. TTL은 속도와는 무관합니다.
(저는 122가 나왔기때문에 TTL값은 128로~)
이제 레지스트리를 직접 만들어 봅니다
텍스트 문서를 하나 만들어서 다음 내용을 적습니다.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"SackOpts"=dword:00000001
"TcpWindowSize"=dword:0003ebc0
"Tcp1323Opts"=dword:00000001
"DefaultTTL"=dword:00000080
"EnablePMTUBHDetect"=dword:00000000
"EnablePMTUDiscovery"=dword:00000001
"GlobalMaxTcpWindowSize"=dword:0003ebc0
TcpWindowSize와 GlobalMaxTcpWindowSize에는 앞에서 구한 16진수로 된 RWIN 값을 적습니다. 저의 경우는 3ebc이네요
TTL에는 64일경우 40을, 128일경우 80을 적습니다.
MTU
값에는 아까 핑테스트에서 구한 Largest Non-Fragmented Value 값을 적습니다. 저의 경우 1472네요
(대부분 1472나 1464일듯) 이걸 그대로 적는게 아니라 16진수로 변환해야하는데 1472는 16진수로 5c0 1464는
5b8이네요
이렇게 한후 저장한다음에 확장자를 reg로 바꿔주세요
ADSL 사용자는 "SessionKeepAlive"=dword:000927c0 값을 추가시켜 줘도 됩니다. 10분으로
적었는데 이건 10분마다 사용자가 인터넷을 안 사용 하더라도 자동으로 핑으로 트래픽을 발생시켜 인터넷 라인이 끊어지는 것을
방지합니다. (ADSL사용자라면 추가하는게 좋을듯)
실제로 이렇게 만들어서 레지추가하면 비씨파크나 사이스피드랑 똑같습니다. 굳이 돈들여서 프로그램을 살필요가 없는거죠.
비싸파크 속도패치 유료화한다는게 어이가 없습니다 -_-;; 대단한 프로그램도 아니면서 유료화라니..간단한 레지만지는것으로
돈받으려 하다니... 초보자에겐 그런게 편할지 몰라도 어느정도 컴을 다룰줄 아는 분이라면 직접 만들어서 하는게 좋은거 같습니다.
(윈도우 다시깔때도 레지등록만 해주면 되니까요)
No comments:
Post a Comment