[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:17918] Re: pon が働かない時があります。
佐野@浜松です。
In article <19990919144806L.m5021212@xxxxxxxxxxxx>
Yuusuke Tahara <m5021212@xxxxxxxxxxxx> さん writes:
> Ogiso> モジュールってダイナミックにロードされたりアンロードされたり
> Ogiso> するのでしょうか。私はてっきり一度ロードされたモジュールは
> Ogiso> rmmod しないとロードされたままだと思ってました。
>
> oishi> /etc/cron.d/modutils にこう書いてあります。
> oishi> */20 * * * * root test -f /proc/modules && /sbin/rmmod -a
>
> ということは,ダイナミックにロードされるけど,アンロードは行われないと
> いうことですね? (cron におまかせ)
kerneld を使っている場合は
=== JF の Module-HOWTO から引用 ====
<sect1>究極のユーティリティ
<p>
さて、ここまで読んできて、もう十分に感動したことでしょう…。それではここ
で、ローダブルモジュールのインストールとリムーブをすっかり忘れる方法を教
えましょう。
<p>kerneld デーモンを使えば、これらの面倒なことを自動的にやってくれます。
<tt/make config/ 時に CONFIG_KERNELD に「Y」と答え、できるかぎりブート直
後に <tt>/sbin/kerneld</tt> を実行します。現在のカーネル用に
<tt>/sbin/depmod -a</tt> されていなければなりません。(モジュールユーティ
リティにさらなる情報が書いてあります。)
<p>あるプログラムが、ローダブルモジュールでしか提供されていないカーネル
の機能を要求すると、そのモジュールが既にロードされていなければ、カーネル
は kerneld デーモンに良きにはからうように依頼します。
<p>次のようなことが行われます。
<itemize>
<item> カーネルは、要求された機能がカーネル内に無いことを確認。
<item> カーネルは、要求された機能を表すシンボルを添えて、kerneld
にメッセージを送信。
<item> kerneld デーモンは、例えば modprobe に、そのシンボルに合うモ
ジュールをロードするように依頼。
<item> modprobe は、適合するモジュールがあるかどうか、内部<em/エイリ
アス/テーブルを探す。このエイリアステーブルは <tt>/etc/conf.modules
</tt> 内に <em/alias/ 行があれば展開および認識される。
<item> insmod に、modprobe が kernel が必要としていると判断した
モジュールをロードするよう依頼される。<tt>/etc/conf.modules</tt>
の <tt/optoions/ 行に従って、各モジュールが設定される。
<item> modprobe は終了し、kerneld は要求が成功(もしくは失敗)したか
どうか kernel に伝える。
<item> kernel は、もともと設定されて<em/内蔵している/機能であるかの
ように、新しくインストールされた機能を使用する。
</itemize>
さらにちょと嬉しいおまけも付いてきます。インストールされたモジュールが、
ある期間使用されずにいると(ふつうは 1 分)、自動的にカーネルから外されま
す。
これによって、kernel が使用するメモリの量はいつでも最小限に抑えられます。
使われていないコードに場所を喰わせておくよりも、もっと有効にメモリを活用
することができます。
=== 引用終了====
# なお、同様の記述が kernel source の Documentation/modules.txt にあります。
ということになっています。2.2 系列のカーネルで kmod を使う場合には
=== 2.2.10 カーネルの Documentation/kmod.txt から引用 ===
Kmod: The Kernel Module Loader
Kirk Petersen
Kmod is a simple replacement for kerneld. It consists of a
request_module() replacement and a kernel thread called kmod. When the
kernel requests a module, the kmod wakes up and execve()s modprobe,
passing it the name that was requested.
If you have the /proc filesystem mounted, you can set the path of
modprobe (where the kernel looks for it) by doing:
echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
To periodically unload unused modules, put something like the following
in root's crontab entry:
0-59/5 * * * * /sbin/rmmod -a
Kmod only loads modules. Kerneld could do more (although
nothing in the standard kernel used its other features). If you
require features such as request_route, we suggest that you take
a similar approach. A simple request_route function could be called,
and a kroute kernel thread could be sent off to do the work. But
we should probably keep this to a minimum.
=== 引用終了 ===
ということになっています。
# /etc/cron.d/modutils の
# */20 * * * * root test -f /proc/modules && /sbin/rmmod -a
# は、/etc/init.d/modutils と比較すると
# */20 * * * * root test -f /proc/sys/kernel/modprobe && /sbin/rmmod -a
# が正しいんじゃないか、という気がするんですが、、、
> また,2.0.X 系のカーネルでは,kerneld というデーモンが採用されて
> いましたが,あれはダイナミックにアンロードもやってくれていたのでしょうか?
今でも 2.0.x 系カーネルでは kerneld が使われるようになっているはずです。
# cf /etc/rcS.d/S20modutils
--
#わたしのおうちは浜松市、「夜のお菓子」で有名さ。
<xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)