GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum dauert die Erkennung eines USB-Sticks so lange?

Es stellt sich heraus, dass es eine Zeitüberschreitung von 1 Sekunde int drivers/usb/storage/usb.c gibt. Ich habe mehr Debug-Logging aktiviert, indem ich die folgenden beiden Befehle eingegeben habe:

echo 8 > /proc/sys/kernel/printk
echo "module usb_storage +p" > /sys/kernel/debug/dynamic_debug/control
echo 0xFFFFFF > /proc/sys/dev/scsi/logging_level

Das SCSI-Subsystem hat eine (im Vergleich zu den übrigen Linux-Logging-Einrichtungen) seltsame Art, Log-Levels anzugeben; sie werden für jede Ebene um einen Schritt verschoben, siehe drivers/scsi/scsi_logging.h

Siehe Zeile starting scan unter. Der Kernel wartet 1 Sekunde, bevor er den Scan durchführt.

[21960.837879 <   23.040778>] usb 2-1.2: USB disconnect, device number 18
[21960.838263 <    0.000384>] sd 20:0:0:0: [sg2] sg_remove_device
[21960.838888 <    0.000625>] sd 20:0:0:0: [sg2] sg_device_destroy
[21966.157918 <    5.319030>] usb 2-1.2: new high-speed USB device number 19 using ehci-pci
[21966.251625 <    0.093707>] usb 2-1.2: New USB device found, idVendor=0781, idProduct=5530
[21966.251634 <    0.000009>] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[21966.251638 <    0.000004>] usb 2-1.2: Product: Firebird USB Flash Drive
[21966.251641 <    0.000003>] usb 2-1.2: Manufacturer: SanDisk
[21966.251644 <    0.000003>] usb 2-1.2: SerialNumber: 4C532000001215110130
[21966.252184 <    0.000540>] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[21966.252307 <    0.000123>] scsi host21: usb-storage 2-1.2:1.0
[21966.252439 <    0.000132>] usb-storage 2-1.2:1.0: waiting for device to settle before scanning
[21967.250018 <    0.997579>] usb-storage 2-1.2:1.0: starting scan
[21967.250242 <    0.000224>] usb-storage 2-1.2:1.0: scan complete
[21967.250295 <    0.000053>] scsi host21: scsi_scan_host_selected: <4294967295:4294967295:18446744073709551615>
[21967.250354 <    0.000059>] scsi 21:0:0:0: scsi scan: INQUIRY pass 1 length 36
[21967.251717 <    0.001363>] scsi 21:0:0:0: scsi scan: INQUIRY successful with code 0x0
[21967.251738 <    0.000021>] scsi 21:0:0:0: Direct-Access     SanDisk  Cruzer           1.26 PQ: 0 ANSI: 5
[21967.251745 <    0.000007>] scsi target21:0:0: scsi scan: Sequential scan
[21967.251776 <    0.000031>] scsi 21:0:0:1: scsi scan: INQUIRY pass 1 length 36
[21967.251907 <    0.000131>] scsi 21:0:0:1: scsi scan: INQUIRY failed with code 0x40000
[21967.252282 <    0.000375>] sd 21:0:0:0: sg_alloc: dev=2 
[21967.252366 <    0.000084>] sd 21:0:0:0: Attached scsi generic sg2 type 0
[21967.253703 <    0.001337>] sd 21:0:0:0: [sdb] 7821312 512-byte logical blocks: (4.00 GB/3.72 GiB)
[21967.255324 <    0.001621>] sd 21:0:0:0: [sdb] Write Protect is off
[21967.255334 <    0.000010>] sd 21:0:0:0: [sdb] Mode Sense: 43 00 00 00
[21967.258145 <    0.002811>] sd 21:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[21967.272208 <    0.014063>]  sdb: sdb1
[21967.276433 <    0.004225>] sd 21:0:0:0: [sdb] Attached SCSI removable disk

Linus Torvalds änderte die Standardverzögerung von 5 auf 1 Sekunde in Lower USB storage settling delay auf etwas vernünftigeres. Er liefert keinen Kontext zu den technischen Gründen, warum die Verzögerung so hoch eingestellt wurde, weist aber darauf hin, dass sie möglicherweise nur einige Kernel-Fehler maskiert hat.


Sie können das Timeout ändern, indem Sie in /sys/module/usb_storage/parameters/delay_use schreiben .

Bei älteren USB-Festplatten kann eine Einschwingverzögerung von 5 Sekunden oder mehr erforderlich sein (und 5 war die Standardeinstellung, bis sie 2010 auf 1 Sekunde reduziert wurde), vermutlich weil der Controller während der Initialisierung der Festplattenmotoren nicht mit Strom versorgt wird. Oder möglicherweise, weil die interne SCSI-Firmware einige Zeit braucht, um hochzufahren, bevor sie reagiert (merken Sie, dass ich hier nur spekuliere?).

Für moderne Solid-State-Speicher wird es wahrscheinlich überhaupt nicht benötigt, und viele Leute setzen es auf 0. Leider ist es ein globaler Parameter, der für alle Geräte gilt. Wenn Sie also überhaupt langsame Geräte haben, müssen Sie die Verzögerung ertragen für jedes USB-Massenspeichergerät, das Sie verwenden. Es wäre schön, wenn es per udev pro Gerät eingestellt werden könnte, aber das ist nicht der Fall.


Linux
  1. Warum stimmt [a-z] mit Kleinbuchstaben in Bash überein?

  2. Warum ignoriert Sudo Aliasse?

  3. Warum eine lange Verzögerung, nachdem der Befehl nicht gefunden wurde?

  4. Warum findet `find . -type F` dauert länger als `find .`?

  5. Warum fügt die Ssh -t Option Cr &Lf in der umgeleiteten Ausgabe hinzu?

Wie lange braucht Ihr Linux-System zum Booten?

Finden Sie heraus, wie lange es dauert, Ihr Linux-System zu booten

Wie lange braucht Ihr Linux-System zum Booten? Eine hilfreiche illustrierte Anleitung

Linux – Warum dauert es so lange, einen USB-Stick zu erkennen?

Warum funktioniert `exit &` nicht?

MySQL-Datenbank vom USB-Stick