GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:perché ci vuole così tanto tempo per rilevare una chiavetta USB?

Sto scrivendo uno script initramfs e voglio rilevare le chiavette USB il più velocemente possibile.

Quando inserisco una chiavetta usb 2.0, il rilevamento di idVendor, idProduct e classe USB avviene entro 100 ms. Ma il sottosistema scsi non si "attacca" fino a quando non è trascorso circa 1 s e sono necessari altri 500 ms prima che la partizione venga completamente riconosciuta.

Presumo che il driver debba leggere la tabella delle partizioni per rilevare le partizioni. Perchè ci mette tanto? Non mi aspetto che il tempo di invio/ricezione urb sia così lungo o che il tempo di accesso del flash richieda così tanto tempo.

Ho provato 5 stick di diversi fornitori e il risultato è più o meno lo stesso.

[ 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

Modifica
Quindi ho trovato il parametro del modulo delay_use che per impostazione predefinita è impostato su 1 secondo, il che spiega il ritardo che vedo. Ma mi chiedo se qualcuno può fornire un contesto sul perché quel parametro è necessario? Un commento ha suggerito che per le chiavette USB più vecchie, delay_use potrebbe dover essere impostato fino a 5 secondi. Cosa c'è dentro la chiavetta USB che richiede così tanto tempo; inizializzazione del firmware; legge dal flash? Trovo difficile credere che abbiamo bisogno di ritardi fino a 1 secondo o più quando la latenza per l'accesso alla flash è dell'ordine di decine di microsecondi.

Mi rendo conto che questo potrebbe essere leggermente fuori tema per questo canale, in tal caso, andrò su electronics.stackexchange.com

Risposta accettata:

Puoi modificare il timeout scrivendo in /sys/module/usb_storage/parameters/delay_use .

Per i dischi USB meno recenti, potrebbe essere necessario un ritardo di stabilizzazione di 5 secondi o anche di più (e 5 era l'impostazione predefinita fino a quando non è stato ridotto a 1 secondo nel 2010), presumibilmente perché il controller è privo di alimentazione durante l'inizializzazione dei motori del disco. O forse perché il firmware SCSI interno richiede tempo per avviarsi prima che sia reattivo (puoi dire che sto solo speculando qui?).

Correlati:la differenza tra gli operatori Bash [[ vs [ vs ( vs ((?

Per i moderni dispositivi di archiviazione a stato solido, probabilmente non è affatto necessario e molte persone lo impostano su 0. Sfortunatamente, è un parametro globale che si applica a tutti i dispositivi, quindi se hai dispositivi lenti, devi sopportare il ritardo per ogni dispositivo USB di archiviazione di massa che utilizzi. Sarebbe bello se potesse essere impostato per dispositivo da udev, ma non è così.


Linux
  1. Linux:perché Linux consente "init=/bin/bash"?

  2. Linux – Perché Setuid non funziona??

  3. Linux:perché Locale Es_mx funziona ma non Es?

  4. Linux – Udev non rinomina il dispositivo USB Ethernet?

  5. Perché il preprocessore C interpreta la parola linux come la costante 1?

Crea chiavetta USB Debian 10 avviabile su Linux

Cos'è POSIX? Perché è importante per gli utenti Linux/UNIX?

Quanto tempo impiega il tuo sistema Linux ad avviarsi?

Scopri quanto tempo ci vuole per avviare il tuo sistema Linux

Quanto tempo impiega il tuo sistema Linux ad avviarsi? Un'utile guida illustrata

Perché il comando sudo richiede molto tempo per essere eseguito?