エンタープライズ:特集 2002/11/28 18:24:00 更新

Linuxでハイパー・スレッディング――Pentium4/3.06GHzで遊ぼう
第1回 Linux上でなかなか動かないHT (6/6)

SMPカーネルがマザーボードを誤認識(いやマザーが悪いのか?)

 さてこれでリブートすると、ブートローダに追加したエントリが出現し、ここで「linuxsmp」を選べば完了…となれば話は早いのだが、まだまだ先は長い。

 リブート後、topコマンドを見ると相変わらずCPUは1つしかいない(画面10)。ただ、「/proc/cpuinfo」には「Siblings=2」と表示され、確かにHTを認識していることが分かる(画面11)。一瞬、topコマンドは物理プロセッサの数を見ているのかと勘違いしたが、topコマンド以外もすべてシングルプロセッサとして認識しているようで、これはHTが無効になっているとしか考えようがない。

09.jpg
画面9■「linuxsmp」が追加されている事が分かる。ちなみに、これをやったらOSがクラッシュした、という場合は普通の「linux」でブートして修正すればよいわけで、その意味でもオリジナルのエントリは残すことを強くおすすめする 10.jpg
画面10■プロセスの数が多少増えているが、これは単に画面で動かしているものの数が増えたからで、深い意味はない。とにかくCPUの数がまったく増えないのが謎 11.jpg
画面11■「Physical Processor ID」と「Number of siblings」という項目が増えており、HTを正しく認識していることが分かる。ちなみにsiblingsとは仮想プロセッサの数

 そこで「/var/log/messages」を追っていくと、「kernel: SMP motherboard not detected.」というメッセージが出現していることが分かった(リスト1)。カーネルのソースを追っかけていったところ、CPU自体の問題ではなく、マルチプロセッサ環境の検索のためにどうもMPSの情報を取りに行き、ここでMPSのデータがないということで帰ってきているようだ。

リスト1■/var/log/messagesより関係する部分を抽出
kernel: Found and enabled local APIC!
kernel: Initializing CPU#0
kernel: Calibrating delay loop... 6093.21 BogoMIPS
kernel: CPU: L1 I cache: 0K, L1 D cache: 8K
kernel: CPU: L2 cache: 512K
kernel: CPU: Physical Processor ID: 0
kernel: Intel machine check architecture supported.
kernel: Intel machine check reporting enabled on CPU#0.
kernel: Enabling fast FPU save and restore... done.
kernel: Enabling unmasked SIMD FPU exception support... done.
kernel: Checking 'hlt' instruction... OK.
kernel: POSIX conformance testing by UNIFIX
kernel: mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au)
kernel: mtrr: detected mtrr type: Intel
kernel: CPU: L1 I cache: 0K, L1 D cache: 8K
kernel: CPU: L2 cache: 512K
kernel: CPU: Physical Processor ID: 0
kernel: Intel machine check reporting enabled on CPU#0.
kernel: CPU0: Intel(R) Pentium(R) 4 CPU 3.06GHz stepping 07
kernel: per-CPU timeslice cutoff: 1462.78 usecs.
kernel: task migration cache decay timeout: 1 msecs.
kernel: SMP motherboard not detected.
kernel: enabled ExtINT on CPU#0
kernel: ESR value before enabling vector: 00000000
kernel: ESR value after enabling vector: 00000000
kernel: Using local APIC timer interrupts.
kernel: calibrating APIC timer ...
kernel: ..... CPU clock speed is 3066.0036 MHz.
kernel: ..... host bus clock speed is 133.0595 MHz.
kernel: cpu: 0, clocks: 260344, slice: 130172
kernel: CPU0

 とりあえず対策として

  • マザーボードのBIOSを、「RG84510A.86A.0019.P11」から「RG84510A.86A.0022.P12」にアップデート
  • smpカーネルパッケージを、「2.4.18-14」から「2.4.18-18.8.0」にアップデート
  • ブートパラメータとして「acpismp=force」を追加
  • 同じくブートパラメータとして「maxcpus=2」を追加

をやってみたが、事態はまったく解消せずに終わることになった。ちなみに最初の2つはわかりやすいが、3つ目はココに記載されている方法である。2.4.9-21.1smpというかなり古いカーネルなので無意味かと思ったが、「/usr/src/linux2.4.18/arch/i386/kernel/setup.c」を見たら、いまだにこのオプションが有効だったため追加してみた。同様に、4つ目の方法は同じディレクトリの「smpboot.c」に用意されたオプションで、SMP環境でいくつのCPUを動作させるか指定できるものだが、残念ながら功を奏しなかった。

 これ以上のチェックは、カーネルをビルドしながら少しづつ進めていくしかないが、残念ながら今回は時間切れである。いまのところ問題がカーネル側の問題なのか、マザーボードの問題かがハッキリしない(同じマザーボードでWindowsXPはちゃんとHTを認識するあたり、カーネル側の問題という気もしなくはない)が、とりあえず逃げる方法があるかどうか、もう少し試行錯誤が必要そうだ。はからずしも、カーネルハッキングには格好の題材となったのがこのPentium4/3.06GHz+RedHat8という組み合わせであった。

(以降続く)

関連記事
▼Linuxでハイパースレッディング――Pentium4/3.06GHzで遊ぼう
▼Opinion:CPU市場を熱くするインテルの3GHz Pentium 4、その狙いは?
▼インテル、ハイパー・スレッディング対応Pentium 4/3.06GHzを発表
▼インテル、FSB 533MHzの新Xeonを発表

前のページ | 1 2 3 4 5 6 |      

[大原雄介,ITmedia]