Como monitorar o uso da largura de banda da webcam USB?

2

Eu gostaria de descobrir a quantidade de largura de banda que minha webcam USB ocupa enquanto a estou usando. Eu preferiria uma solução de linha de comando.

    
por Rasoul 06.02.2013 / 23:01

3 respostas

4

Use o usbtop , ele oferece uma boa visão geral de quais dispositivos estão usando a largura de banda:

Bus ID 1 (USB bus number 1) To device   From device
  Device ID 1 :             0.00 kb/s   0.00 kb/s
  Device ID 2 :             0.00 kb/s   0.00 kb/s
Bus ID 2 (USB bus number 2) To device   From device
  Device ID 1 :             0.00 kb/s   0.00 kb/s
  Device ID 4 :             141.73 kb/s 13777.68 kb/s
  Device ID 5 :             9.98 kb/s   11.24 kb/s
  Device ID 6 :             0.00 kb/s   0.00 kb/s
  Device ID 7 :             0.00 kb/s   0.00 kb/s
  Device ID 8 :             141.71 kb/s 15257.26 kb/s

Instale e execute da seguinte forma:

$ sudo apt install git cmake g++ libboost-dev libpcap-dev libboost-thread-dev libboost-system-dev
$ git clone https://github.com/aguinet/usbtop.git
$ cd usbtop
$ cmake .
$ make
$ sudo src/usbtop
    
por sebas 21.01.2017 / 19:15
5

Acho que isso pode ser feito com o wireshark.

Quando é ligar um dispositivo USB, no syslog aparece uma mensagem como

  

7 de fevereiro 21:35:42 Kernel do computador: [1237.639216] usb 2-1.1.4: novo dispositivo USB de alta velocidade número 8 usando ehci_hcd

Com essas informações, sabemos que o dispositivo foi conectado no barramento 2 com o número de dispositivo 8.

O fogo até o wireshark

  

$ sudo wireshark

Aparecerá uma lista de dispositivos ... escolha aquele com o mesmo id de barramento que você conectou o dispositivo, neste caso, "USB bus number 2" e inicie a captura.

No menu, escolha "Estatísticas" e "Gráficos de E / S".

Em seguida, nas opções de gráficos, você pode criar um filtro apenas com o dispositivo desejado.

Por exemplo:

  

(usb.bus_id == 2) & amp; & amp; (usb.device_address == 8)

Em "Eixo X" e "Eixo Y", ajuste os valores para ter um gráfico com valores 'normais', por exemplo Intervalo de Intervalo: 1 s, Unidade: Bits / tick e com isso o gráfico deve estar em Bits / seg.

Gráficos de IO

    
por Pipe 07.02.2013 / 22:52
1

Eu escrevi um par de scripts de shell para obter a taxa de transferência de um dispositivo USB. Se alguém o usar, você pode encontrá-lo nesta postagem .

getUsb.sh

#!/bin/bash  

COUNTER=0;
# first get USB devices
IFS=$'\n'
USBDEVICES=$( lsusb | grep -v "0000:0000" | grep -iv "hub" )
CHOOSED_DEVICE=$(zenity --list  --width=700 --height=500 --title "Connected USB devices" --column="Devices" ${USBDEVICES[@]})
unset IFS

echo ${CHOOSED_DEVICE} 
echo ${CHOOSED_DEVICE} | cut -d: -f 1 | read 

BUS='echo ${CHOOSED_DEVICE} | cut -d: -f 1 | cut -d\  -f 2'
DEVICE='echo ${CHOOSED_DEVICE} | cut -d: -f 1 | cut -d\  -f 4'

let BUS=$BUS+0

echo $BUS
echo $DEVICE

# create data to pipe
let totalIN=0;
let totalOUT=0;

echo "usbmon -i ${BUS} | grep "C Bo:${BUS}:${DEVICE}" ";

usbmon -i ${BUS} | grep "C B" | grep "${BUS}:${DEVICE}" | while read  garb1 garb2 garb3 status garb5 value finalGarb; do 
    if [[ $status =~ "Bo" ]]; then
        let totalIN=$totalIN+$value
        echo $totalIN > /tmp/counterUsbIN
    elif [[ $status =~ "Bi" ]]; then
        let totalOUT=$totalOUT+$value
        echo $totalOUT > /tmp/counterUsbOUT
    else
        echo "discarded"
        continue;
    fi
done

speedUsb.sh

#!/bin/bash -i

if [  ]; then
    SLEEP=;
else
    SLEEP=1;
fi

PREV_VALUE_IN='cat /tmp/counterUsbIN'
PREV_VALUE_OUT='cat /tmp/counterUsbOUT'
LINECOUNT=$(tput lines);
while [ 1 ]; do

    if [ $LINECOUNT -ge $(tput lines) ]; then
        printf "%7s %7s \n" "IN" "OUT"
        LINECOUNT=2;
    else
        (( LINECOUNT++ ))
    fi

    sleep $SLEEP
    LAST_VALUE_IN='cat /tmp/counterUsbIN'
    LAST_VALUE_OUT='cat /tmp/counterUsbOUT'

    let VALUE_IN=${LAST_VALUE_IN}-${PREV_VALUE_IN}
    let PREV_VALUE_IN=${LAST_VALUE_IN}

    let VALUE_OUT=${LAST_VALUE_OUT}-${PREV_VALUE_OUT}
    let PREV_VALUE_OUT=${LAST_VALUE_OUT}

    mbytesSecIn='echo "scale = 3; ${VALUE_IN}/${SLEEP}/1024/1024" | bc'
    mbytesSecOut='echo "scale = 3; ${VALUE_OUT}/${SLEEP}/1024/1024" | bc'

    mbitsSecIn='echo "scale = 3; ${VALUE_IN}*8/${SLEEP}/1024/1024" | bc'
    mbitsSecOut='echo "scale = 3; ${VALUE_OUT}*8/${SLEEP}/1024/1024" | bc'

    printf "%7.3f %7.3f Mbytes/s   %7.3f %7.3f Mbits/s\n" ${mbytesSecIn} ${mbytesSecOut} ${mbitsSecIn} ${mbitsSecOut}
done
    
por Pipe 09.09.2013 / 18:26