web-dev-qa-db-fra.com

Comment surveiller l'utilisation de la bande passante de la webcam USB?

J'aimerais connaître la quantité de bande passante occupée par ma webcam USB pendant que je l'utilise. Je préférerais une solution en ligne de commande.

2
Rasoul

Utilisez sbtop , cela donne un bon aperçu de quels appareils utilisent combien de bande passante:

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

Installez-le et exécutez-le comme suit:

$ 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
4
sebas

Je pense que cela peut être fait avec Wirehark.

Quand il est branché un périphérique USB, dans syslog apparaît un message comme

7 février 21:35:42 Noyau d’ordinateur: [1237.639216] usb 2-1.1.4: nouveau périphérique USB haute vitesse numéro 8 utilisant ehci_hcd

Avec ces informations, nous savons que le périphérique était branché sur le bus 2 avec le numéro de périphérique 8.

Le feu jusqu'à wirehark

$ Sudo wirehark

Il apparaîtra une liste de périphériques ... choisissez celui avec le même identifiant de bus que celui que vous branchez, dans ce cas, "Bus USB numéro 2" et démarrez la capture.

Dans le menu, choisissez "Statistiques" puis "Graphes E/S".

Ensuite, dans les options graphiques, vous pouvez créer un filtre avec le périphérique de votre choix.

Par exemple:

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

Dans "Axe X" et "Axe Y", ajustez les valeurs pour obtenir un graphique avec des valeurs "normales", par exemple Tick Interval: 1 sec, Unité: Bits/tick, et avec lequel le graphique doit être exprimé en Bits/sec.

IO Graphics

5
Pipe

J'ai écrit une paire de scripts Shell pour obtenir le débit d'un périphérique USB. Si quelqu'un utilise quoi, vous pouvez le trouver dans ce post .

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 [ $1 ]; then
    SLEEP=$1;
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
1
Pipe