[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: UVM (Re: MNN)



>ちゅーことでUVM対応にしてみました。

>多分動いてます。
>とりあえず30分くらいはpanicせずに動いています > bebox :-)

うごかしてみました。カーネルのコンパイルぐらいはできるようです。
問題が出ないようなら、今晩から uvm で生活してみます。

># 速くなったようななっていないような...

604e@200MHz ではほとんど誤差範囲ですね。ハードディスク上で GENERIC を
それぞれ何度かコンパイルしてみましたが、±5秒程度しか差が出ません。

メモリー64MBで 64MB の mfs をとって、そこに sys.tar.gz を広げて同様に
やってみるとちょっとだけ uvm が速いようですが、有意な差かどうかは
もっとやってみないとはっきりしません。
# こういう時、メモリーが多すぎて困る。:-)


>kcopyの所がちと不安。

こんなんにしてます。
# setfault() って setjmp()のようにふるまうのだけど、pcb_onfault != 0 で
# 飛んできたときちゃんと non-zero を返してくれるのかな…。(のはずなんだけど)

int
kcopy(src, dst, len)
	const void *src;
	void *dst;
	size_t len;
{
	faultbuf env;

	if (setfault(env)) {
		curpcb->pcb_onfault = 0;
		return EFAULT;
	}

	bcopy(src, dst, len);

	curpcb->pcb_onfault = 0;
	return 0;
}


ところで、これを書いているときに気づいたんですが、
 powerpc/powerpc/trap.c の trap() 中

			if (fb = p->p_addr->u_pcb.pcb_onfault) {
				frame->srr0 = (*fb)[0];
				frame->fixreg[1] = (*fb)[1];
				frame->cr = (*fb)[2];
				bcopy(&(*fb)[3], &frame->fixreg[13], 19);
				return;
			}

この bcopy の引数の 19 ってきっと 19 * 4 (ってゆーか sizeof(register_t))
ですよね、きっと。