Как контролировать использование полосы пропускания веб-камеры USB?

Я хотел бы узнать, какую полосу пропускания занимает моя веб-камера USB, когда я ее использую. Я бы предпочел решение командной строки.

2
задан 7 February 2013 в 02:01

3 ответа

Используйте usbtop , он дает хороший обзор того, какие устройства используют сколько пропускной способности:

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

Установите и запустите его так:

$ 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
0
ответ дан 7 February 2013 в 02:01

Я думаю, что это может быть сделано с wireshark.

Когда это - разъем USB-устройство, в системном журнале это появляется сообщение как

7 февраля Компьютерное ядро 21:35:42: [1237.639216] usb 2-1.1.4: новое высокоскоростное USB-устройство номер 8 с помощью ehci_hcd

С этой информацией мы знаем, что устройство было включено в шине 2 с номером устройства 8.

Огонь wireshark

$ sudo wireshark

Будет казаться, что список устройств... выбирает то с тем же идентификатором шины, Вы включаете устройство, в этом случае, "Шина USB номер 2" и запускает получение.

В меню выберите "Statistics" затем "Графики IO".

Затем в опциях графиков, можно создать фильтр только с de устройство, которое Вы хотите.

Например:

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

В "оси X" и "оси Y" ajust значения, чтобы иметь диаграмму с 'нормальными' значениями, например, Интервал Галочки: 1 секунда, Единица: биты/галочка, и с которым диаграмма должна быть в бит/с.

Графика IO

5
ответ дан 7 February 2013 в 02:01

Я написал пару сценариев оболочки для получения пропускной способности USB-устройства. Если кто-то что-то использует, вы можете найти его в этом посте .

getUsb.sh

#!/bin/bash  

COUNTER=0;
# first get USB devices
IFS= 

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
\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
0
ответ дан 7 February 2013 в 02:01

Другие вопросы по тегам:

Похожие вопросы: