CONFIG_X86_UP_APIC
Menyebalkan, ketika bermain dengan linux_box[1], nyolok HD eksternal via USB, dan melakukan transfer berkas bermega-mega/giga --besar lah pokoknya, si kernel Linux melakukan reset high-speed USB. Ini saya lihat di /var/log/messages, begini isinya:
kernel: usb 1-4: reset high speed USB device using ehci_hcd and address 3
kernel: usb 1-4: reset high speed USB device using ehci_hcd and address 3
kernel: usb 1-4: USB disconnect, address 3
kernel: sd 0:0:0:0: scsi: Device offlined - not ready after error recovery
kernel: sd 0:0:0:0: SCSI error: return code = 0x10000
kernel: sd 0:0:0:0: SCSI error: return code = 0x10000
hah? Device offlined? dan memang offline! yes, ini terjadi berkali-kali, tapi baru kali ini kejadiannya sering dan membuat tetikus USB saya juga offline tiba-tiba, pas pada saat itu. Saya coba dengan kernel default Slackware 10.2: 2.6.13 maupun 2.4.31 dari CD tetap sama saja. Dalam hati bilang ini ada yang tidak beres dengan modul USB driver untuk yang 2.0 di Linux. Dan ndilalah koneksi dari boks eksternal HD saya cuma menyediakan yang 2.0 aja, kalo seandainya ada mode 1.1 walaupun agak lambat yang penting jalan lancar udah enak, langkah ini saya dapat dari sebuah posting yang dijawab sang pengirim sendiri untuk menghilangkan modul ehci_hcd dari kernel dengan perintah modprobe -r ehci_hcd. Oh sudah googling tho? berarti sudah beres? tidak, belum beres tau. Dari hasil pencarian hanya beberapa poin yang bisa ditangkap untuk masukan troubleshooting:
Langkah kedua saya lakukan dengan mengaktifkan CONFIG_USB_DEBUG=y dan CONFIG_USB_STORAGE_DEBUG=y pada konfigurasi kernel, inipun tidak mendapatkan hasil yang diinginkan. Log yang keluar tidak mengarah pada masalah, atau saya aja yang nggak bisa baca ya? :p
Selanjutnya saya langsung melakukan pemeriksaan terhadap fitur-fitur kernel yang diaktifkan, terutama yang berhubungan dengan perangkat, PnP, ACPI, dst. Dan ternyata setelah menonaktifkan CONFIG_X86_UP_APIC dan CONFIG_X86_UP_IOAPIC, asumsi saya, sekarang perangkat berjalan dengan lancar dan kencang sampai dengan 15 MB/s, sebelumnya paling cuma sampai 1 MB/s, rata-rata 800an KB/s, turun, lalu drop offline!
Lalu apa itu APIC dan IO-APIC? APIC singkatan dari Advanced Programmable Interrupt Controller dan IO-APIC adalah I/O Advanced Programmable Interrupt Controller. Berdasarkan bantuan dari konfigurasi kernel Linux, Local APIC (LAPIC) adalah pengontrol interrupt yang terintegrasi dalam CPU dan mendukung CPU-generated self-interrupts (timer, performance counters). Biasanya ada pada SMP tapi terdapat pula pada Uniprocessor. Perkiraan saya, ada masalah pada interupsi-interupsi CPU dan sistem yang dihasilkan di kernel Linux dengan LAPIC/IO-APIC yang aktif, pada kasus saya "kelihatan" terjadi saat perangkat USB eksternal HD dicolok/dimainkan. Lihat di Wikipedia: Intel_APIC_Architecture bagian Consideration:
[1] 2.6.17+patch ck1
kernel: usb 1-4: reset high speed USB device using ehci_hcd and address 3
kernel: usb 1-4: reset high speed USB device using ehci_hcd and address 3
kernel: usb 1-4: USB disconnect, address 3
kernel: sd 0:0:0:0: scsi: Device offlined - not ready after error recovery
kernel: sd 0:0:0:0: SCSI error: return code = 0x10000
kernel: sd 0:0:0:0: SCSI error: return code = 0x10000
hah? Device offlined? dan memang offline! yes, ini terjadi berkali-kali, tapi baru kali ini kejadiannya sering dan membuat tetikus USB saya juga offline tiba-tiba, pas pada saat itu. Saya coba dengan kernel default Slackware 10.2: 2.6.13 maupun 2.4.31 dari CD tetap sama saja. Dalam hati bilang ini ada yang tidak beres dengan modul USB driver untuk yang 2.0 di Linux. Dan ndilalah koneksi dari boks eksternal HD saya cuma menyediakan yang 2.0 aja, kalo seandainya ada mode 1.1 walaupun agak lambat yang penting jalan lancar udah enak, langkah ini saya dapat dari sebuah posting yang dijawab sang pengirim sendiri untuk menghilangkan modul ehci_hcd dari kernel dengan perintah modprobe -r ehci_hcd. Oh sudah googling tho? berarti sudah beres? tidak, belum beres tau. Dari hasil pencarian hanya beberapa poin yang bisa ditangkap untuk masukan troubleshooting:
- Menghilangkan modul ehci_hcd dari kernel Linux, ini modul driver untuk USB 2.0
- Mengaktifkan mode debugging USB pada konfigurasi kernel, ini saya dapat dari arsip milis lkml dan memang yang merespon masalah ini hanya satu orang dengan jawaban tersebut :D
Langkah kedua saya lakukan dengan mengaktifkan CONFIG_USB_DEBUG=y dan CONFIG_USB_STORAGE_DEBUG=y pada konfigurasi kernel, inipun tidak mendapatkan hasil yang diinginkan. Log yang keluar tidak mengarah pada masalah, atau saya aja yang nggak bisa baca ya? :p
Selanjutnya saya langsung melakukan pemeriksaan terhadap fitur-fitur kernel yang diaktifkan, terutama yang berhubungan dengan perangkat, PnP, ACPI, dst. Dan ternyata setelah menonaktifkan CONFIG_X86_UP_APIC dan CONFIG_X86_UP_IOAPIC, asumsi saya, sekarang perangkat berjalan dengan lancar dan kencang sampai dengan 15 MB/s, sebelumnya paling cuma sampai 1 MB/s, rata-rata 800an KB/s, turun, lalu drop offline!
Lalu apa itu APIC dan IO-APIC? APIC singkatan dari Advanced Programmable Interrupt Controller dan IO-APIC adalah I/O Advanced Programmable Interrupt Controller. Berdasarkan bantuan dari konfigurasi kernel Linux, Local APIC (LAPIC) adalah pengontrol interrupt yang terintegrasi dalam CPU dan mendukung CPU-generated self-interrupts (timer, performance counters). Biasanya ada pada SMP tapi terdapat pula pada Uniprocessor. Perkiraan saya, ada masalah pada interupsi-interupsi CPU dan sistem yang dihasilkan di kernel Linux dengan LAPIC/IO-APIC yang aktif, pada kasus saya "kelihatan" terjadi saat perangkat USB eksternal HD dicolok/dimainkan. Lihat di Wikipedia: Intel_APIC_Architecture bagian Consideration:
...Sebelumnya saya kira permasalahan karena fitur jurnaling dari Reiserfs, melihat berkas yang ditransfer banyak dan berukuran besar.
Operating System Issues
It can be a cause of system failure, as some versions of some operating systems do not support it properly. If this is the case, disabling I/O APIC may cure the problem. For Linux, try the 'noapic nolapic' kernel parameters; for FreeBSD, the 'hint.apic.0.disabled' kernel environment variable.
In Linux, problems with I/O APIC are one of several causes of error messages concerning "spurious 8259A interrupt: IRQ7.". It is also possible that I/O APIC causes problems with network interfaces based on via-rhine driver, causing a transmission time out. Uniprocessor kernels with APIC enabled can cause spurious interrupts to be generated.
[1] 2.6.17+patch ck1
0 Comments:
Posting Komentar
<< Home