IDE 하드와 SATA 하드의 리눅스에서 속도 차이
글쓴이: kilhan / 작성시간: 목, 2005/11/17 - 2:42오후
안녕하세요
제가 며칠 계속 SATA 하드에서 DMA 문제로 고생을 하고 있습니다.
며칠전에도 글을 올렸습니다.
http//bbs.kldp.org/viewtopic.php?t=65960
제 생각으로는 SATA 하드에서 hdparm으로 DMA가 지원되지 않아 CPU의 부담이 꽤 생길것으로 여기어
반드시 DMA를 enable해야 겠다 여러가지 시도를 하였습니다.
그런데 위 답글을 보시면 hdparm 으로 enalbe 할필요가 없다 였습니다.
그래서 제가 테스트를 해보았습니다.
모든것은 동일하며 (RHEL4-2)
다만 차이가 있는것은
IDE 250 G 하드와 SATA 250G 하드 뿐입니다.
테스트 결과는 놀라왔습니다.
1)
real 1m50.747s
user 0m53.420s
sys 0m16.440s
2)
real 5m27.433s
user 3m25.317s
sys 0m27.372s
엄청난 차이를 보이더군요 =.=
과연 무엇이 SATA 일까요?
네 정답은 2번 입니다. ㅠ.ㅠ
이 상태에서 어떻게 SATA를 쓸지 난감합니다.
리눅스에서 SATA 하드 정상적으로 사용하고 계시는 분이 있기는 한건지요?
여러분들의 많은 고견 부탁드립니다.
Forums:
시간 측정을 한 것으로 봐선 대용량 파일을 카피하고 그 시간을 측정한것
시간 측정을 한 것으로 봐선 대용량 파일을 카피하고 그 시간을 측정한것 같군요.
하드디스크 속도측정의 한 방법이기야 하지만 별로 신뢰할만한 결과치는 아니죠.
(테스트에 사용한 파일의 source 파티션과 target 파티션의 파일시스템 상태에 큰 영향을 받는 실험이기 때문이죠)
hdparm 의 -t 옵션을 사용한 벤치마킹을 하는게 낫습니다.
커널을 새로 컴파일 하였다면, 커널 메세지를 확인해 보는게 좋을듯 싶네요.
일반 IDE 컨트롤러의 경우는
해당 컨트롤러를 "정확하게" 인식하지 못하면 pio 모드를 사용하고,
"정확하게" 인식한다면 기본적으로 DMA 를 사용합니다.
SATA 컨트롤러라고 해서 이런것이 틀릴거라고 생각되지는 않네요.
속도 테스트에 관련해서는..
우선 답변에 감사 드립니다.
혹시나 해서 테스트에 대해서 말씀 드리는데
회사에서 해당 서버가 할일을 가지고 테스트 한것입니다.
주로 DB를 바탕으로 인덱스를 추출하고
해당 인덱스를 바탕으로 다시 DB를 구성하는
I/O가 많은 분석 작업 입니다.
그리고 테스트를 할때의 서버 상태는 동일! 합니다.
왜냐하면 테스트를 위하여
같은 서버에 같은 패키지를 사용하여 설치한후
같은 DB를 분석하였기 때문이죠.
(동일한 상태를 유지하기 위하여 매 테스트후 리붓을 했었죠)
(결과를 1개 올렸다고 테스트를 1번 한것은 아니었습니다^^;)
그리고 저는 hdparm -t 테스트 옵션을 신뢰하지 못한다 입니다.
왜냐하면 hdparm 테스트 에서는 SATA가 훨씬 빠르게 나왔기 때문입니다.
이것은 제 생각으로는 테스트 시에는 I/O에 CPU가 할당되어 속도가 빠르지만
실제 프로그램 동작시에는 CPU연산과 I/O를 동시에 수행하여야 하기 때문에
속도가 느려지는것이라고 생각합니다.
이를 위하여 DMA가 필요한데 SATA에서는 DMA를 enable할수가 없더군요.
(제 생각은 항상 DMA 군요..^^;)
어찌되었건 답변에 매우 감사드립니다.
아, 그리고 커널에서는 ICH7을 정상적으로 인식은 합니다.
=> 그래서 제가 미치겠습니다 ^^;
scsi 하드가 dma 를 지원하지 않는다고 ide 하드보다 cpu 를
scsi 하드가 dma 를 지원하지 않는다고 ide 하드보다 cpu 를 많이 먹나요? 아님 scsi disk 에 dma 를 키기위해 삽질을 해야하나요?
답은 "아니오" 입니다...
참고로 리눅스커널에 sata 드라이버가 두 종류입니다 libata 랑 뭐랑 해서 두가지인데 ... libata 쪽이 버그도 적고 훨씬 낫다고 알고 있습니다...
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
hdparm 의 테스트는 순전히 하드웨어의 성능 테스트입니다.하지만,
hdparm 의 테스트는 순전히 하드웨어의 성능 테스트입니다.
하지만, I/O 가 많이 걸리는 프로그램의 수행시간 테스트는
I/O 의 형태(당연하겠지만 Random Access 가 많을수록 느려집니다.
위의 글에서 파일시스템의 상태를 이야기한것도 마찬가지 의미입니다.) 에 큰 의존성을 가지며,
실제 하드웨어의 성능이 미치는 영향은 크지 않습니다.
이 부분을 같은 장비와 같은 배포본을 가지고 IDE 하드와 SATA 하드에 두번 설치했다.
라고 이해했습니다. (맞나요?)
설치 과정이 완전히 같더라도(즉, 설치되는 패키지까지 완전히 똑같더라도)
하드디스크 상에 파일시스템 안에 파일들이 들어가는 형태까지도
같다고 이야기 할 수 없습니다.
만약에 제가 같은 상황이라면 텅 빈 파일시스템에 DB 만 넣은 다음, 해당 파일시스템의 raw-dump 를 두 하드디스크에 넣고 테스트 해 볼것 같습니다만..
회사라는 환경에서는 좀 힘들겠네요 -.-;;;
정태영님이 말씀하신 libata 는 SCSI Subsystem 에 포함되어 있는 SATA 지원인것 같습니다.
Device Drivers -> SCSI device support -> SCSI low-level drivers -> Serial ATA (SATA) Support -> Intel PIIX/ICH SATA Support
참고로, 커널 2.6.14 에서는 IDE 드라이버쪽에서의 SATA 지원은 deprecated 입니다
또한, 커널 메세지상에 ICH7 관련 메세지가 있다고 해서 커널에 ICH7 관련 드라이버가 있다라고 보기는 힘듭니다.
generic 드라이버를 이용하는 것일수도 있기 때문이죠.
generic 드라이버를 이용하게 되면 동작은 하되 정상동작하지 않거나, 지금 상황처럼 성능상에 문제가 생기거나 하는 경우가 많습니다.
IDE 의 경우에는 DMA Enable 이 불가능한 현상도 나타납니다.
아, DMA 가 나와서 하는 이야기지만...
위에 적어놓은 SCSI Subsystem 을 이용한 SATA 사용은 당연하게도 DMA Enable 할 수 없습니다. SCSI 로 취급되거든요.
[quote]아, DMA 가 나와서 하는 이야기지만...위에 적어
그렇다면 SATA는 DMA를 사용하지 않는다는 말씀이신가요. DMA를 사용하지 않는다면, SATA는 어떤 방법으로 메모리와 디스크 사이에 데이터를 전송하나요?
혹시 "DMA컨트롤러를 쓰지 않고, SATA컨트롤러가 직접 메모리와 디스크 사이의 데이터 전송을 담당합니다" 와 답변이 있을 수도 있는데요, 만약 그렇다면, 이경우, SCSI 가 SATA에 대해서 가지는 장점은 무엇일까요?
[quote="Anonymous"][quote]아, DMA 가 나와서
음. 그런 의미로 받아들일수 있는 문장이였나요?
제가 의도한 것은, 흔히 DMA enable 시에 사용하는 hdparm -d 1 이라는 커맨드가 먹지 않는다는 의미였습니다만...
현재 커널상에 작성되어 있는 SATA 디바이스 드라이버들은
DMA 모드가 사용 가능하면 DMA Enable 상태로 동작합니다.
사용할수 없는 상태일때 PIO 모드로 동작하죠.
사용할 수 없는 상태가 어떤 상태인가에 대한 의문이 있을 수 있는데..
일반적인 문제(하드웨어 충돌에 의한 DMA 사용 불가등의 문제)거나
아니면 현재 커널에 작성되어 있는 SATA 디바이스 드라이버에 아직 DMA 모드가 구현되지 않은 경우일 수도 있습니다
답변에 감사 드립니다.
글을 작성하다가 실수로 글이 날라가서 다시 적고 있네요.^^;
(역시 온라인 상의 글쓰기는 백업이 필수 입니다)
우선 답변에 감사드립니다.
그리고 답변을 달고 있는 사이에 새로운 답변이 달려서 읽어 보았습니다.
hdparm 으로는 enable 할수가 없다는 뜻 이해하였습니다.
그리고 커널의 부팅 메세지로는 칲셋을 인식하였어도
정상적으로 DMA를 사용하는지의 확인이 불가능 하다는 이야기 역시
다시 배웠습니다.
그렇다면 커널에서 DMA를 사용하고 있는지 확일할수 있는 방법은 무엇일까요?
그리고 ICH7의 경우 최신 칲셋이기 때문에
새로운 커널을 기다리는것도 좋은 방법일수 있지만
제가 ICH6으로 테스트를 하였는데
그때도 역시 매우 느렸습니다.
그래서
인텔에서 주로 사용하는 사우스브리지인데 최신 커널에서 지원이 되지 않는다고
생각을 하지 못하여 기다리기 보다는
테스트를 해보자가 저의 생각이었습니다.
혹시 SATA에서 정상적으로? 작동하도록 설정되는 칲셋을 아시는지요?
(그러니까 ICH만의 문제인지 SATA의 문제인지가 궁금하기도 한것입니다)
[quote="kslee80"][quote="Anonymous"][quo
답변 감사드립니다.
처음 문장에 문제가 있는게 아니라, 제가 평소에 궁금해 하고 있던 점이 있어서 곁다리로 질문드린 거였습니다.
SCSI와 IDE를 이야기하면서 IDE가 데이터 전송 자체를 CPU가 하는데 비해서, SCSI는 컨트롤러가 담당하기 때문에 CPU에 부담을 덜 준다. 라고 알고 있습니다. 그런데, 요즘 IDE도 DMA를 사용하는데 이 말은 요즘 상황에서는 틀린 말이 아닐까 하는 의문이 들더군요... 어차피 SCSI 컨트롤러가 잘나봤자, 제 생각으로는 DMA컨트롤러 보다 그다지 대단한 작업을 하지 않을 것 같거든요.
물론 SCSI HDD 자체의 성능이라든지, HDD이외의 다양한 장치를 연결할 수 있다는 점 등을 제외하고,,, HDD에 국한해서 생각해 보았을 때의 이야기입니다.
PIO4 mode[quote]ata1: SATA max PIO4 cm
PIO4 mode
DMA mode
대략적으로 이런 형식의 메세지인것으로 압니다.
ICH7 이라고 말씀하셨는데....
ICH7 에 대한 공식적인 지원이 시작된 버젼은 2.6.10 인것 같습니다.(Changelog 에 언급이 있네요)
ICH7 을 지원하는 SCSI 모듈 이름은 ata_piix 와 ahci 로
둘 다 지원합니다만, ahci 쪽의 상황이 더 나은듯 싶네요.
(ahci 모듈은 Device Drivers -> SCSI device support -> SCSI low-level drivers -> Serial ATA (SATA) Support -> AHCI SATA support)
2.6.11 에서도 약간의 문제가 있었던 분위기이니...최신 버젼의 커널 컴파일을 해서 시도해 보심이 좋을듯 싶습니다.
[quote="Anonymous"]SCSI와 IDE를 이야기하면서 IDE
SCSI 는 컨트롤러 칩에 프로세서를 포함하고 있으며, 이 프로세서가 전송을 담당하게 됩니다.
그렇기 때문에 데이터 전송에 CPU 를 사용하지 않습니다.
(SCSI 의 CPU 사용량에 대해서 a few 라던지 a little 라던지 하는 표현을 사용하지 않고, don't use 라는 식으로 표현하는 것을 보면 아예 안 쓴다라고 생각하는게 맞는듯)
ATA (PATA & SATA) 의 경우는 컨트롤러 칩에 프로세서가 포함되는 형태가 아니기 때문에
DMA 를 사용하더라도 어느정도 CPU 를 사용하게 됩니다.
요즘 CPU 의 성능이 워낙에 좋아졌기 때문에 CPU 사용률이 2~3% 정도로 나옵니다만은 0% 와는 차이가 있죠.
Linux version 2.6.14.2-jemiro (root@jemi
Linux version 2.6.14.2-jemiro (root@jemiro) (gcc version 3.4.4 (Gentoo 3.4.4-r1, ssp-3.4.4-1.0, pie-8.7.8)) #1 PREEMPT Wed Nov 16 21:45:44 KST 2005
ata1: SATA max UDMA/133 cmd 0xEC00 ctl 0xE802 bmdma 0xDC00 irq 10
ata2: SATA max UDMA/133 cmd 0xE400 ctl 0xE002 bmdma 0xDC08 irq 10
ata1: dev 0 cfg 49:2f00 82:746b 83:7f01 84:4023 85:7469 86:3c01 87:4023 88:80ff
ata1: dev 0 ATA, max UDMA7, 390721968 sectors: lba48
ata1: dev 0 configured for UDMA/133
역시 최신 커널은 한방에 잡아주네요.
IDE DMA와 SCSI 하드의 차이 중에 커맨드 큐잉 여부도
무시 못하지 않을까요?
(SATA2도 커맨드큐잉 지원한다고 들었습니다)
[quote="kslee80"][quote="Anonymous"]SCSI
아~~ 그렇군요... 명쾌한 답변 감사드립니다.^^
요즘 그래픽 칩 발전하는 속도 보면, SCSI 정도는 기술적으로 어렵지 않을 거 같은데, 또 그렇지도 않은 거 같습니다.
DMA모드로 사용중인데도 속도가 나오지 않는것은..
kslee80님께서 친절하게
PIO4 와 DMA의 커널 부팅 메세지에 대하여 알려준것에 대하여 감사드립니다.
그래서 서버를 조사하여 보았는데
ata1 SATA max UDMA/133 cmd 0x1F0 ctl 0x3F6 bmdma 0x20A0 irq 14
음.. 저렇게 UDMA를 사용한다고 나옵니다.
그러나 벤치마킹 속도는 역시 IDE 보다 느리네요.
손님들이 답변을 달아 주신 리눅스박스에서는 속도가 빠를까요?
(Linux version 2.6.14.2-jemiro 님에서 테스트)
왜 SATA를 사용하면 느리는지 정말
점점 더 알수가 없어 지네요.
댓글 달기