Ethernet Speed!! – 고속화 절차

리눅스 이더넷 속도 변신


??

Written By Inshane

다수의 서버를 운영하는 입장이 되다보면 내부의 네트워크 속도를 고려할수밖에 없는 상황이 언젠가 찾아온다.
바로 지금!! 데이터량이 감당이 안될수준까지 치솟고 있어 좀더 빠른 네트워크 구성이 필요한 상황이 되어버렸다.

서론은 귀찮으니 생략하고 본론만 들어가볼까?

1. 기본 전제 환경

일반적인 서버에는 기본적으로 2개이상의 NIC를 보유하고 있다. 서버 관리 초보시절에는
“랜카드는 하나만 있으면 되지 두개씩 놔서 뭐하나?” 요런 생각을  가졌으나, 그때는 내부망/외부망의 분리를 하지 않던 시점이고..

여튼 현재의 네트워크 구성은 다음과 같다.

Hub1(외부망) : 10/100 Mbps 24Port HUB(3COM 16471B)
 – 백본망과 연결되며, 각 서버의 eth0은 이 외부망의 허브로 연결되도록 구성되어 있다.

Hub2(내부망) : 10/100 Mbps 24Port HUB(3COM 16471)
– Server to Server 의 데이터 전송 목적으로 이용되고 있다. 각 서버의 eth1이 이 내부망 허브로 연결되도록 구성됨

 

2. 본격적인 환경 업그레이드

 – 1000MBps는 이론적으로 1초에 110M Byte 정도를 한번에 전송할수 있으나, 이론은 이론이고, 일반적인 환경에서는
 HDD 속도(읽기/쓰기)가 따라주지 못하거나 MTU(Maximum Transmission Unit)등의 영향으로
 이론 속도보다는 낮게 전송될 수밖에 없는 구조다.
 하지만 서버환경으로 따져보면 SAS나 적절한 RAID 구조등을 활용해보면 PC환경보다는 조건이 매우 좋은 편이다.

 서론이 또 길어졌다.
실질적으로 외부망에서 사용되는 회선의 최대제한이 현재 100MBps 정도인 상황에서 외부망의 허브 교체는 별다른 의미가 없고
내부망에서 사용되는 HUB를 교체해보도록 한다.

실험대상 : IPTIME SG24000(24Port, 기가랜 지원)

허브를 교체한다고 모든게 해결 되는건 아니고 일부 구형서버는 NIC에서 1000Mbps를 지원 못해주는경우도 생기니, 다음과 같이 확인해보자.

ㄱ. ethtool 을 이용하여 지원폭 확인해보기 : 가장 쉽고 빠르게 확인 가능하다.

# ethtool eth1
Settings for eth1:
 Supported ports: [ TP ]
 Supported link modes:   10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    1000baseT/Full
 Supports auto-negotiation: Yes
 Advertised link modes:  10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    1000baseT/Full
 Advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Full
 Port: Twisted Pair
 PHYAD: 1
 Transceiver: internal
 Auto-negotiation: on
 Supports Wake-on: umbg
 Wake-on: g
 Current message level: 0x00000007 (7)
 Link detected: yes

ㄴ. dmesg로 확인해보기 : 일부 리눅스에서는 eth정보를 기록하지 않아서 확인이 어려울 수 있다.
(안녕리눅스 1.3R5의 경우 dmesg에 정보가 별도로 기록 되지 않았다.)
이 방법은 NIC의 기종을 확인하는데 유용하여, 세부 지원정보등을 확인할때도 써먹으면 좋다.

# dmesg | grep eth1
divert: allocating divert_blk for eth1
e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection
ADDRCONF(NETDEV_UP): eth1: link is not ready
e1000: eth1: e1000_watchdog_task: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX/TX
e1000: eth1: e1000_watchdog_task: 10/100 speed: disabling TSO
ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
eth1: no IPv6 routers present
e1000: eth1: e1000_watchdog_task: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX/TX
e1000: eth1: e1000_watchdog_task: 10/100 speed: disabling TSO
e1000: eth1: e1000_watchdog_task: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX/TX
e1000: eth1: e1000_watchdog_task: 10/100 speed: disabling TS

여튼 여기까지 봤을때 NIC에서 1000Mbps를 지원해주는건 확인했으니 다음단계!

3. 실제 허브 교체 및 MTU 수정
내부 데이터 이동이 끊어지게 되므로, 실서버운용시 네트워크 단절 5분가량은 예상하고 작업하는게 좋을듯 하다.
(대부분 밤시간대에 작업해야 하겠죠?)

허브를 장착하고 기존 내부망을 담당하던 3COM허브에 꼽혀있던 회선을 IPTIME 신 허브에 옮겨서 꼽습니다.
1000Mbps가 가능해진 상태이지만 좀더 효율을 높이고자 생각하신다면 MTU를 조정해볼 수 있죠.

ㄱ. MTU 조정(점보프레임)
리눅스에서 MTU 조정은 명령 한줄로 끝이다.
# ifconfig eth1 mtu 8000

ifconfig에서 ethernet 정보를 확인해보면 기존의 정보는 이렇다.
eth1      Link encap:Ethernet  HWaddr 00:30:48:DC:27:63
   inet addr:192.168.5.193  Bcast:192.168.5.255  Mask:255.255.255.0
   inet6 addr: fe80::230:48ff:fedc:2763/64 Scope:Link
   UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

변경되었다면 아래 MTU:1500->8000으로 변경되었을 것이다.
각 NIC 환경을 동일한 MTU로 맞춰놓으면 급격한 속도향상이 있을것이다.

※ 필독 할 만한 주의사항

1, SG24000기종의 최대 점보프레임은 8K까지 지원된다고 나와있다. 사이즈를 너무 과도하게 잡지 마시길

2. 안정적인 환경을 요하는 서버 환경에서 비안정적인 환경이 될수도 있는 MTU 조정은 독이 될 수 있으므로 충분한 테스팅이 필요할것이다.

3. MTU가 서로 다른 네트워크끼리 연결될때는 패킷 단편화 현상으로 역효과가 날 가능성이 있다.

4. 최대 프레임 사이즈를 초과한 경우 해당 이더넷이 먹통이 되는 블랙홀 현상이 날 수 있다. 과도한 MTU조정은 위험하니 최대폭을 잘 결정해야 한다.

5. 결론만 말하자면 미칠듯한 속도가 필요하지 않고, 안정적으로 운영하고 싶다면 MTU는 가급적 서버환경에선 조정 안하는게 답일수 있다.

여담으로 한번에 패킷을 보냈을때 Ping을 효과적으로 때려보려면 ping -s 옵션을 통해 설정한 MTU사이즈로 바꿔보고 핑을 날려보는것도 도움이 된다.

# ping -s 8000 192.168.5.201

이도 저도 읽기 귀찮은 분들을 위한 3줄요약

1. 외부망/내부망 분리 운영을 하고있고, 내부망끼리 데이터 이동량이 많은경우 기가랜 환경을 도입해보는게 좋을것이다.

2. 허브와 NIC 둘다 기가랜을 지원해줘야 효과를 볼 수 있다.

3. 필요에 따라서 MTU 조정을 하면 좀더 빠른 속도를 볼 수 있을것이나 안정적인 운영을 위해서는 그리 권장하지는 않는다.

※ 추가로 쓰는 변경 이후 효과(MTU 미조정, 기가랜 지원되는 NIC끼리 통신시)
11 MByte / s => 31 MByte / s (약 3배증가)

]]>

도큐멘트 에 올린 글

댓글 남기기