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

[netbsd,09530] Re: SH3 のキャッシュの問題



筒井さん

桜井です。

2008/4/30 Izumi Tsutsui <tsutsui@xxxxxxxxxxxxxxx>:
>  virtual alias に関してはいろいろ面倒なので
>  上林さんの言われるように 16k モードにした方が
>  手っ取り早いかもしれません。
>  (index が 16k/4way = 4k <= PAGE_SIZE なら alias は発生しない)

筒井さんと上林さんのおっしゃっている事が、ようやく今理解できました…。
(理解が遅くてすみません)

- 4KBページだと、bit31-12がMMUで変換される
- 1KBページだと、bit31-10がMMUで変換される。
- cacheのエントリ数が128だと、bit10-4がindexに使われる。
- cacheのエントリ数が256だと、bit11-4がindexに使われる。
- cacheのエントリ数が512だと、bit12-4がindexに使われる。
- MMUで変換されるビットと、indexに使われるビットが重なるとaliasが発生する
- cacheを16KBにしておけば、エントリ数が256なので、ビットが重ならない。

という事なのですね。

32KBキャッシュにして、invalidateばかり行われると遅くなりそうなので、
16KBで動作させる事にします。

>  FreeBSD/arm の pmap をちらっと見た範囲では
>  pmap_copy_page() などでも単純に cache flush している
>  だけで特別に対処がしてあるようには見えませんね。
>  というか NetBSD/arm32 から持っていっただけかも。
>
>  ……と思って NetBSD/arm32 の pmap を見たらこちらは
>  #ifdef PMAP_CACHE_VIPT というのがありますね。
>  pmap_vac_me_harder() あたりが参考になるかも?
>  (ちゃんと読んでませんが R/O なら alias を許容するコード?)

情報ありがとうございます。
余力があれば、こちらも読んでみます。

-- 
Hiroshi SAKURAI
http://assam-at-night.blogspot.com/