[시스템] 리눅스 서버 처리 속도 향상
속도 향상에는 크게 6가지 요인이 있다. 3가지는 하드웨어적인 요소고, 3가지는
소프트웨어 적인 요소이다. 물론, 더 나누려면 얼마든지 나눌 수 있으니 여기서
그만하자.
각각, CPU, 램, 메인보드, 커널, 유틸리티, 각종 서비스 … 정도가 될 것이다.
CPU는 빠른 것, 램은 많이, 메인보드는 66 MHz니 100 MHz니, 133 MHz 니 하
는 하는 FSB를 결정하고 또 기타 자잘한 것도 결정한다, 그리고 커널은 메인 보
드에 맞는 커널 옵션, 그리고 유틸리티는 hdparm 등의 유틸리티, 그리고 각종 서
비스는 web, ftp, telnet 등의 서비스 데몬을 어떻게 하느냐에 따른 것이다.
일단 CPU, 램, 메인보드는 뻔하다. 그러니 여기선 제외하고, 나머지 3가지를 보
자.
단, 하드디스크 입출력 속도는 … 그 하드디스크가 IDE 일 경우에 IDE 채널에
CD-ROM과 같이 물려 있느냐, 그냥 혼자 있느냐, 하드디스크끼리 물려 있느냐에
따라서 상당한 차이를 보인다.
먼저 커널 최적화다. 다른 부분은 다 최적화 되었다고 가정하고 두가지 부분만
알아보도록 하겠다.
일단 /usr/src/linux 에 들어가서 make menuconfig를 해보자. root 로 해야 한다.
커널 버전, 배포판, 패치에 따라서 조금씩은 다르지만, 커널 2.2.16 에서는 다음과
같은 것을 볼 수 있다.
Processor type and features —>
Block devices —>
이 두 개의 옵션을 유심히 보자.
일단 Processor type and features 으로 들어가자.
(Pentium/K6/TSC) Processor family
(1GB) Maximum Physical Memory
[ ] Math emulation
[*] MTRR (Memory Type Range Register) support
[ ] Symmetric multi-processing support
위에서부터 보자. CPU 타입을 정해준다. 반드시 자기와 맞는 것을 정해주자. 펜
티엄 3 라고 해도 386 이라고 하면 속도 빠른 386 밖에는 되지 못한다. 펜티엄 2
나 3는 PPro 라고 정해주자. 내 경우는 K6-2 이기 때문에 K6를 선택했다.
[ ] Math emulation 이건 요즘엔 체크할 필요가 없다. 386이나 486SX에서
FPU(Floating Processing Unit ; 일명 coprocessor) 가 없던 때에 쓰던 것이
다. 체크하지 말자.
[*] MTRR (Memory Type Range Register) support … 체크하자. 속도가 빨라진
다.
[ ] Symmetric multi-processing support CPU가 2개, 4개 되는 시스템에서 SMP
지원을 하느냐 안하느냐에 대한 옵션이다. 보통 CPU가 1개이니 체크하지 않
아도 되지만, 만일 2개나 4개짜리를 쓴다면 꼭 체크하자. 비싸게 주고 산
CPU와 메인보드인데, 써먹어야 하지 않겠는가…
이번엔 Block devices 로 들어가보자.
[*] Generic PCI IDE chipset support을 아래에 있는 옵션이 중요하다.
자신의 메인 보드에 맞는 것을 선택해야 한다. 단,
[*] Generic PCI bus-master DMA support
[*] Use DMA by default when available
이 두 옵션은 꼭 켜주자. 내 경우는
[*] VIA82C586 chipset support (EXPERIMENTAL)
를 체크했다.
반드시 한번은 컴퓨터 뚜껑을 열어서 CPU 칩셋이 무엇인지를 알아보는 것도 좋
다.
그 밖의 옵션들은 그다지 영향을 미치지는 않는다. 물론, 절대적으로 영향을 미
치지 않는 것은 아니다.
커널 컴파일을 하고… 리부팅을 하면 … 이제 커널은 시스템에 최적화 되었을 것
이다.
이번엔 hdparm 에 대해서 알아보자.
배포판에 따라서 있는 경우도 있고, 파워 리눅스 R2처럼 빼먹는 경우도 있다.
http://freshmeat.net 등에서 다운 받아서 써보자.
man hdparm 해보면 알겠지만, 엄청나게 많은 옵션이 있다. 하지만, 우리가 쓸
것은 그리 복잡한 옵션은 아니다.
/sbin/hdparm -c -d1 -X66 hdd device
이게 내가 쓰는 옵션이다. 구체적인 명령어는
/sbin/hdparm -c -d1 -X66 /dev/hda
/sbin/hdparm -c -d1 -X66 /dev/hdb
/sbin/hdparm -c -d1 -X66 /dev/hdd
으로 되어 있다. /dev/hdc 는 CD-ROM 이고, /dev/hdd 는 하드랙에 붙여 있는
이동용 하드이다.
대충 옵션을 보면
-c : 32비트 입출력 on
-d1 : DMA on/off -d0는 off
-X66 : Ultra DMA2 mode, 만일 인텔의 430FX 칩셋이나 HX, VX 등을 쓴다면
-X34
정도다.
여기에 -W 옵션을 적으면 write-cache 가 켜지므로 더 빨라지지만 약간의 위험
부담이 있을 수 있으며, -X66 옵션은 한번 해서 이상하다 싶으면 바로 꺼줘야
한다.
이렇게 커널 컴파일과 hdparm을 이용하여 어느정도 최적화를 하고 나면 …
[root@akpil /root]# hdparm -it /dev/hda
/dev/hda:
Model=QUANTUM FIREBALLlct10 20,
FwRev=A03.0900, SerialNo=174936112652
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=32256, SectSize=21298, ECCbytes=4
BuffType=3(DualPortCache), BuffSize=418kB, MaxMultSect=16,
MultSect=off
DblWordIO=no, OldPIO=2, DMA=yes, OldDMA=2
CurCHS=16383/16/63, CurSects=-66060037, LBA=yes,
LBAsects=39876480
tDMA={min:120,rec:120}, DMA modes: mword0 mword1 mword2
IORDY=on/off, tPIO={min:120,w/IORDY:120}, PIO modes: mode3 mode4
UDMA modes: mode0 mode1 *mode2 mode3 mode4
Timing buffered disk reads: 64 MB in 5.11 seconds = 12.52 MB/sec
[root@akpil /root]# hdparm -it /dev/hdb
/dev/hdb:
Model=WDC WD307AA, FwRev=05.05B05, SerialNo=WD-WMA111547633
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs
FmtGapReq }
RawCHS=16383/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=3(DualPortCache), BuffSize=2048kB, MaxMultSect=16,
MultSect=off
DblWordIO=no, OldPIO=2, DMA=yes, OldDMA=0
(maybe): CurCHS=65535/16/0, CurSects=0, LBA=yes,
LBAsects=60074784
tDMA={min:120,rec:120}, DMA modes: mword0 mword1 mword2
IORDY=on/off, tPIO={min:120,w/IORDY:120}, PIO modes: mode3 mode4
UDMA modes: mode0 mode1 *mode2 mode3 mode4
Timing buffered disk reads: 64 MB in 4.60 seconds = 13.91 MB/sec
/dev/hdd:
Model=IBM-DJNA-351520, FwRev=J56OA30K, SerialNo=G80GLWB7857
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=34
BuffType=3(DualPortCache), BuffSize=430kB, MaxMultSect=16,
MultSect=off
DblWordIO=no, OldPIO=2, DMA=yes, OldDMA=2
CurCHS=16383/16/63, CurSects=-66060037, LBA=yes,
LBAsects=30033360
tDMA={min:120,rec:120}, DMA modes: mword0 mword1 mword2
IORDY=on/off, tPIO={min:240,w/IORDY:120}, PIO modes: mode3 mode4
UDMA modes: mode0 mode1 *mode2 mode3 mode4
Timing buffered disk reads: 64 MB in 13.67 seconds = 4.68 MB/sec
마지막의 /dev/hdd 가 느린 이유는 CD-ROM 과 같이 달려 있기 때문이다.
최신 칩셋이라는 VIA694X 칩셋에서 테스트한 결과가 대충 14 MB/sec 수준이
다. – 신영미디어에서 나오는 Linux@Work 7월호 102쪽 참조. – 거의 떨어지지
않는 속도라고 볼 수 있다.
마지막으로 ftp, web 등이 서비스 데몬은 … 간단하다. 쓰지 않는 것은 띄우지 말
자. 집에서 혼자 쓰면서 공부를 한다거나 닭질/삽질 용이라면 모르겠지만, 굳이
ftp, web, samba, named, sendmail 등의 데몬을 띄우고 쓸 필요는 없다. 시스템
보안이라는 측면에서도 좋다.
자… 조금 빠르게 해보자. 커널 컴파일도 해야 하고, hdparm 이 없다면 가져다
깔아야 하는 고통(?)도 있지만, 일단 하고 나면 상당히 부드럽게 돌아가는 리눅
스 박스를 만날 수 있다.