'전송속도'에 해당되는 글 1건

  1. 2008.10.07 하드디스크 PIO모드 방지하기 by 매그놀리아 8
반응형
요즘들어 느려진 느낌과 "C:, D:"에서 "지연된 쓰기 실패"에러가 반복되 확인결과,
갑자기 SATA 하드가 PIO모드로만 작동하는 사건 발생!
하드간 복사시 전송률이 1MB대로 떨어졌다.
확인해보니 WD2500JS가 PIO모드로 되어있는 것이 아닌가!
설치 당시의 상태를 기록해 두지 않아서 비교는 불가하지만, 현재 상태는 다음과 같다.

(장치관리자의 정보를 종합한 결과)
기본 IDE 채널
장치0 : PIO 모드  (WD2500JS)
장치1 : U-DMA 5   (GSA-H62L)
기본 IDE 채널
장치0 : PIO 모드 (GCE-8320B)
장치1 : 적용할 수 없음
보조 IDE 채널
장치0 : U-DMA 5   (WD3200AAJS)
장치1 : 적용할 수 없음
보조 IDE 채널
장치0 : 적용할 수 없음
장치1 : 적용할 수 없음
Samsung SV8004H SCSI(80GB) : Bus Number 0, Target ID 0, LUN 0
WDC WD2500JB SCSI(250GB) : Bus Number 0, Target ID 2, LUN 0
WDC WD2500JS (250GB) : 위치 0 (0)
WDC WD3200AAJS (320GB) : 위치 0 (0)
GSA-H62L : 위치 1 (1)
GCE-8320B : 위치 0 (0)

이상이다.

문제점은,
"가장 빨라야 할 WD2500JS가 PIO모드로 동작한다"는 것이다.

시스템 현황은,
OS : WinXP SP2
atapi.sys : 95,360 bytes / 20040803 / 5.1.2600.2180

해결방법을 검색한 결과 아래 두 가지가 나왔다.

1. Microsoft KB
시간 초과 또는 CRC 오류가 여러 번 발생한 후 IDE ATA 및 ATAPI 디스크에서 PIO 모드를 사용한다
http://support.microsoft.com/kb/817472(새 창으로 열기)
단, SP2에서 해결된 문제이며, 레지스트리를 수정해야 적용됨(마지막 검토 : 20071203).
설명 : "Windows 2000에서만 종종 시간 초과 값이 4초로 지정된 ATA 디스크에 대한 읽기 요청이 실행됩니다. 컴퓨터가 대기 모드에서 다시 시작하면 이러한 경우가 발생합니다. 대개 드라이브가 스핀업하는 데 4초 이상 걸리기 때문에 이런 경우 디스크 시간 초과가 발생할 수 있습니다. 이 시간 초과 값이 10초로 변경되었습니다.
(Windows XP 및 Windows Server 2003에서 이 시간 초과 값은 항상 10초입니다.)
시간 초과 및 CRC 오류를 해결하기 위해 빠른 DMA 모드에서 느린 DMA 모드로, 마지막에는 PIO 모드로 전송 모드를 낮추도록 보다 소극적인 대체 정책을 구현합니다. 기존에는 IDE/ATAPI 포트 드라이버(Atapi.sys)가 시간 초과 또는 CRC 오류가 누적되어 6번 발생한 이후에 전송 모드를 낮추었습니다. 이러한 수정 프로그램에 의해 새 정책이 구현되면 Atapi.sys는 시간 초과 또는 CRC 오류가 연속하여 6번 발생한 이후에만 전송 모드를 낮춥니다. 이 문서의 뒷 부분에서 설명한 레지스트리 값이 있는 경우에만 이러한 새 정책이 구현됩니다."
->내 컴퓨터 레지스트리 확인 결과 해당 값(ResetErrorCountersOnSuccess / DWORD)이 존재하지 않으므로 입력하고
데이터를 1로 설정
(HKLM\\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0000 부터 5 중에
'기본 IDE 채널'과 '보조 IDE 채널'에만 값을 삽입한다.)
*참고 : 이 설정은 전송 모드를 수정하는 것이 아니라 현재의 설정이 쉽게 바뀌지 않도록 하는 설정이다.
따라서, PIO 모드로 설정이 됐다면 고속 모드로 바꾸는 절차가 필요하다.

