명령을 실행하면 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/statistics
ethtool과 통계가 다릅니다(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
ethtool
SIOCETHTOOL
에 대한 포인터를 사용하는 통계를 얻으려면 ioctl을 사용하십시오 struct ethtool_stats
. 통계를 얻으려면 cmd
구조체의 필드에 값이 있어야 합니다 ETHTOOL_GSTATS
. 해당 ioctl을 호출하기 전에 다른 ethtool ioctl(해당 필드가 초기화되는 포인터 SIOCETHTOOL
또는 해당 필드가 초기화되는 포인터를 사용할 수도 있음)을 사용하여 드라이버의 다양한 통계 값 수를 알아야 합니다. 반환되므로 충분한 메모리를 할당할 수 있습니다.struct ethtool_sset_info
cmd
ETHTOOL_GSSET_INFO
struct ethtool_drvinfo
cmd
ETHTOOL_GDRVINFO
struct 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
... 또는 단지 드라이버 표시일 수 있음을 시사합니다. 불행하게도 구현이 완벽하지는 않습니다.
(개발자는 ethtool
API가 최신이기 때문에 먼저 API를 구현하고 "시간이 있을 때" 이전 통계 인터페이스를 불완전하게 유지하도록 선택할 수 있습니다. 또한 ifconfig
잘 유지 관리되지 않기 때문에 대부분의 배포판에서는 이 명령을 더 이상 사용하지 않습니다.)
자세한 내용을 알아보려면 실제 드라이버의 설명서 및/또는 소스 코드 설명을 읽어보세요. 네트워크 카드 모델이나 드라이버 이름을 지정하지 않았으므로 다른 사람이 이를 대신 수행할 수 없습니다. 의 출력은 ethtool -i wlp2s0
NIC 드라이버를 식별하는 데 유용합니다.