GNU/Linux >> Znalost Linux >  >> Linux

Linux – Proč detekce USB Stick trvá tak dlouho?

Píšu initramfs-script a chci co nejrychleji detekovat usb-stick.

Když vložím klíčenku usb 2.0, detekce idVendor, idProduct a USB class proběhne do 100 ms. Subsystém scsi se však „nepřipojí“, dokud neuplyne přibližně 1 s a trvá dalších 500 ms, než je oddíl plně rozpoznán.

Předpokládám, že ovladač potřebuje číst tabulku oddílů, aby mohl detekovat oddíly. Proč to trvá tak dlouho? Neočekávám, že čas odeslání/přijetí urb bude tak dlouhý nebo přístupová doba flash bude trvat tak dlouho.

Vyzkoušel jsem 5 tyčinek od různých výrobců a výsledek je přibližně stejný.

[ 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

Upravit
Takže jsem našel parametr modulu delay_use, který je ve výchozím nastavení nastaven na 1 sekundu, což vysvětluje zpoždění, které vidím. Ale zajímalo by mě, jestli někdo může poskytnout kontext, proč je tento parametr potřeba? Komentář naznačoval, že pro starší USB klíče může být potřeba nastavit delay_use až na 5 sekund. Co je uvnitř USB klíče, který zabírá tolik času; inicializace firmwaru; čte z blesku? Je pro mě těžké uvěřit, že potřebujeme zpoždění 1 sekundy nebo více, když je latence pro přístup k blesku v řádu desítek mikrosekund.

Uvědomuji si, že to může být pro tento kanál trochu mimo téma, pokud ano, půjdu na electronics.stackexchange.com

Přijatá odpověď:

Časový limit můžete změnit zápisem do /sys/module/usb_storage/parameters/delay_use .

U starších usb disků může být potřeba ustálení zpoždění 5 sekund nebo i více (a 5 bylo výchozí, dokud nebylo v roce 2010 sníženo na 1 sekundu), pravděpodobně proto, že řadič nedostává energii, zatímco se inicializují motory disku. Nebo možná proto, že internímu SCSI firmware chvíli trvá, než se spustí, než začne reagovat (můžete říct, že jen spekuluji?).

Související:rozdíl mezi operátory Bash [[ vs [ vs ( vs ((?

Pro moderní solid-state úložiště to asi není vůbec potřeba a spousta lidí to nastavuje na 0. Bohužel je to globální parametr, který platí pro všechna zařízení, takže pokud máte vůbec nějaká pomalá zařízení, musíte vydržet zpoždění pro každé velkokapacitní USB zařízení, které používáte. Bylo by hezké, kdyby to udev mohl nastavit pro každé zařízení, ale není tomu tak.


Linux
  1. Jak vytvořit spouštěcí USB flash disk pro Linux ve Windows

  2. Proč je synchronizace tak důležitá při vytváření zaváděcího USB klíče pro Linux?

  3. Linux – Proč Linux umožňuje „init=/bin/bash“?

  1. Linux – Proč Setuid nefunguje?

  2. Linux – Proč Locale Es_mx funguje, ale Es ne?

  3. Proč preprocesor C interpretuje slovo linux jako konstantu 1?

  1. Proč se Ctrl + V nevloží do Bash (Linux shell)?

  2. Proč detekce USB flash disku trvá tak dlouho?

  3. Proč spuštění příkazu sudo trvá dlouho?