2012년 4월 20일 금요일

Ethtool 을 통해 네트워크 카드(NIC) 정보 확인 또는 설정하기

패킷과 밀접한 관련이 있는 것이 네트워크 이더넷 카드이다. 오늘은 이더넷 디바이스에 대한 정보를 살펴볼까 한다. 네트워크 디바이스 드라이버와 하드웨어 셋팅을 보거나 설정할 수 있는 'ethtool' 을 통해서 말이다.
우리가 흔히 이더넷 정보를 확인할 때 대표적인 도구가 ifconfig 다. ifconfig 를 통해 링크상태, IP 주소, 맥 주소, 통신 상태 현황등을 살펴볼 수 있다. ethtool 은 이보다 더 많은 부분을 살펴볼 수 있고, 설정도 가능하다.

기본적으로 사용방법은

ethtool [옵션] [ethX] [파라미터]  와 같이 사용할 수 있다.

다음은 기본 정보를 살펴본 것으로 지원되는 링크 모드와 속도, Duplex 상태 등이 나온다.

[이미지 출처] 구글 이미지 (검색어: ethernet card)

# ethtool eth0
Settings for eth0:
 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 pause frame use: No
 Advertised auto-negotiation: Yes
 Speed: 1000Mb/s
 Duplex: Full
 Port: Twisted Pair
 PHYAD: 0
 Transceiver: internal
 Auto-negotiation: on
 MDI-X: Unknown
 Supports Wake-on: umbg
 Wake-on: d
 Current message level: 0x00000007 (7)
          drv probe link
 Link detected: yes
일목요연하게 이더넷 인터페이스에 대한 정보를 한눈에 보여준다. 자, 그럼 몇 가지 주요 옵션들에 대해서 알아보도록 하겠다. -s 옵션은 속도, Duplex 등의 값을 변경할 수 있다. 아래 예는 Auto-negotiation 기능을 Off 하는 것이다.

# ethtool -s eth0 autoneg off
이외 다음과 같은 옵션들이 있으니 설정에 참고하면 된다.

ethtool -s ethX speed N [duplex half|full] [port tp|aui|bnc|mii]
              [autoneg on|off] [advertise N] [phyad N] [xcvr internal|external]
              [wol p|u|m|b|a|g|s|d...]  [sopass xx:yy:zz:aa:bb:cc] [msglvl N |
              msglvl type on|off ...]

그럼 위 예를 참고하여 Speed 및 Duplex 를 조정하기 위해서는 다음과 같이 사용하면 된다:

# ethtool -s eth0 autoneg off speed 100 duplex half

참고로 e1000 드라이버를 사용하고 있는데, 설정이 제대로 반영되지 않았다. 이것은 드라이버의 특성이 있는것 같고 자세히 살펴보지는 않았지만 드라이버의 일부 패치가 필요할 것 같다. 다른 컴퓨터에서 사용하고 있는 r8169 드라이버에서는 변경이 잘 이뤄졌다. 사용하는 네트워크 인터페이스에 따라 차이가 있을 수 있으므로 이점은 참고하길 바란다.

ethtool 외에 modprobe 로 e1000 드라이버에 대한 옵션을 아래와 같은 형태로 설정할 수 가 있다.

modprobe e1000 [<option>=<VAL1>,<VAL2>,...]

다음은 Duplex 를 0 으로 설정한 예이다. 
# modprobe e1000 Duplex=0  (0=auto-negotiate, 1=half, 2=full)
본인이 사용하는 하드웨어가 각자 다르기 때문에 적절한 방법으로 사용하면 될 것이다.

다음은 r8169 를 사용하는 곳에서 변경을 해 본 것이다.


# ethtool -s eth0 autoneg off speed 100 duplex half
# ethtool eth0
Settings for eth0:
 Supported ports: [ TP MII ]
 Supported link modes:   10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
                         1000baseT/Half 1000baseT/Full
 Supports auto-negotiation: Yes
 Advertised link modes:  Not reported
 Advertised pause frame use: No
 Advertised auto-negotiation: No
 Speed: 100Mb/s
 Duplex: Half
 Port: MII
 PHYAD: 0
 Transceiver: internal
 Auto-negotiation: off
 Supports Wake-on: pumbg
 Wake-on: g
 Current message level: 0x00000033 (51)
          drv probe ifdown ifup
 Link detected: yes

-i 는 드라이버에 대한 정보를 보여주는 것이다. e1000 드라이버를 사용하고 있고, eeprom 접근이 가능한지 여부등이 나온다.

# ethtool -i eth0
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version: N/A
bus-info: 0000:00:03.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes

-S 는 인터페이스 통계 정보를 보여준다. rx,tx 의 패킷 전송 개수, 바이트 정보, 브로드캐스팅 정보들이다. 대문자 S 를 사용했다는 점을 주의하자. 소문자 s 는 설정 할때 사용되는 옵션이다.

# ethtool -S eth0
NIC statistics:
     rx_packets: 10
     tx_packets: 29
     rx_bytes: 2145
     tx_bytes: 4100
     rx_broadcast: 0
     tx_broadcast: 3
     rx_multicast: 0
     tx_multicast: 18
     rx_errors: 0
     tx_errors: 0
     tx_dropped: 0
-a 는 Pause 파라미터에 대한 정보를 보여준다. Auto Negotiation 정보를 좀더 상세히 보여준다고 보면 된다.
# ethtool -a eth0
Pause parameters for eth0:
Autonegotiate: on
RX: on
TX: off
-p 는 어뎁터에서 어떤 포트가 내가 찾고자 하는 것인지 인지할 수 있도록 알려준다. 예를 들어, 어뎁터가 4개의 포트를 가지고 있다고 하자. 여기서 eth3 번이 어떤 포트인지 알고 싶을때 LED 를 깜빡 거리게 하여 알려줄 수 있는 것이다.
# ethtool -p eth3
-k  옵션은 네트워크 디바이스의 Offload 정보를 보여준다. 이 Offload 는 이더넷 카드에서 TOE 기능을 지원하게 되면 사용될 수 있는 기능으로, 여기서는 이렇게 설정 정보를 보여주는 기능이 있다는 정도에서만 설명하고 다음번 포스팅 때 Offload engine 에 대해서 다시 설명하도록 하겠다.
# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: off

ethtool 외에 lshw 를 이용해 network 관련한 정보를 확인할 수도 있다.
# lshw -C network
  *-network               
       description: Ethernet interface
       product: 82540EM Gigabit Ethernet Controller
       vendor: Intel Corporation
       physical id: 3
       bus info: pci@0000:00:03.0
       logical name: eth0
       version: 02
       serial: 08:00[deleted]:d0
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 66MHz
       capabilities: pm pcix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000 driverversion=7.3.21-k8-NAPI duplex=full firmware=N/A ip=10.0.2.15 latency=64 link=yes mingnt=255 multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:10 memory:f0000000-f001ffff ioport:d010(size=8) 
여기서는 일반적인 방법을 설명한 것이므로, 여러분들 환경에 맞는 방법으로 이더넷 카드의 정보를 확인해 보거나 또는 설정할 수 있다. ethtool 에 대한 더 자세한 정보는 MAN 페이지를 참고하길 바란다.

댓글 없음:

댓글 쓰기