GNU/Linux >> Belajar Linux >  >> Linux

Linux – Mengapa Perlu Waktu Lama Untuk Mendeteksi Usb Stick?

Saya sedang menulis skrip initramfs dan ingin mendeteksi stik usb secepat mungkin.

Saat saya memasukkan stik usb 2.0, deteksi kelas idVendor, idProduct, dan USB terjadi dalam 100 ms. Tetapi subsistem scsi tidak "melekat" sampai sekitar 1 detik telah berlalu dan dibutuhkan 500 md lagi sebelum partisi dikenali sepenuhnya.

Saya berasumsi bahwa driver perlu membaca tabel partisi untuk mendeteksi partisi. Mengapa butuh waktu lama? Saya tidak berharap waktu pengiriman/penerimaan urb selama itu atau waktu akses flash memakan waktu begitu lama.

Saya sudah mencoba 5 stik dari vendor yang berbeda dan hasilnya hampir sama.

[ 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

Sunting
Jadi saya menemukan parameter modul delay_use yang secara default disetel ke 1 detik, yang menjelaskan penundaan yang saya lihat. Tetapi saya ingin tahu apakah seseorang dapat memberikan konteks mengapa parameter itu diperlukan? Sebuah komentar menyarankan bahwa untuk stik usb yang lebih lama, delay_use mungkin perlu diatur hingga 5 detik. Apa yang ada di dalam stik usb yang memakan banyak waktu; inisialisasi firmware; membaca dari flash? Saya merasa sulit untuk percaya bahwa kita memerlukan penundaan selama 1 detik atau lebih ketika latensi untuk mengakses flash berada di urutan puluhan mikrodetik.

Saya menyadari bahwa ini mungkin sedikit di luar topik untuk saluran ini, jika demikian, saya akan membuka electronics.stackexchange.com

Jawaban yang Diterima:

Anda dapat mengubah batas waktu dengan menulis ke /sys/module/usb_storage/parameters/delay_use .

Untuk disk usb yang lebih lama, penundaan penyelesaian 5 detik atau bahkan lebih mungkin diperlukan (dan 5 adalah default hingga dikurangi menjadi 1 detik pada tahun 2010), mungkin karena pengontrol kekurangan daya saat motor disk diinisialisasi. Atau mungkin karena firmware SCSI internal membutuhkan waktu untuk boot sebelum responsif (dapatkah Anda mengatakan bahwa saya hanya berspekulasi di sini?).

Terkait:perbedaan antara operator Bash [[ vs [ vs ( vs ((?

Untuk penyimpanan solid-state modern, mungkin tidak diperlukan sama sekali, dan banyak orang menyetelnya ke 0. Sayangnya, ini adalah parameter global yang berlaku untuk semua perangkat, jadi jika Anda memiliki perangkat yang lambat, Anda harus menanggung penundaan untuk setiap perangkat USB penyimpanan massal yang Anda gunakan. Alangkah baiknya jika bisa disetel per perangkat oleh udev, tapi bukan itu masalahnya.


Linux
  1. Mengapa saya tetap menggunakan xterm

  2. Apa itu POSIX? Mengapa Penting bagi Pengguna Linux/UNIX?

  3. Linux – Mengapa Setuid Tidak Bekerja??

  1. Linux – Mengapa Es_mx Lokal Bekerja Tapi Tidak Es?

  2. Mengapa Ctrl + V tidak menempel di Bash (Linux shell)?

  3. Mengapa Linux memanaskan komputer saya?

  1. Cara membuat stik USB bootable Linux di Windows

  2. Mengapa Sinkronisasi Sangat Penting Saat Membuat Stik Usb Linux yang Dapat Di-boot?

  3. Linux – Mengapa Linux Mengizinkan 'init=/bin/bash'?