[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:102325] Re: 組込Linuxドライバの作成方法


At Thu, 25 Mar 2004 17:36:28 +0900,
T.SHIOZAKI wrote:
> > 余談ですが、多重割り込みをサポートしようとすると、割り込み
> > コントローラを操作せざるを得なくなります。しかし、優先度
> > (splXX) の操作のたびに割り込みコントローラのレジスタに
> > アクセスするとはっきりと性能に影響します。そこで、「本当に
> > 割り込まれるまでは割り込みをマスクしたフリをする。割り込まれて
> > から改めて割り込みコントローラを操作してちゃんとマスクする。」
> > なんてことをやります。非常に I/O の忙しい環境下では 20% 位
> > 性能に影響したりしますから侮れません。
> 
> まあそれは x86 の話ですね。他の多くのアーキテクチャでは
> CPU 自体が割り込みレベルの判別機能を持っていて、
> この場合には CPU の制御レジスタの割り込みレベルを上げたり
> 下げたりするだけですから大したコストにはなりません:
> 
> http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/vax/include/intr.h?rev=1.14&content-type=text/x-cvsweb-markup

そんなにたくさんの CPU を知っているわけではないのですが、
CPU コア自身が割り込み優先度を制御するアーキテクチャには
SH3、SPARC などがありますね。

一方 ARM は割り込み要求入力が二つしかなく、優先度も固定です。
そのため NetBSD の ARM port は上記のテクニックを導入しています。
ARM の場合少なくとも StrongARM では割り込みコントローラが
プロセッサコアの外部にあり(つまり write buffer が効かない)、
SA110 では更に物理的に別チップでしたし、優先度指定のできない
単なるビットマスクのセットでしたから、かなり効果的だったと思います。

私が 20% の性能向上という実測値を得たのも StrongARM 系です。

MIPS は 6 つの割り込み要因をプロセッサコアがサポート
しますが、「割り込み優先度」という概念はなく各要因を個別に
マスクするだけです。MIPS 系統合型 CPU の中には多数の割り込みを
外部の割り込みコントローラにカスケードしていて、プロセッサ
コアに入る時には一つに絞られてしまっている例もあり、ARM と
似たような状況にあります。だから同じように効果的だと思うの
ですが、NetBSD では ARM のようには実装していないですね。

> そもそも spl という仕組み自体が x86 向きではないんですね。

ええ。プロセッサ自身が割り込み優先度をサポート
していないと、かなり込み入った処理が必要になります。

> CPU アーキテクチャを反映して、単に spl1 と spl0 の二つに
> 相当するものしかないだけです。もちろん、BSD カーネルはこれでは
> まともに動かないと思いますが(動いても遅い)、Linux は逆にそれに
> 合わせて割り込みまわりを組み立ててあるわけですね。

多重割り込みは CPU が低速だったころに必要とされた技術だと思います。
CPU が高速になり、全ての割り込みが十分短時間で終了するように
なってしまったので、強いて複雑な多重割り込みを導入する動機も
なくなってしまったのでしょう。

// 私は Z80 の DI/EI から始めた人なので、Linux の方がとっつき
// やすかったです。:-)

--
Naoto Shimazaki

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
References: