USB-Leistung / Verkehrsüberwachung?

18

Zuallererst habe ich eine ähnliche Frage gefunden, aber sie löst mein Problem nicht wirklich. Ich versuche herauszufinden, ob der USB-Bus für ein Gerät, das ich verwende, der Engpass in meinem Programm ist.

Wie kann ich einen USB-Bus überwachen (ähnlich wie der Gnome-System-Monitor funktioniert), um die Busauslastung anzuzeigen? Grundsätzlich möchte ich feststellen, wann der Bus "voll" ist. Ich vermute, was ich suche, ist eine Schnittstelle für USBMON, da dies so aussieht, als würde es tun, was ich brauche.

Dies ist auf das Testen von USRP und GNU Radio zurückzuführen. Ich stoße auf eine Situation, in der der USB-Bus ein begrenzender Faktor sein könnte. Daher stelle ich die allgemeinere Frage nach der Überwachung der USB-Leistung.

Mr. Shickadance
quelle
1
Während wireshark und usbmon den Datenverkehr abrufen, benötige ich etwas, das mir eine Vorstellung vom Durchsatz und dergleichen vermitteln kann.
Mr. Shickadance
Sehen Sie, dass der USB-Bus sein theoretisches Maximum erreicht? Haben Sie den Traffic mit den Benchmarks Ihrer Hardware verglichen ? Der maximale Durchsatz hängt in der Regel vom angeschlossenen Gerät und nicht vom Systembus ab. Um ihn ordnungsgemäß zu testen, benötigen Sie eine speziell für diesen Zweck hergestellte Hardware.
Forcefsck

Antworten:

4

Da usbmon die Länge jedes übertragenen Pakets angibt , würde ich ein schnelles Programm schreiben, um die 0uDatei (die Daten für alle USB-Geräte enthält) zu analysieren . Es würde den USB-Bus und die Gerätenummern heraussuchen und dann eine laufende Summe von das Paketlängenfeld in beide Richtungen für jedes Gerät.

Dadurch erhalten Sie die Datenmenge, die pro Gerät in jede Richtung übertragen wird. Wenn Sie es einmal pro Sekunde drucken, erhalten Sie eine ziemlich gute Vorstellung vom Durchsatz der einzelnen Geräte. Beachten Sie, dass es keinen USB-Overhead enthält. Wenn Sie jedoch die Zahlen mit einem Gerät vergleichen, das die verfügbare Bandbreite auslasten kann, wissen Sie, ob Sie sich dem Grenzwert nähern.

Bösartig
quelle
3
Ich habe auf ein bereits vorhandenes Tool gehofft, aber ich nehme an, dass dies ausreichen wird.
Mr. Shickadance
10

Mit usbtop erhalten Sie einen guten Überblick darüber, welche Geräte wie viel Bandbreite verwenden:

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
sebas
quelle
2
Danke, dass du mich darauf hingewiesen hast usbtop. Es sieht nützlich aus. So installieren Sie es: unix.stackexchange.com/a/489268/114401 .
Gabriel Staples
1
Auf Ubuntu 19.04 steht es in den offiziellen Repositories, also einfach apt install usbtop.
Luator
4

1. usbtop:

Als sebas weist darauf hin , usbtop scheint ein gewisses Mindestmaß an nützlichen Informationen zu geben (obwohl es viel besser sein könnte), so dass ich es empfehlen.

Bildbeschreibung hier eingeben

So installieren Sie es:

  1. Klonen Sie das Git-Repo:

    git clone https://github.com/aguinet/usbtop.git 
    
  2. Navigieren Sie zu dem Verzeichnis, aus dem Sie gerade erstellt haben git clone:

    cd usbtop
    
  3. Abhängigkeiten installieren:

    sudo apt update 
    sudo apt install libboost-dev libpcap-dev libboost-thread-dev libboost-system-dev 
    
  4. Erstellen Sie ein lokales Build-Verzeichnis & CD hinein:

    mkdir _build && cd _build 
    
  5. Führen Sie cmake aus, um sich darauf vorzubereiten, usbtop von der Quelle aus zu erstellen:

    cmake -DCMAKE_BUILD_TYPE=Release .. 
    
  6. Erstellen Sie usbtop aus dem Quellcode:

    make 
    
  7. Installieren Sie usbtop:

    sudo make install 
    
  8. Laden Sie das usbmon-Kernelmodul, um auf USB-Busse zugreifen zu können (ich denke, dies ist das, was das tut, aber ich weiß, dass es erforderlich ist):

    sudo modprobe usbmon 
    
  9. Führen Sie usbtop aus (wenn dies nicht funktioniert, verwenden Sie sudo usbtopstattdessen):

    usbtop 
    

Wenn ich etwas verpasst habe, lass es mich in den Kommentaren wissen.

Referenzen installieren:

2. Update: Sie können iostatstattdessen auch Folgendes verwenden:

sudo apt install sysstat

Laufen Sie im Abstand von 1 Sekunde mit:

iostat -d 1

ODER im Abstand von 0,1 Sekunden mit:

watch -n 0.1 iostat

Beispielausgabe von iostat -d 1:

Bildbeschreibung hier eingeben

Verweise:

/ubuntu/3561/how-do-i-monitor-disk-activity-on-a-specific-drive

Zusätzliche Lektüre:

https://www.znetlive.com/blog/monitor-disk-io-windows-linux/

Verbunden:

Gabriel Staples
quelle
0

Mit htop, drückte ich F2auf Setup, wählte Spalten aus, fügte hinzu IO_READ_RATE, IO_WRITE_RATEoder IO_RATE, und ich war in der Lage, die Geschwindigkeit zu sehen, mit der Prozesse von und auf Datenträger lesen oder schreiben.

Nyxee
quelle
Diese Frage ist über USB - Verkehr aber den Verkehr nicht Platte (zB wie viel Bandbreite einer USB - Webcam Anwendungen.)
Malvineous