NetBSD UVM page coloringメモ
@tsutsuii 誰もペリフェラルアクセスの為に使っていないのである! 16ビットバス前提の命令を最初に入れちゃったのはまあいろいろ同情する
2020-06-27 01:57:59注: MC68060 ではスーパースケーラ実装の障害になったのか、単にチップ面積的に厳しかったのか、MC68040で一部削除された超越数関数(sin/con等)命令の他、MC68040までに存在した整数命令の MOVEP命令や64ビット除算命令等が削除され、ソフトウェアでエミュレーションする方式を採用していました。
MOVEP命令については Firmware ROM でも使われることが多く課題が多かったとのこと。
「68060を斬る!!(第8回)」のこちらの記事に詳しいです。
http://retropc.net/x68000/software/hardware/060turbo/060turbo_sys/68060_08.htm
@tsutsuii 昨日から調べてみたんですが、少なくとも今日のセッションの時刻までにはご期待されているようなまともな回答が出せる気がまったくしないのでこの質問への回答はパスさせてください。わたしの力不足です。
2020-06-27 04:26:17@satoru_takeuchi そんな時間まで手間をかけさせてしまったようで、無茶ぶりすいませんでした……。こちらでももう一度まとめなおしてみたいと思います
2020-06-27 09:41:57cache alias と dynamic linker について。カーネルの場合は pmap_prefer(9) のような関数、もしくは uvm_km_alloc(9) の UVM_KMF_VAONLY | UVM_KMF_COLORMATCH 等で VA を調整すればよいけれど、 userland が mmap その他で無茶な shared mapping を行うといろいろと困ったことになる(はず)
2020-06-27 10:05:40alias と dynamic linker 続き。 かつての NetBSD/sh3 では、PA と VA の mapping で page color の異なる page を map しようとすると既存のページを unmap する(異なる page color の同時 map を許可しない)という実装になっていた nxr.netbsd.org/xref/src/sys/a…
2020-06-27 11:05:25ある時 shared lib が「命令実行中のページと命令が参照するページが異なる color の VA に同時に map されるという状態が発生して、その命令の実行と参照により永遠に map/unmap を繰り返してハングするという問題が発生したことがある mail-index.netbsd.org/port-sh3/2006/…
2020-06-27 11:07:28このときは「異なる color の同時 map について uncached での map とする」という対処を入れて回避した cvsweb.netbsd.org/bsdweb.cgi/src… ただ、これはリンカの ld の ABI規定の方で「共有されうるページの配置の alignment 制約を定義する」のが正しい、という話があった気がする
2020-06-27 11:11:06R4x00 では L1 cache が 32KB ダイレクトマップ の 4k page の 8 colors まで想定するという仕様になっているので、 32KB という制約が ABI のどこかに規定されているらしい。しかし GNU ld の実装ではその制約が抜け落ちている、という話を聞いた記憶がある。が、すぐに当該ファイルが探し出せない
2020-06-27 11:13:36R4000/R4400 には L2 cache が PIPT であることを利用して L1 cache で alias が発生したことをハードウェア的に検知して例外 (VCEI/VCED) を発生させる機構がある。R4000/R4400 には用意したのに R4600/R5000 で削除したのは「その頃には人類の技術の進歩で問題が解決される」ということだったのか
2020-06-27 11:17:34R4000 は L1 8KB なので 4KB/page なら 2 colors。R4400 は L1 16KB なので 4 colors。製品仕様上は L1 32KBまで想定されているので max 8 colors。ここで VCED/VCEI の例外は「実装されているキャッシュ容量での alias」なのか「仕様上最大の 32KB で起き得る alias なのか」が長らくわからなかった
2020-06-27 11:27:43NEWS-OSを実装されたような中の方々にとっては後者の「仕様上最大の 32KB で起き得る alias 検知で VCED/VCEI」ということは衆知の事実だったようなのですが、Oh!X 2000年春号の「初めて読むMIPS 第2回」の記事中の図では明示的に「VCEの比較は実キャッシュ容量」という記載があって判断がつかなかった
2020-06-27 11:45:02結局、いろいろ考えた末に NEWS-5000 を使って NetBSD/newsmips の VCED 例外ハンドラに例外要因の VA を記録するようなコードを仕込んで「8 colors のときしか起きないアドレスでも呼ばれる」を確認したような遠い記憶
2020-06-27 11:48:11sh3 の pmap の差分をよく見直したら「異なる color の同時 map について uncached での map とする」じゃなくて「同じ color だったら同時 map を許す」だけでした……。適当書いててすいません。
2020-06-27 12:01:53