[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))
ですよね、きっと。