How to install free softwares in Linux

last update: 29 Sep 2004

home |index |previous |next |contents

SMP



SMPマシンを使ってみる機会が出来たので、さっそくLinuxを入れて使ってみました。
4.1 マシン環境

4.2 カーネル構築

    4.2.1 2.2.x系

    2.2.x系では"make config"、もしくは"make xcnofig"実行時に選択項目として SMPか否かを選びます。
    ですから、特に問題なくカーネル構築ができると思います。

    4.2.2 2.0.x系

    2.0.x系はSMPを正式にはサポートしていませんので、 "make config"、もしくは"make xcnofig"実行後に 直接Makefileを変更します。 変更といってもコメント文を有効にするだけです。
    変更前
    
    14行目:# SMP = 1
    
    変更後
    
    14行目:SMP = 1
    

    /usr/src/linux/Makefileの変更


    以降、通常のカーネル構築と同じです。
4.3 procpsのインストール
せっかくですからpsやtopコマンドで、 どのプロセスがどっちのCPUで走っているかをモニターしたいところです。
そこでLinuxのSMP用のprocpsパッケージを公開しているサイトから "procps-1.2.9-SMP-GW.patched.tgz"をダウンロードします。

    4.3.1 ダウンロード

    以下のサイトから"procps-1.2.9-SMP-GW.patched.tgz"をダウンロードします。
    http://queenbee.fhcrc.org/~warms/procps

    4.3.2 インストール

    適当なディレクトリに"procps-1.2.9-SMP-GW.patched.tgz"を展開して コンパイルし、インストールします。
    今回は/usr/local/src以下に展開する事にします。
      % pwd
      /usr/local/src
      % gzip -cd procps-1.2.9-SMP-GW.patched.tgz | tar xvf -
      % cd procps-1.2.9-SMP-GW.patched
      % make distclean
      % make
      % su
      passwd: ****
      % make install
      % ldconfig -v
      % /bin/ps
      % exit
      % make distclean

    以上でコンパイルとインストールは終了です。

    4.3.3 使用方法

    "procps-1.2.9-SMP-GW.patched"により以下のSMP対応コマンドがインストールされます:
    使い方は通常のものと変わりありません。
    参考までにpsの出力を示します。第3列に"CPU"という項目があり、そこで各プロセスがどちらのCPUで実行されているかが表示されています。
    USER       PID CPU %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
    bin         84   1  0.0  0.1   860   284  ?  S   Nov  8   0:00 /sbin/rpc.portmap
    hironobu   121   1  0.0  0.0  1236     0   1 SW  Nov  8   0:00 (tcsh)
    hironobu   135   0  0.0  0.0  1132     0   1 SW  Nov  8   0:00 (startx)
    hironobu   136   1  0.0  0.0  1972     0   1 SW  Nov  8   0:00 (xinit)
    hironobu   139   1  0.0  0.0  1132     0   1 SW  Nov  8   0:00 (.xinitrc)
    hironobu   141   0  0.0  0.3  3060   620   1 S   Nov  8   0:00 kinput2 -wnn 
    hironobu   142   0  0.0  1.1  5736  2188   1 S   Nov  8   4:22 kwm 
    hironobu   155   0  0.0  1.8  7840  3544   1 S   Nov  8   0:03 kfm 
    hironobu   157   0  0.0  0.8  5276  1724   1 S   Nov  8   0:01 krootwm 
    hironobu   158   1  0.0  1.7  6576  3400   1 S   Nov  8   0:11 kpanel 
    hironobu   159   0  0.0  0.3  5812   652   1 S   Nov  8   0:01 kbgndwm 
    hironobu   179   0  0.0  0.0  1240     0  p0 SW  Nov  8   0:00 (tcsh)
    hironobu   180   0  0.0  0.3  1316   632  p1 S   Nov  8   0:01 (tcsh)
    hironobu  5964   0  0.0  2.5  7328  4952  p1 S    09:41   0:18 mule -nw 
    hironobu  6816   1  0.0  0.3  1224   616  p1 S    17:28   0:00 /bin/tcsh -c ps aux
    hironobu  6821   0  0.0  0.2   920   400  p1 R    17:28   0:00 ps aux 
    root         1   0  0.0  0.0   220    48  ?  S   Nov  8   0:03 init [3] 
    root         2   0  0.0  0.0     0     0  ?  SW  Nov  8   0:03 (kflushd)
    root         3   1  0.0  0.0     0     0  ?  SW  Nov  8   0:03 (kupdate)
    root         4   1  0.0  0.0     0     0  ?  SW  Nov  8   0:00 (kpiod)
    root         5   0  0.0  0.0     0     0  ?  SW  Nov  8   0:02 (kswapd)
    root        88   1  0.0  0.0   852   164  ?  S   Nov  8   0:00 /usr/sbin/syslogd
    root        91   1  0.0  0.0   896   144  ?  S   Nov  8   0:00 /usr/sbin/klogd 
    root        93   0  0.0  0.0   836     0  ?  SW  Nov  8   0:00 (inetd)
    root        95   0  0.0  0.0   856     0  ?  SW  Nov  8   0:00 (lpd)
    root        98   1  0.0  0.0   896    64  ?  S   Nov  8   0:02 /usr/sbin/rpc.mou
    root       100   0  0.0  0.0   916    68  ?  S   Nov  8   0:01 /usr/sbin/rpc.nfs
    root       103   0  0.0  0.0   836   188  ?  S   Nov  8   0:01 /usr/sbin/crond -
    root       122   1  0.0  0.0   832     0   2 SW  Nov  8   0:00 (agetty)
    root       123   0  0.0  0.0   832     0   3 SW  Nov  8   0:00 (agetty)
    root       124   1  0.0  0.0   832     0   4 SW  Nov  8   0:00 (agetty)
    root       125   1  0.0  0.0   832     0   5 SW  Nov  8   0:00 (agetty)
    root       126   0  0.0  0.0   832     0   6 SW  Nov  8   0:00 (agetty)
    root       137   1  0.1  6.7 27324 12988  ?  S   Nov  8   7:25 /usr/X11R6/bin/X
    root       177   0  0.0  0.6  2796  1336   1 S   Nov  8   0:10 kterm 
    root       191   1  0.0  0.3  1316   688  p0 S   Nov  8   0:00 -csh 
    root       314   1  0.0  2.2  6832  4404  p0 T   Nov  8   0:09 mule -nw 
    root      3765   0  0.3 16.1 38088 31224  p0 S   Nov 10   6:55 /usr/local/netsca
    root      3769   1  0.0  1.3 12828  2540  p0 S   Nov 10   0:00 (dns helper) 
    wnn        117   1  0.0  1.8  4984  3576  ?  S   Nov  8   0:00 /usr/local/bin/Wn
    

    ps auxの出力例


