Google Code Prettify

2006年4月17日

P4P800-VM でPATA/SATA混合時のLinux 2.6.x 挙動?

別のマシンで既にLinux配布群(RedHat,Debian,SUSE)がインストール済みのPATA HDDを、ASUSTek P4P800-VM に移して起動を繰り返してみてもイマイチ挙動がよろしくない。

マシンの構成は以下の通り

  1. ASUSTek P4P800-VM / Pentium 4 3GHz
  2. AMIBOIS 08.00.09
  3. PATA 160G HDD(ST3160023A) on primary master
  4. ATAPI CD/DVD-ROM (RW9200) on primary slave
  5. SATA 250G HDD(7Y250M0)
  6. IDE-RAID(PDC20270) & 40G HDD(ST340015A) x 4
で起動ディスクの構成(PATA 160G HDD)は下記の通り
  1. (hd0,6) Debian 3.1 sarge / 2.6.8-3-686
  2. (hd0,7) CentOS 4.x / 2.6.9-34.EL
  3. (hd0,8) Fedora Core 3 / 2.6.12-2.3.legacy_FC3
  4. (hd0,9) Fedora Core 4 / 2.6.16-1.2069_FC4
  5. (hd0,10) SUSE Linux 10.0 / 2.6.13-15.8-default
  6. (hd0,11) Debian testing / 2.6.15-1-686
で、何が起きるかと言うと

BIOSの設定でCompatible mode を選択した場合2種類のタイプに分かれる

  1. /dev/hdaXとして認識され問題なく起動するが約3MB/secの転送速度になる。たぶんジェネリックドライバが使われてPIOモードになっている。=> Debian sarge/CentOS4.X/Fedora Core 3,4
  2. /dev/sdaXとして認識され問題なく起動する、約26MB/secの転送速度になる。libata経由で認識されている。=> SUSE/Debian testing
どちらにしろ起動できるのだがHDDの転送速度が落ちるのは頂けない。またデバイスファイルがhdaだったりsdaだったり変わるのも頂けない。

次に、BIOSの設定でEnhance modeを選択した場合、2.6.13で追加されたirqpollオプションを付け非SMPカーネルでなければ正常には起動できない。なのでFedora Core4/SUSE/Debian testingしか起動しないが、PIIX用のIDEドライバで認識されているので約54MB/secの転送速度になっている。

ただし、dmesgには下記ようなの怪しげなメッセージが流れる。

hdb: cdrom_pc_intr: The drive appears confused (ireason = 0x01)

とか

irq 185: nobody cared (try booting with the "irqpoll" option)
[<c012f9a1>] __report_bad_irq+0x31/0x73
[<c012fa70>] note_interrupt+0x75/0x99
[<c012f570>] __do_IRQ+0x65/0x91
[<c0104985>] do_IRQ+0x1d/0x28
[<c01034ba>] common_interrupt+0x1a/0x20
[<c012007b>] sys_setreuid+0xe4/0x16d
[<c0118160>] wait_task_zombie+0x81/0x36e
[<c0118878>] do_wait+0x146/0x2e6
[<c0113708>] default_wake_function+0x0/0x12
[<c0118a93>] sys_wait4+0x28/0x2c
[<c0102a75>] syscall_call+0x7/0xb
handlers:
[<f8857d0c>] (usb_hcd_irq+0x0/0x54 [usbcore])
[<f88b31b4>] (ata_interrupt+0x0/0x112 [libata])
[<f8872f4b>] (ide_intr+0x0/0xed [ide_core])
Disabling IRQ #185

どっかの権威に聞けばわかるとは思うが、/proc/interruptsを見る限りide0とlibataがIRQを何故か共有しており、libata側かide側かどっちかか両方かのハンドラが共有した場合の対応が進んでないのでパニックってる。その対応オプションirqpollだと思う。「Disabling IRQ #XX」が出た後は、そのirqのカウントが止まっているのに正常の動作するのでいいんだと思う。

で、 IRQがPATAとSATAで共有されるように設定されてしまったが謎。Compatible modeだとIRQは別々に設定され機能しているので、Enhanced modeでも別々に割り振れば問題なく機能するハズ。IRQの割り当てとかはACPIのお仕事なのでこいつ(BIOS内のコード)がバグってるのかぁぁぁ。ASUSTekは昔はawardとかが入ってて安定してたのに、、、けぇ。

追記(2008/06/25)

ここらあたりの問題は 2.6.24 では既に解決済みのようで、ディストリビューションの最新安定版(Debianのetchは除く)を使えば良いようである。

0 件のコメント:

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...