2. CD-ROM 또는 하드디스크가 PIO로 설정되는 경우
http://qaos.com/article.php?sid=1510(새 창으로 열기)
(작성 : 20030723)
ㅇ장치관리자의 "IDE... 컨트롤러"에서 각 채널의 등록정보(속성)를 열고 '고급 설정'에서 각 장치의 전송 모드를 설정
ㅇ위 방법이 통하지 않을 경우,
HKLM\\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0001 부터 5까지
다음의 값을 변경(어떤 채널의 Master인가 Slave인가 확인 후 해당하는 곳에만 설정)
MasterDeviceTimingMode 0xnn
MasterDeviceTimingModeAllowed 0xffffffff
UserMasterDeviceTimingModeAllowed 0xffffffff
SlaveDeviceTimingMode 0xnn
SlaveDeviceTimingModeAllowed 0xffffffff
UserSlaveDeviceTimingModeAllowed 0xffffffff
'0xnn'은 16진수로서 모드에 따라 아래의 값을 사용
10(16) - PIO Mode
210(528) - Multi-word DMA Mode 1
410(1040) - Multi-word DMA Mode 2
810(2064) - Ultra-DMA Mode 0
1010(4112) - Ultra-DMA Mode 1
2010(8208) - Ultra-DMA Mode 2
4010(16400) - Ultra-DMA Mode 3
8010(32784) - Ultra-DMA Mode 4
10010(65552) - Ultra-DMA Mode 5
20010(131088) - Ultra-DMA Mode 6

적용하기 전에 내 상태를 확인결과,
0000에는 Serial ATA Storage Controller,
0001에는 Ultra ATA Storage Controller가 매칭되어 있고,
0002에는 기본 IDE 채널
MasterDeviceTimingMode 0x10     --> 문제의 WD2500JS가 연결되어 있는 곳!!
MasterDeviceTimingModeAllowed 0x0000001f
MasterDeviceType 0x1
SlaveDeviceTimingMode 0x10010
SlaveDeviceTimingModeAllowed 0xffffffff
SlaveDeviceType 0x2
0003에는 보조 IDE 채널
MasterDeviceTimingMode 0x10010
MasterDeviceTimingModeAllowed 0xffffffff
MasterDeviceType 0x1
SlaveDeviceTimingMode 0
SlaveDeviceType 0
0004에는 기본 IDE 채널
MasterDeviceTimingMode 0x10
MasterDeviceTimingModeAllowed 0x1f
MasterDeviceType 0x2
SlaveDeviceTimingMode 0
SlaveDeviceTimingModeAllowed 0x1f
SlaveDeviceType 0
0005에는 보조 IDE 채널
MasterDeviceTimingMode 0
MasterDeviceType 0
SlaveDeviceTimingMode 0
SlaveDeviceType 0


등이다. 특이하게 User...라는 키는 없다.

자, 준비와 사전확인은 끝냈고, 이제 수정에 들어간다!!
최소한의 변경으로 악화를 막기 위해 문제가 되는 부분만 고친다.

1. 일단 ResetErrorCountersOnSuccess값을 새로 만들고 '1'로 설정

2. 문제가 되는 WD2500JS는 기본 IDE 채널의 장치0(Master)에 연결되어 있으므로,
0002(기본 IDE 채널)에서
MasterDeviceTimingMode 데이터를 '0x10'에서 '0x10010'으로,
MasterDeviceTimingModeAllowed 데이터를 '0x0000001f'에서 '0xffffffff'로 변경

재부팅!!

결과는,
기본 IDE 채널
장치0 : U-DMA 5   (WD2500JS)
장치1 : U-DMA 5   (GSA-H62L)

일단 빠르게 나왔다. 그런데, U-DMA 6로 설정하면 더 빨라질까?
그리고, DeviceType은 '자동감지'냐 '없음'이냐 둘 중의 하나를 뜻하는 거 같은데,
왜 0, 1, 2 세 개의 값이 있을까?

헉! 근데, 다시 file을 D drive로 복사하는데 속도가 1MB 겨우 넘는다. 이럴수가...뭔가 다른문제가 있나보다.

chkdsk로 다시 검사!

C:\Documents and Settings\user>chkdsk c:
파일 시스템 유형은 NTFS입니다.
경고! F 매개 변수가 지정되지 않았습니다.
CHKDSK를 읽기 전용 모드로 실행합니다.
CHKDSK에서 파일을 확인합니다. (1/3 단계)
파일 확인 작업을 완료했습니다.
CHKDSK에서 색인을 확인합니다. (2/3 단계)
색인 확인 작업을 완료했습니다.
CHKDSK에서 보안 설명자를 확인합니다. (3/3 단계)
보안 설명자를 확인했습니다.
전체 디스크 공간:   10241405KB
   7124756KB (28540개 파일)