4.4 感想
SMPマシンでLinuxを使ってみた感想ですが、今のところ特別な感慨はありません:-)

というのも、Linuxは将来バージョンの2.4でさえスレッドレベルの タスクスケジューリングをサポートしませんので(スケジューリングはプロセスベース)、 (少なくともLinux上で)SMPを有効利用するアプリケーションがないのです。

注: Linuxはカーネルスロットをサポートしています。またユーザレベルではPThreadなどが 使えます。
しかし、Linuxはユーザが作ったマルチスレッドのアプリケーションを 一つのプロセスとして実行しますので、仮に2CPUマシンで実行したとしても そのアプリケーションは一つのCPU上で起動して終了まで動き続けます。

もっとも、XFree86にKDEなんていうウインドウマネージャを起動しつつ、 netscape上でJavaのアプレットをゴリゴリ動かしてもmuleの反応がすこぶる良いなど、 2CPUって力持ちだなと感じることはありました。
でも、これってあまりにも力業過ぎるのでSMPマシンを使って面白いとは思いません。

まっ、Linuxの載ったSMPマシンでマルチスレッドプログラムを動かして、 動的な負荷分散が行なわれたら面白いだろうなと思っていますがいつの事になるかは判りません。

Intel版のSolarisがSMPに対応し、且つスレッドレベルでスケジューリングを おこなっているのであれば、 私は文句なくSolarisに乗り替えるのですが、 不勉強なのでInterl版のSolarisについては知りません。そのうち調査しようと思っています。

注: とはいってもスレッドプログラミングってJAVAで遊んだ程度の知識しかないんですけども。


home |index |previous |next |contents


since 04/Oct/2004