SMP


SMP

SMPとは、Symmetric Multi Processing の略です。計算機のシステムバスを 複数のCPUが共有しています。簡単に言うと、一つのマシンが複数のCPUを持っている 状態です。これにより、演算速度などのパフォーマンスの向上を計ることができます。

SMP対応カーネルの作成

通常、SMP対応にさせるためには、カーネルの再構築が必要です。 代表的な PC-UNIX である FreeBSD と Linux で、SMP対応カーネルを作成する 方法について、以下に説明します。

FreeBSD

FreeBSD では、3.0Release から、SMPがサポートされました。SMP対応カーネルを 作成するには、以下のようにします。
# cd /sys/i386/conf
# GENERIC DUALCPU(任意のファイル名)
次にSMP対応カーネルを作成するため、カーネルコンフィグレーションファイル (/sys/i386/conf/DUALCPU)で、以下の部分のコメントを外します。
# To make an SMP kernel, the next two are needed
options SMP                     # Symmetric MultiProcessor Kernel
options APIC_IO                 # Symmetric (APIC) I/O
# Optionally these may need tweaked, (defaults shown):
options NCPU=2                  # number of CPUs
options NBUS=4                  # number of busses
options NAPIC=1                 # number of IO APICs
options NINTR=24                # number of INTs
また、以下の部分を変更し、カーネルの名前を定義しなおします。
変更前
ident           GENERIC
変更後
ident           DUALCPU
後は、通常の手順通り、カーネルの再構築を行います。
# config DUALCPU
# cd ../../compile/DUALCPU
# make depend
# make
# make install
以上で、SMP対応カーネルの作成は終了です。システムを再起動します。 正常に SMPカーネルが作成されれば、システムの起動時に、以下のような メッセージが表示されます。
---  省略  ---
FreeBSD/SMP: Multiprocessor motherboard
cpu0 (BSP): apic id:  1, version: 0x00040011, at 0xfee00000
cpu1 (AP):  apic id:  0, version: 0x00040011, at 0xfee00000
io0 (APIC): apic id:  2, version: 0x00170011, at 0xfec00000
また、topコマンドでも確認できます。topコマンドの出力結果が以下のように なります。
                                          ↓ 0 と 1 に交互にかわる
PID USERNAME PRI NICE  SIZE    RES STATE  C   TIME   WCPU    CPU COMMAND
152 root       2   0   296K    20K nfsd   1 388:48  0.00%  0.00% nfsd
153 root       2   0   296K    20K nfsd   0 169:32  0.00%  0.00% nfsd

Linux

Linux では、Linuxカーネル1.3後期以降のカーネルでも、SMPの利用は可能ですが、 カーネル2.2では、SMPは標準でサポートされ、性能も大幅に改善されています。
通常、SMP対応のカーネルにするためには、カーネルの再構築が必要ですが、 Red Hat Linux 6.0 や Turbo Linux 日本語版4.0 では、インストール時に選択できる ようになっています。

カーネル2.0.36の場合は、以下のようにして行います。
# cd /usr/src/linux/
# make menuconfig
このとき、カーネル2.0.36では、SMPに関する項目がありません。 従って、/usr/src/linux/Makefile を直接、編集します。 14行目の # SMP = 1 となっている箇所のコメントを外します。
変更前
# SMP = 1
変更後
SMP = 1
カーネル2.2 の場合には、make menuconfig の際に、SMPを指定する箇所があります ので、そこを指定します。
この後、通常どおりにカーネルの再構築を行います。
# make depend   (設定内容を反映)
# make clean    (以前のオブジェクトファイルを削除)
# make zImage   (カーネルを作成)
または
# make bzImage  (高圧縮率のカーネルを作成)
ローダブルモジュールを作成する場合
# make modules
# make modules_install
コンパイルされ作成されたカーネル(/usr/src/linux/vmlinuz)を /boot/vmlinuz にコピーします。その後、LILOの起動設定をするため、 /etc/lilo.conf ファイルを編集します。 ここでは、/etc/lilo.conf ファイルは、以下のようになっています。
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
append="apm=on"   # APM機能をONにする
timeout=50
image=/boot/vmlinuz                           <
        label=linux_smp                       <
        root=/dev/sda1                        < 追加した
        initrd=/boot/initrd-2.0.36-3vl3.img   <   部分
        read-only                             <
image=/boot/vmlinuz-2.0.36-3vl3
        label=linux
        root=/dev/sda1
        initrd=/boot/initrd-2.0.36-3vl3.img
        read-only
/etc/lilo.conf ファイルを編集したら、LILOの変更を反映させるため、
# /sbin/lilo
を忘れずに実行します。
以上で、SMP対応カーネルの作成は終了です。システムを再起動します。 正常に SMPカーネルが作成されれば、システムの起動時に、以下のような メッセージが表示されます。
Intel MultiProcessor Specification v1.4
    Virtual Wire compatibility mode.
OEM ID: OEM00000 Product ID: PROD00000000 APIC at: 0xFEE00000
Processor #1 Pentium(tm) Pro APIC version 17
Processor #0 Pentium(tm) Pro APIC version 17
I/O APIC #2 Version 17 at 0xFEC00000.
Processors: 2
また、/proc/cpuinfo の内容を見ることでも確認できます。 以下のようになっています。
processor       : 0
cpu             : 686
model           : 
vendor_id       : GenuineIntel
stepping        : 1
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid           : yes
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
16 17 mmx 24 25
bogomips        : 701.24

processor       : 1
cpu             : 686
model           : 
vendor_id       : GenuineIntel
stepping        : 1
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid           : yes
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
16 17 mmx 24 25
bogomips        : 701.24

戻る

sakai@oak.eg.t.kanazawa-u.ac.jp
Last modified: Mon Apr 24 02:22:33 JST 2000