다음 이전 차례

4. 성능 팁들

만일 여러분이 낮은 이더넷 출력이나 좀더 빠른 ftp 전송속도를 얻고자한다면, 여기에 몇가지 팁들이 있다.

ttcp.c 프로그램은 전송속도를 측정하는데 좋다. 또다른 일반적인 방법은 ftp> get large_file /dev/null를 치고 전송하는 머신의 버퍼 캐쉬를 보는 것이다. 여기서 large_file는 1MB보다 큰 파일을 말한다. ( `get'은 적어도 두번은 해야 한다. 첫번째 시도때 보내는 머신의 버퍼캐쉬에 적재가 되기 때문이다.) 여러분이 측정할 때 디스크 에서 파일로 접근하는 속도에는 관심이 없으므로 버퍼 캐쉬 안에 파일이 있어야 한다. 또한 이때문에 들어오는 데이타를 /dev/null로 보내는 것이다.

4.1 일반적인 개념들

8 비트 카드조차도 아무런 문제없이 패킷을 back-to-back으로 보낼수 있다. 문제는 카드가 더 이상 패킷이 들어올수 있게 충분한 공간을 빠르게 만들수 없기 때문에 받은 패킷들을 컴퓨터가 받아들이지 못하는데 있다. 만일 컴퓨터가 카드의 메모리내에 이미 받은 패킷들을 빨리 비우지 않으면, 카드는 새 패킷을 받아들일 공간이 없게 된다.

이러한 경우에 카드는 새 패킷을 버리거나, 이전에 받은 패킷의 맨 위에서 덮어쓰게 된다. 어느 것이든 재전송을 야기/요구함으로써 부드러운 전송 흐름을 방해하게 되고, 심각한 성능 저하를 나타낼수 있다!

더 많은 메모리를 내장한 카드들은 더 많은 패킷들을 ``저장''할수 있고, 패킷을 버리지 않고 더 많은 양의 back-to-back 패킷 흐름을 제어할수 있다. 다시말하면, 카드가 패킷들을 버리지 않기위해 버퍼내의 패킷들을 밀어내도록 요청하지 않는다는 뜻이다.

대부분의 8비트 카드들은 8kB의 버퍼를 가지며, 대부분의 16비트 카드들은 16kB의 버퍼를 갖는 다. 대부분의 리눅스 드라이버들은 버퍼로 3kB를 남겨두며(두개의 전송 버퍼), 8비트 카드를 위해서 단지 5kB를 남겨놓는다. 이 공간은 단지 풀 사이즈의 이더넷 패킷 세개(1500 bytes) 정도의 공간일 뿐이다.

4.2 ISA 카드들과 ISA 버스 속도

위에서 언급했다시피, 패킷들이 카드에서 충분히 빠르게 없어지면, 수신 패킷 버퍼 메모리가 작아도 패킷을 버리거나 넘쳐버리는 일을 일어나지 않는다. 카드에서 컴퓨터의 메모리로 패킷을 이동하는 비율은 두 개가 만나는 부분 - 이것이 ISA 버스 속도이다 - 의 데이타 속도에 달려 있다. (만일 CPU가 386sx-16이라도, 이것은 적용된다)

권장하는 ISA 버스 클럭은 약 8MHz이지만, 많은 메인보드와 주변기기들은 더 높은 주파수로 동작할수 있다. ISA 버스 클럭 주파수는 보통 메인보드/CPU 클럭 주파수를 나눈 것을 선택하는 것으로, CMOS 설정에서 정할수 있다. 몇몇 ISA 와 PCI/ISA 메인보드는 이 옵션을 가지고 있지 않아서 출하시 기본값으로만 사용할수 있다.

예를 들어, 8비트 WD8003EP 카드가 꼽힌, 40MHz 486에서 TTCP 프로그램으로 측정한 서로다른 ISA 버스 속도가 아래에 있다.


        ISA Bus Speed (MHz)     Rx TTCP (kB/s)
        -------------------     --------------
        6.7                     740
        13.4                    970
        20.0                    1030
        26.7                    1075

여러분은 어떠한 10Mb/s 이더넷 카드로도, TCP/IP를 사용해서 1075kB/s이상의 결과를 얻지 못할것이다. 그러나, 모든 시스템에서 빠른 ISA 버스 속도가 나올거라고는 기대하지 말라. 대부분의 시스템에서는 13MHz이상의 속도에서 제대로 돌아가지 않는다. (또한, 몇몇 PCI 시스템 에서는 ISA 버스 속도를 8MHz로 고정시켜 놓아서, 사용자들이 속도를 올리지 못하게 하고 있다.)

또한 더욱 빠른 전송 속도를 얻으려면, CPU 점유율을 낮추어서 메모리와 I/O 사이클에 좀더 짧은 지속시간을 갖게 하면된다. (ISA 버스상의 하드 디스크와 비디오 카드도 또한 향상된 ISA 버스 속도 덕분에 성능이 올라가는 것을 경험할수 있다.)

8MHz가 넘는 ISA 버스 속도를 시험하기에 앞서서 여러분의 데이타를 백업해 두었는지 확인하고, 속도를 올린 후에는 모든 ISA 주변기기들이 제대로 작동하는지 시험해보기 바란다.

4.3 TCP 수신 윈도우의 설정

다시한번 말하자면, 적은 양의 RAM을 가진 카드와 느린 데이타 전송로를 가진 카드와 컴퓨터 메모리 사이에는 문제가 발생한다. TCP 수신 윈도우 설정의 기본값은 32kB인데, 이것은 여러분의 컴퓨터상의 데이타를 잘 받아졌는지 아닌지 보기위해 멈추는것 없이 32k의 데이타를 덤프할수 있는것같이 동일 서브넷의 빠른 컴퓨터에서도 할수 있다는 뜻이다.

최신 버전의 route 명령으로 이 윈도우의 크기를 실시간으로 설정할수 있다. 보통 라우터나 게이트웨이들 뒤에 있는 컴퓨터들은 문제가 없도록 `버퍼링을 하기' 때문에, 로컬 네트워크에서 이 윈도우의 크기는 작아져야 한다. 사용예는 다음과 같다.


        route add <whatever> ... window <win_size>

여기서 win_size 는 여러분이 사용하길 원하는 윈도우의 크기이다.(바이트로) 8MHz나 그 이하의 속도로 작동하는 ISA 버스상의 8비트 3c503 카드는 4kB의 윈도우 크기에도 잘 돌아간다. 너무 큰 윈도우는 패킷 손실이나 넘침을 야기시키고, 이더넷 전송량의 급격한 감소를 가져온다. 여러분의 cat /proc/net/dev라고 쳐서 운영체제의 상태를 확인해볼수 있다. 이 명령은 손실되거나 넘친 상태가 발생했는지 보여준다.

4.4 NFS 성능 올리기

몇몇 사람들은 NFS 클라이언트에서 8비트 카드를 사용하면서 8kB (Sun 고유의) NFS 패킷 크기를 이용할때, 기대했던 성능보다 더 나쁜것을 발견했다.

이 경우에 가능한 원인은 8비트와 16비트 카드에 장착된 버퍼 크기의 차이이다. 이더넷 패킷의 최대 크기는 1500 바이트 이다. 8kB의 NFS 패킷은 대략 최대크기의 이더넷 패킷 6개와 같다. 8비트와 16비트 카드가 패킷을 수신할 때는 아무런 문제가 없다. 문제는 머신이 카드의 버퍼에 서 패킷을 제시간에 제거하지 못해서, 버퍼가 넘칠때 일어난다. 사실 전송량당 정량 이상의 ISA 버스 사이클을 가진 8비트 카드들은 어느것에도 도움이 되지 않는다. 여러분이 할수 있는것은 8비트 카드를 가진 경우 NFS 전송 패킷 크기를 2kB(또는 1kB)로 설정하거나, 카드가 버퍼를 더욱 빨리 비우게 하기 위해서 ISA 버스 속도를 올리는 것이다. 나는 8MHz에서 구형 WD8003E 카드가 (다른 시스템 부하 없이) 2kB NFS 크기를 유지할수 있었지만, 4kB는 세가지 사실때문에 성능이 낮아짐으로 유지할수 없었다.

다른 말로 하면, 기본 크기 옵션을 1kB 크기로 사용하고, 여러분이 적어도 16비트 ISA 카드를 가지고 있다면, 여러분은 4kB ( 또는 8kB까지) 증가하는 것을 발견할수 있을 것이다.


다음 이전 차례