ethtool은 어디에서 정보를 얻나요?

ethtool은 어디에서 정보를 얻나요?

명령을 실행하면 ethtool -S wlp2s0다음과 같은 결과가 나타납니다.

NIC statistics:
     rx_packets: 63
     rx_bytes: 14163
     rx_duplicates: 2
     rx_fragments: 58
     rx_dropped: 30
     tx_packets: 60
     tx_bytes: 9668
     tx_filtered: 0
     tx_retry_failed: 0
     tx_retries: 39
     sta_state: 4
     txrate: 115600000
     rxrate: 130000000
     signal: 189
     channel: 0
     (...) 

그런데 폴더에 들어가보니 /sys/class/net/wlp2s0/statisticsethtool과 통계가 다릅니다(ifconfig에서 출력한 통계로 나타납니다). 예를 들어 rx_dropped폴더에서 표시하면 결과는 항상 입니다 0.

ifconfig인터페이스는 다음과 같습니다 .

wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.115  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::6f9d:4eac:5bec:1ea6  prefixlen 64  scopeid 0x20<link>
        ether 88:b1:11:6a:1d:82  txqueuelen 1000  (Ethernet)
        RX packets 42483  bytes 55964467 (55.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9309  bytes 1393476 (1.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

내 질문은 1초 간격 내에 삭제된 패킷을 알고 싶다면 해당 정보를 어디서 얻을 수 있느냐는 것입니다. ethtool좋은 옵션인 것 같지만 정보를 어디서 가져오는지, 통계 폴더와 왜 다른지 모르겠습니다...

또한 rx_dropped의 30 값은 무엇을 의미합니까? 인터페이스가 작동된 후 패킷이 손실되었습니까?

답변1

ethtoolSIOCETHTOOL에 대한 포인터를 사용하는 통계를 얻으려면 ioctl을 사용하십시오 struct ethtool_stats. 통계를 얻으려면 cmd구조체의 필드에 값이 있어야 합니다 ETHTOOL_GSTATS. 해당 ioctl을 호출하기 전에 다른 ethtool ioctl(해당 필드가 초기화되는 포인터 SIOCETHTOOL또는 해당 필드가 초기화되는 포인터를 사용할 수도 있음)을 사용하여 드라이버의 다양한 통계 값 수를 알아야 합니다. 반환되므로 충분한 메모리를 할당할 수 있습니다.struct ethtool_sset_infocmdETHTOOL_GSSET_INFOstruct ethtool_drvinfocmdETHTOOL_GDRVINFOstruct ethtool_stats

...C로 프로그래밍하지 않으면 위의 매우 난해하고 전문 용어가 많은 설명이 전혀 이해되지 않을 수 있습니다. ethtool스크립트에서 통계에 액세스 해야 하는 경우 Perl(모듈 Linux::Ethtool) 또는 Python(분명히) 과 같은 사용 가능한 ethtool 인터페이스 바인딩이 있는 스크립팅 언어를 사용하는 것이 좋습니다.https://pypi.org/project/netifaces/). 이를 통해 통계에 액세스하는 것이 훨씬 간단해집니다.

물론 명령의 출력을 언제든지 구문 분석할 수 있지만 ethtool매초마다 통계를 폴링하려는 경우 vfork()통계가 필요할 때마다 한두 개의 새로운 프로세스가 필요하지 않도록 하는 것이 도움이 될 수 있습니다.

결과 값은 NIC 드라이버에서 나옵니다. 드라이버 개발자가 관련 통계에 액세스하기 위한 코드를 추가하지 않았거나 /sys/class/net/<name>/statistics해당 통계를 얻을 수 있는 /proc/net/dev위치 를 지정하지 않았다는 사실 ifconfig은 드라이버가 이러한 값을 정의하는 방식이 /proc/net/dev및/또는/sys/class/net/*/statistics ... 또는 단지 드라이버 표시일 수 있음을 시사합니다. 불행하게도 구현이 완벽하지는 않습니다.

(개발자는 ethtoolAPI가 최신이기 때문에 먼저 API를 구현하고 "시간이 있을 때" 이전 통계 인터페이스를 불완전하게 유지하도록 선택할 수 있습니다. 또한 ifconfig잘 유지 관리되지 않기 때문에 대부분의 배포판에서는 이 명령을 더 이상 사용하지 않습니다.)

자세한 내용을 알아보려면 실제 드라이버의 설명서 및/또는 소스 코드 설명을 읽어보세요. 네트워크 카드 모델이나 드라이버 이름을 지정하지 않았으므로 다른 사람이 이를 대신 수행할 수 없습니다. 의 출력은 ethtool -i wlp2s0NIC 드라이버를 식별하는 데 유용합니다.

관련 정보