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カーネル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