GNU/Linux >> Znalost Linux >  >> Linux

Proč detekce USB flash disku trvá tak dlouho?

Ukázalo se, že v int drivers/usb/storage/usb.c vyprší 1 sekunda. Povolil jsem více protokolování ladění zadáním následujících dvou příkazů:

echo 8 > /proc/sys/kernel/printk
echo "module usb_storage +p" > /sys/kernel/debug/dynamic_debug/control
echo 0xFFFFFF > /proc/sys/dev/scsi/logging_level

Subsystém scsi má zvláštní (ve srovnání se zbytkem linuxových protokolovacích fascil) způsob, jak specifikovat úrovně protokolů; jsou to bity posunuté o jeden krok pro každou úroveň, viz drivers/scsi/scsi_logging.h

Viz řádek starting scan níže. Jádro čeká 1 sekundu, než provede kontrolu.

[21960.837879 <   23.040778>] usb 2-1.2: USB disconnect, device number 18
[21960.838263 <    0.000384>] sd 20:0:0:0: [sg2] sg_remove_device
[21960.838888 <    0.000625>] sd 20:0:0:0: [sg2] sg_device_destroy
[21966.157918 <    5.319030>] usb 2-1.2: new high-speed USB device number 19 using ehci-pci
[21966.251625 <    0.093707>] usb 2-1.2: New USB device found, idVendor=0781, idProduct=5530
[21966.251634 <    0.000009>] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[21966.251638 <    0.000004>] usb 2-1.2: Product: Firebird USB Flash Drive
[21966.251641 <    0.000003>] usb 2-1.2: Manufacturer: SanDisk
[21966.251644 <    0.000003>] usb 2-1.2: SerialNumber: 4C532000001215110130
[21966.252184 <    0.000540>] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[21966.252307 <    0.000123>] scsi host21: usb-storage 2-1.2:1.0
[21966.252439 <    0.000132>] usb-storage 2-1.2:1.0: waiting for device to settle before scanning
[21967.250018 <    0.997579>] usb-storage 2-1.2:1.0: starting scan
[21967.250242 <    0.000224>] usb-storage 2-1.2:1.0: scan complete
[21967.250295 <    0.000053>] scsi host21: scsi_scan_host_selected: <4294967295:4294967295:18446744073709551615>
[21967.250354 <    0.000059>] scsi 21:0:0:0: scsi scan: INQUIRY pass 1 length 36
[21967.251717 <    0.001363>] scsi 21:0:0:0: scsi scan: INQUIRY successful with code 0x0
[21967.251738 <    0.000021>] scsi 21:0:0:0: Direct-Access     SanDisk  Cruzer           1.26 PQ: 0 ANSI: 5
[21967.251745 <    0.000007>] scsi target21:0:0: scsi scan: Sequential scan
[21967.251776 <    0.000031>] scsi 21:0:0:1: scsi scan: INQUIRY pass 1 length 36
[21967.251907 <    0.000131>] scsi 21:0:0:1: scsi scan: INQUIRY failed with code 0x40000
[21967.252282 <    0.000375>] sd 21:0:0:0: sg_alloc: dev=2 
[21967.252366 <    0.000084>] sd 21:0:0:0: Attached scsi generic sg2 type 0
[21967.253703 <    0.001337>] sd 21:0:0:0: [sdb] 7821312 512-byte logical blocks: (4.00 GB/3.72 GiB)
[21967.255324 <    0.001621>] sd 21:0:0:0: [sdb] Write Protect is off
[21967.255334 <    0.000010>] sd 21:0:0:0: [sdb] Mode Sense: 43 00 00 00
[21967.258145 <    0.002811>] sd 21:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[21967.272208 <    0.014063>]  sdb: sdb1
[21967.276433 <    0.004225>] sd 21:0:0:0: [sdb] Attached SCSI removable disk

Linus Torvalds změnil výchozí zpoždění z 5 na 1 sekundu v nastavení Nižší prodleva úložiště USB na něco rozumnějšího. Neuvádí žádný kontext ohledně technických důvodů, proč bylo zpoždění nastaveno tak vysoko, ale naznačuje, že to mohlo jen zamaskovat některé chyby jádra.


Č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?).

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. Proč je synchronizace tak důležitá při vytváření zaváděcího USB klíče pro Linux?

  2. Proč se [a-z] shoduje s malými písmeny v bash?

  3. Proč Sudo ignoruje aliasy?

  1. Proč dlouhé zpoždění poté, co příkaz nebyl nalezen?

  2. Proč možnost Ssh -t přidává Cr &Lf do přesměrovaného výstupu?

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

  1. Proč Unixový čas začíná na 1970-01-01?

  2. Proč „ukončit &“ nefunguje?

  3. Proč „automatické připojení vhodných zástrček a slotů „okular“ trvá relativně dlouho?