'ifconfig' não está mostrando estatísticas para um cartão gigabit alx

3

Então eu apenas configurei o conky na minha caixa de arquivos para monitorar várias estatísticas na área de trabalho, e estou tendo um pequeno problema. O texto relevante na minha configuração conky:

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

onde enp9s0 é minha conexão com fio gigabit. Eu notei que o conky está sempre mostrando zeros para velocidades e totais para cima / para baixo apenas para essa interface. Eu tenho outras duas linhas na configuração que fazem a mesma coisa para minha interface sem fio ( wlp7s0 ) e funciona bem.

Para ver o que está acontecendo, verifiquei a saída de ifconfig e está mostrando zeros para tudo:

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 

Mas está mostrando estatísticas como normal para minha interface sem fio:

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

Relevante lsmod linhas:

alx                    27461  0 
mdio                    3525  1 alx

Relevante 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

Alguém sabe o que está acontecendo? Não é um problema incapacitante - o acesso à internet funciona muito bem - não parece estar medindo estatísticas como acontece com a minha interface sem fio.

EDIT: Eu desabilitei a interface sem fio para me certificar de que não estava apenas usando wireless com fio (eu não sou exatamente versado em como o linux gerencia múltiplas interfaces de rede) e ainda não estava mostrando nenhuma estatística ao usar a interface com fio unicamente mesmo que eu ainda tivesse acesso à internet.

    
por Brandon 20.08.2013 / 19:30

1 resposta

0

Eu não consegui encontrar uma maneira de consertar o ifconfig, mas usei nstat e alguns cálculos awk no meu script para obter a mesma coisa. Então, ao invés de usar "$ {downspeed eth0} / s" para obter sua velocidade de download para eth0, você poderia usar o seguinte one-liner:

${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

Você precisa usar o execi com intervalos de 1 segundo. nstat mostra a diferença em bytes de sua execução anterior. Se você quiser executá-lo em intervalos de mais de 1 segundo, convém dividir seu resultado em awk para esse número de segundos para que você tenha uma média.

Para upload, use a linha IpExtOutOctets do nstat. Você pode adaptar isso às suas necessidades. Lembre-se de que ele mostrará todo o tráfego de entrada e saída, não apenas para uma interface específica. Mas presumo que você tenha apenas uma interface de rede, só tenho uma no meu PC de mesa. Para várias interfaces, uma solução diferente pode ser necessária.

ATUALIZAÇÃO: no entanto, tenha cuidado, executando o comando uma vez para entrada e saída imediatamente após o primeiro mostrar zero para a saída. Talvez alguns comandos "dormir" aqui e ali consertem isso.

UPDATE2: aqui está como eu resolvi o problema de mostrar tanto o download quanto o upload de spedd em dois comandos diferentes e ainda está certo. Adaptações para gráficos e tabelas são necessárias, mas somente para texto você pode tentar isto:

${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

UPDATE: Ou você pode pegar os dois valores de uma só vez e formatá-los com awk para saída.

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}}'}
    
por 29.08.2013 / 19:04