색인 3021개:      10400KB
잘못된 섹터:          0KB
시스템 사용:      96041KB
로그 파일이      53264KB가 되었습니다.
사용 가능한 디스크 공간:    3010208KB
각 할당 단위 크기:       4096바이트
디스크의 전체 할당 단위 개수:    2560351개
디스크에서 사용 가능한 할당 단위 개수:     752552개
C:\Documents and Settings\user>chkdsk d:
파일 시스템 유형은 NTFS입니다.
볼륨 레이블은 SATA입니다.
경고! F 매개 변수가 지정되지 않았습니다.
CHKDSK를 읽기 전용 모드로 실행합니다.
CHKDSK에서 파일을 확인합니다. (1/3 단계)
파일 확인 작업을 완료했습니다.
CHKDSK에서 색인을 확인합니다. (2/3 단계)
색인 확인 작업을 완료했습니다.
CHKDSK에서 보안 설명자를 확인합니다. (3/3 단계)
보안 설명자를 확인했습니다.
전체 디스크 공간:  233954563KB
 211075968KB (138378개 파일)
색인 4784개:      44632KB
잘못된 섹터:          0KB
시스템 사용:     246519KB
로그 파일이      65536KB가 되었습니다.
사용 가능한 디스크 공간:   22587444KB
각 할당 단위 크기:       4096바이트
디스크의 전체 할당 단위 개수:   58488640개
디스크에서 사용 가능한 할당 단위 개수:    5646861개
C:\Documents and Settings\user>


뭐가 문제지?
뭔가 빨라진 느낌은 드는데, 전송속도는 느리다..ㅡㅡ;

p.s.>
설 연휴 지나고 다시 점검

D에서 F로 368MB file을 복사하는데 42MBs 속도
F에서 D로 368MB file을 복사하는데 33MBs 속도..응?
F에서 C로 368MB file을 복사하는데 52MBs 속도..응???

만족할 만 한 수치가 나온다??? 흠. 새해 새로운 마음으로 몸가짐을 단정히 했나보다..ㅡㅡ;

<출처 : http://php.chol.com/~ymister/tt/60>


어느 순간부터 갑자기 PC가 엄청 느려졌습니다. 부팅만 하는데 5분 정도 걸리고, 프로그램 실행하면 CPU 리소스를 거의 100% 잡아 먹으면서 느릿느릿 실행되고. 

PC나 디스크에 따라서 특정한 상황이 되면 DMA 모드가 자동으로 PIO로 바뀌는 경우가 자주 있다고 보고되고 있다고 합니다.  PIO(Programmed Input-Output)는 CPU가 데이터를 전달하는 방식이라 CPU에 많은 로드가 되어 시스템이 현저하게 느려지게 됩니다.

 문제 해결:  

DMA 설정이 PIO로 바뀌어 있는 경우 이를 복구하는 내용이 있었는,

BIOS 설정에도, Windows XP 장치관리자에서 설정사항을 봐도 이상이 없었습니다. 

혹시나 하는 생각에 내용에 따라 문제를 해결하는 VB 스크립트 파일을 실행하고, 리부팅 했더니,

다시 컴이 제정신을 찾았습니다.  

Windows XP update나 설치중에 DMA 설정이 바뀌었는데 Windows XP 시스템 정보는 그것을 제대로 보여주지 못하는 것으로 보입니다.

 
간단한 DMA 복구 방법

1. 첨부 파일을 실행 - resetdma.vbs

2. 경고 메시지가 나와도 무시하고 실행

3. 리부팅

* 첨부 파일을 VB Script로써 DMA을 다시 사용가능하도록 레지스트리 내용을 바꾸어 줍니다.

 

레지스트리 값을 직접 수정

1. 시작 - 실행에서 regedit를 입력하여 레지스트리 편집기 실행

2. 다음 키를 찾아서 선택

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}

3. 서브키로 0000, 0001, 0002 등이 나타난다. 각각을 클릭하면 오른쪽 DriverDesc에 주 IDE 채널 또는 보조 IDE 채널이 표시되므로 필요한 IDE 채널을 선택한다.

4. 오늘 쪽의 값 중에서 MasterIdDataChecksum 또는 SlaveIdDataChecksum 값을 삭제

5. 리부팅 

이렇게 하면 부팅할 때 Windows가 다시 DMA 값을 설정합니다.

비슷한 문제를 갖고 있다면, 한번 시도해 보시기 바랍니다. 

출처사이트는 http://www.michna.com/kb/WxDMA.htm

 

반응형
l