GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – Pourquoi faut-il autant de temps pour détecter une clé USB ?

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.


Linux
  1. Qu'est-ce que POSIX ? Pourquoi est-ce important pour les utilisateurs Linux/UNIX ?

  2. Pourquoi la synchronisation est-elle si importante lors de la création d'une clé USB Linux amorçable ?

  3. Linux – Pourquoi Linux autorise-t-il « init=/bin/bash » ?

  4. Linux - Pourquoi Setuid ne fonctionne-t-il pas ??

  5. Linux – Pourquoi la locale Es_mx fonctionne-t-elle mais pas Es ?

Créer une clé USB Debian 10 amorçable sous Linux

Combien de temps votre système Linux prend-il pour démarrer ?

Découvrez combien de temps faut-il pour démarrer votre système Linux

Combien de temps votre système Linux prend-il pour démarrer ? Un guide illustré utile

Pourquoi faut-il autant de temps pour détecter une clé USB ?

Pourquoi la commande sudo prend-elle longtemps à s'exécuter ?