GNU/Linux >> Linux の 問題 >  >> Linux

Linux – USBスティックの検出に時間がかかるのはなぜですか?

initramfs-scriptを作成していて、USBスティックをできるだけ速く検出したいと思っています。

usb 2.0スティックを挿入すると、idVendor、idProduct、およびUSBクラスの検出が100ミリ秒以内に発生します。ただし、scsiサブシステムは約1秒が経過するまで「接続」せず、パーティションが完全に認識されるまでにさらに500ミリ秒かかります。

パーティションを検出するには、ドライバーがパーティションテーブルを読み取る必要があると思います。なぜそんなに時間がかかるのですか? urbの送信/受信時間がそれほど長くなったり、フラッシュのアクセス時間がそれほど長くかかるとは思いません。

さまざまなベンダーの5本のスティックを試しましたが、結果はほぼ同じです。

[ 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

編集
それで、delay_useモジュールパラメータがデフォルトで1秒に設定されていることがわかりました。これは、私が見ている遅延を説明しています。しかし、なぜそのパラメータが必要なのかについて、誰かがコンテキストを提供できるかどうか疑問に思っています。コメントによると、古いUSBスティックの場合、delay_useを最大5秒に設定する必要があります。非常に時間がかかるUSBスティックの内部は何ですか。ファームウェアの初期化;フラッシュから読み取りますか?フラッシュにアクセスするための待ち時間が数十マイクロ秒のオーダーである場合、1秒以上の遅延が必要であるとは信じがたいです。

これはこのチャンネルでは少し話題から外れている可能性があることを認識しています。その場合は、electronics.stackexchange.comにアクセスします

承認された回答:

/sys/module/usb_storage/parameters/delay_useに書き込むことで、タイムアウトを変更できます。 。

古いUSBディスクの場合、5秒以上のセトリング遅延が必要になる場合があります(2010年に1秒に短縮されるまでは5がデフォルトでした)。おそらく、ディスクモーターの初期化中にコントローラーの電力が不足しているためです。または、内部SCSIファームウェアが応答するまでに起動に時間がかかるためかもしれません(ここで推測しているだけだとわかりますか?)。

関連:Bash演算子の違い[[vs [vs(vs((?

最新のソリッドステートストレージの場合、おそらくまったく必要ありません。多くの人が0に設定しています。残念ながら、これはすべてのデバイスに適用されるグローバルパラメータであるため、低速のデバイスがある場合は、遅延に耐える必要があります。使用するすべての大容量ストレージUSBデバイス用。 udevによってデバイスごとに設定できればいいのですが、そうではありません。


Linux
  1. xtermを使い続ける理由

  2. WindowsでLinuxの起動可能なUSBスティックを作成する方法

  3. Linux – Uefi / biosで動作するのにUsbがLinuxで動作しないのはなぜですか?

  1. Bash(Linux シェル)で Ctrl + V が貼り付けられないのはなぜですか?

  2. この正規表現が Linux で機能しないのはなぜですか?

  3. Linux がコンピューターを熱くするのはなぜですか?

  1. POSIXとは何ですか? Linux / UNIXユーザーにとってなぜ重要なのですか?

  2. 起動可能なLinuxUSBスティックを作成するときに同期が非常に重要なのはなぜですか?

  3. sudo コマンドの実行に時間がかかるのはなぜですか?