J'écris un script initramfs et je souhaite détecter les clés USB le plus rapidement possible.
Lorsque j'insère une clé USB 2.0, la détection de idVendor, idProduct et de la classe USB se produit dans les 100 ms. Mais le sous-système scsi ne "s'attache" pas avant qu'environ 1 s ne se soit écoulée et il faut encore 500 ms avant que la partition ne soit entièrement reconnue.
Je suppose que le pilote doit lire la table des partitions afin de détecter les partitions. Pourquoi est-ce si long ? Je ne m'attends pas à ce que le temps d'envoi/réception urb soit aussi long ou que le temps d'accès du flash prenne autant de temps.
J'ai essayé 5 sticks de différents fournisseurs et le résultat est à peu près le même.
[ 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
Modifier
J'ai donc trouvé le paramètre du module delay_use qui est défini par défaut sur 1 seconde, ce qui explique le délai que je constate. Mais je me demande si quelqu'un peut expliquer pourquoi ce paramètre est nécessaire ? Un commentaire a suggéré que pour les clés USB plus anciennes, delay_use pourrait devoir être défini jusqu'à 5 secondes. Qu'y a-t-il à l'intérieur de la clé USB qui prend autant de temps ; initialisation du micrologiciel ; lit à partir du flash? J'ai du mal à croire que nous ayons besoin de délais aussi longs qu'une seconde ou plus lorsque la latence pour accéder au flash est de l'ordre de dizaines de microsecondes.
Je me rends compte que cela pourrait être légèrement hors sujet pour cette chaîne, si c'est le cas, j'irai sur electronics.stackexchange.com
Réponse acceptée :
Vous pouvez modifier le délai d'attente en écrivant dans /sys/module/usb_storage/parameters/delay_use
.
Pour les disques USB plus anciens, un délai de réglage de 5 secondes ou même plus peut être nécessaire (et 5 était la valeur par défaut jusqu'à ce qu'il soit réduit à 1 seconde en 2010), probablement parce que le contrôleur est privé d'alimentation pendant que les moteurs de disque s'initialisent. Ou peut-être parce que le micrologiciel SCSI interne met du temps à démarrer avant de répondre (pouvez-vous dire que je ne fais que spéculer ici ?).
En relation:la différence entre les opérateurs Bash [[ vs [ vs ( vs ((?Pour le stockage à semi-conducteurs moderne, ce n'est probablement pas nécessaire du tout, et beaucoup de gens le définissent sur 0. Malheureusement, c'est un paramètre global qui s'applique à tous les appareils, donc si vous avez des appareils lents, vous devez supporter le retard pour chaque périphérique USB de stockage de masse que vous utilisez. Ce serait bien si cela pouvait être défini par appareil par udev, mais ce n'est pas le cas.