Ich schreibe ein Initramfs-Skript und möchte USB-Sticks so schnell wie möglich erkennen.
Wenn ich einen USB 2.0-Stick einstecke, erfolgt die Erkennung der IDVendor-, IDProduct- und USB-Klasse innerhalb von 100 ms. Das scsi-Subsystem "verbindet" sich jedoch erst nach Ablauf von ca. 1 s und es dauert weitere 500 ms, bis die Partition vollständig erkannt wird.
Ich gehe davon aus, dass der Treiber die Partitionstabelle lesen muss, um Partitionen zu erkennen. Warum dauert es so lange? Ich erwarte nicht, dass die Sende- / Empfangszeit der Stadt so lang ist oder dass die Zugriffszeit des Blitzes so lange dauert.
Ich habe 5 Sticks von verschiedenen Anbietern ausprobiert und das Ergebnis ist ungefähr gleich.
[ 5731.097540] usb 2-1.2: new high-speed USB device number 7 using ehci-pci
[ 5731.195360] usb 2-1.2: New USB device found, idVendor=0951, idProduct=1643
[ 5731.195368] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5731.195372] usb 2-1.2: Product: DataTraveler G3
[ 5731.195376] usb 2-1.2: Manufacturer: Kingston
[ 5731.195379] usb 2-1.2: SerialNumber: 001CC0EC32BCBBB04712022C
[ 5731.196942] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[ 5731.197193] scsi host9: usb-storage 2-1.2:1.0
[ 5732.268389] scsi 9:0:0:0: Direct-Access Kingston DataTraveler G3 PMAP PQ: 0 ANSI: 0 CCS
[ 5732.268995] sd 9:0:0:0: Attached scsi generic sg2 type 0
[ 5732.883939] sd 9:0:0:0: [sdb] 7595520 512-byte logical blocks: (3.88 GB/3.62 GiB)
[ 5732.884565] sd 9:0:0:0: [sdb] Write Protect is off
[ 5732.884568] sd 9:0:0:0: [sdb] Mode Sense: 23 00 00 00
[ 5732.885178] sd 9:0:0:0: [sdb] No Caching mode page found
[ 5732.885181] sd 9:0:0:0: [sdb] Assuming drive cache: write through
[ 5732.903834] sdb: sdb1
[ 5732.906812] sd 9:0:0:0: [sdb] Attached SCSI removable disk
Bearbeiten Also habe ich den Modulparameter delay_use gefunden, der standardmäßig auf 1 Sekunde eingestellt ist, was die Verzögerung erklärt, die ich sehe. Aber ich frage mich, ob jemand einen Kontext angeben kann, warum dieser Parameter benötigt wird. Ein Kommentar deutete darauf hin, dass für ältere USB-Sticks delay_use möglicherweise auf bis zu 5 Sekunden eingestellt werden muss. Was ist es im USB-Stick, das so viel Zeit in Anspruch nimmt? Firmware-Initialisierung; liest aus dem Blitz? Es fällt mir schwer zu glauben, dass wir Verzögerungen von mindestens 1 Sekunde benötigen, wenn die Latenz für den Zugriff auf Flash in der Größenordnung von zehn Mikrosekunden liegt.
Mir ist klar, dass dies für diesen Kanal möglicherweise etwas vom Thema abweicht. Wenn ja, gehe ich zu electronic.stackexchange.com
/sys/module/usb_storage/parameters/delay_use
). Bei älteren USB-Festplatten ist möglicherweise eine Einschwingverzögerung von bis zu 5 Sekunden erforderlich, bei modernen Solid-State-Speichern ist diese wahrscheinlich überhaupt nicht erforderlich. Leider kann der Kernel das erst wissen, wenn es zu spät ist, um nützlich zu sein!