題 `ifconfig`沒有顯示alx千兆卡的統計信息


所以我只是在我的拱箱上設置conky來監控桌面上的各種統計數據,我遇到了一個小問題。我的conky配置中的相關文字:

down $alignr ${downspeedf enp9s0} kb/s - ${totaldown enp9s0}
up $alignr ${upspeedf enp9s0} kb/s - ${totalup enp9s0}

哪裡 enp9s0 是我的千兆有線連接。我注意到conky總是顯示零,但是對於這個界面的上/下速度和總計。我在配置中有另外兩行為我的無線接口做同樣的事情(wlp7s0)它工作正常。

screenshot of both interfaces

為了看看發生了什麼,我檢查了輸出 ifconfig 並且它顯示所有內容的零:

enp9s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.21  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::7a45:c4ff:feb7:4471  prefixlen 64  scopeid 0x20<link>
        ether -----------------  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 17 

但它顯示我的無線接口的正常狀態:

wlp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::86a6:c8ff:feaf:85c5  prefixlen 64  scopeid 0x20<link>
        ether ----------------  txqueuelen 1000  (Ethernet)
        RX packets 649  bytes 207876 (203.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 119  bytes 56765 (55.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

相應 lsmod 線路:

alx                    27461  0 
mdio                    3525  1 alx

相應 lspci -vv

09:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)
    Subsystem: Dell Device 057e
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 49
    Region 0: Memory at f7800000 (64-bit, non-prefetchable) [size=256K]
    Region 2: I/O ports at d000 [size=128]
    Capabilities: <access denied>
    Kernel driver in use: alx
    Kernel modules: alx

有誰知道發生了什麼?這不是一個嚴重的問題 - 互聯網訪問工作得很好 - 它似乎不像我的無線接口那樣測量統計數據。

編輯:我已經禁用無線接口,以確保它不僅僅是使用無線有線(我不完全熟悉linux如何管理多個網絡接口),並且在使用有線接口時仍然沒有顯示任何統計數據完全即使我仍然有互聯網接入。


3
2017-08-20 17:30


起源


我有完全相同的問題,因為我將內核3.8 +手動編譯的compat-drivers更新到包含alx驅動程序的3.10.6內核。 - Patkos Csaba


答案:


我找不到修復ifconfig的方法,但我在我的conky腳本中使用了nstat和一些聰明的awk計算來實現同樣的目的。因此,不是使用“$ {downspeed eth0} / s”來獲取eth0的下載速度,而是使用以下單行:

${execi 1 /sbin/nstat | grep -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s

你必須以1秒的間隔使用execi。 nstat顯示與上一次運行的字節差異。如果你想以超過1秒的間隔運行它,你可能希望將你的結果以awk分成這個秒數,這樣你就得到了平均值。

要上傳,請使用nstat中的IpExtOutOctets行。您可以根據自己的需要進行調整。請記住,它會顯示所有流量,不僅僅是針對特定界面。但我認為你只有一個網絡接口,我的桌面PC只有一個。對於多個接口,可能需要不同的解決方案。

更新:但是,要小心,在傳入命令之後立即執行命令,然後在第一個命令顯示為零時傳出。也許一些“睡眠”命令在這里和那裡將解決這個問題。

UPDATE2:這就是我如何解決在兩個不同的命令中顯示下載和上傳速度的問題,並且仍然是正確的。需要對圖形和圖表進行修改,但僅限文本,您可以嘗試:

${goto 630}${font sansation:size=10,weight:bold}${color5} \
${texeci 2 /sbin/nstat | grep -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s \
${alignr 1}${color6} \
${texeci 2 sleep 1 && /sbin/nstat | grep -i IpExtOutOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s

更新:或者您可以同時獲取兩個值並使用awk格式化輸出。

U/D: ${execi 1 /sbin/nstat | grep -A1 -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB/s ", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB/s ", kb} else {printf "%d  B/s ", $2}}'}

0
2017-08-29 17:04