[시스템] 리눅스 서버 처리 속도 향상

속도 향상에는 크게 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 이 없다면 가져다

깔아야 하는 고통(?)도 있지만, 일단 하고 나면 상당히 부드럽게 돌아가는 리눅

스 박스를 만날 수 있다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. 2022년 6월 22일

    1saffron

  2. 2023년 1월 26일

    3breathing

페이스북/트위트/구글 계정으로 댓글 가능합니다.