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.
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
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.
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