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.