GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿por qué se tarda tanto en detectar una memoria USB?

Estoy escribiendo un script initramfs y quiero detectar memorias USB lo más rápido posible.

Cuando inserto una memoria USB 2.0, la detección de idVendor, idProduct y clase USB ocurre dentro de los 100 ms. Pero el subsistema scsi no se "conecta" hasta que pasa aproximadamente 1 s y se necesitan otros 500 ms antes de que la partición se reconozca por completo.

Supongo que el controlador necesita leer la tabla de particiones para detectar particiones. ¿Por que tarda tanto? No espero que el tiempo de envío/recepción de urb sea tan largo o que el tiempo de acceso del flash tome tanto tiempo.

Probé 5 palos de diferentes proveedores y el resultado es casi el mismo.

[ 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

Editar
Así que encontré el parámetro del módulo delay_use que, de forma predeterminada, está configurado en 1 segundo, lo que explica el retraso que veo. Pero me pregunto si alguien puede proporcionar un contexto sobre por qué se necesita ese parámetro. Un comentario sugirió que para las memorias USB más antiguas, es posible que se deba configurar delay_use en hasta 5 segundos. ¿Qué hay dentro de la memoria USB que lleva tanto tiempo? inicialización de firmware; lee desde el flash? Me cuesta creer que necesitemos retrasos de 1 segundo o más cuando la latencia para acceder a flash es del orden de decenas de microsegundos.

Me doy cuenta de que esto podría estar un poco fuera de tema para este canal, si es así, iré a electronics.stackexchange.com

Respuesta aceptada:

Puede cambiar el tiempo de espera escribiendo en /sys/module/usb_storage/parameters/delay_use .

Para discos USB más antiguos, es posible que se necesite un retraso de asentamiento de 5 segundos o incluso más (y 5 era el valor predeterminado hasta que se redujo a 1 segundo en 2010), presumiblemente porque el controlador no tiene energía mientras los motores del disco se están inicializando. O posiblemente porque el firmware SCSI interno tarda en iniciarse antes de que responda (¿se da cuenta de que solo estoy especulando aquí?).

Relacionado:la diferencia entre los operadores de Bash [[ vs [ vs ( vs ((?

Para el almacenamiento de estado sólido moderno, probablemente no sea necesario en absoluto, y muchas personas lo configuran en 0. Desafortunadamente, es un parámetro global que se aplica a todos los dispositivos, por lo que si tiene algún dispositivo lento, debe soportar la demora. para cada dispositivo USB de almacenamiento masivo que utilice. Sería bueno si udev pudiera configurarlo por dispositivo, pero ese no es el caso.


Linux
  1. Por qué me quedo con xterm

  2. ¿Qué es POSIX? ¿Por qué es importante para los usuarios de Linux/UNIX?

  3. Linux:¿por qué el USB no funciona en Linux cuando funciona en Uefi/bios?

  4. Linux:¿Udev no cambia el nombre del dispositivo USB Ethernet?

  5. ¿Por qué Ctrl + V no se pega en Bash (shell de Linux)?

Crear una memoria USB Debian 10 de arranque en Linux

¿Cuánto tarda en arrancar su sistema Linux?

Averigüe cuánto tiempo se tarda en iniciar su sistema Linux

¿Cuánto tarda en arrancar su sistema Linux? Una útil guía ilustrada

¿Por qué se tarda tanto en detectar una memoria USB?

¿Por qué el comando Sudo tarda mucho en ejecutarse?