2012-02-08 71 views
0

Linuxカーネルスケジューラを変更して、既知の物理メモリの場所にある次のプロセスのPIDを表示します。 mmapはユーザー空間プログラムに使われていますが、ioremapはページをキャッシュ不可能なものとしてマークし、プログラムの実行を遅くします。私は、既知の物理メモリにすばやく書き込むことを望みます。 phys_to_virtは私が実現可能と考えるオプションです。別のテクニックのアイデア。ioremapやmmapを使わずにLinuxカーネルのキャッシュ可能な物理アドレスに書き込む

PS:私はqemuの上にこのlinuxカーネルを実行しています。 qemuはゲストカーネルが送信した情報を読み取るために物理アドレスを使用します。デバイスにアクセスするたびにこのIOデバイスをサポートするデバイスコードが呼び出されるため、既知のIOポートへの書き込みは実行できません。

EDIT:pidの物理アドレスの場所を安全にしたい。カーネルが使用している物理アドレスがどのプロセスにも割り当てられていないことを確認する方法を教えてください。私の知る限りでは、ioremapはページをキャッシュ可能とマークし、そのためにはあまり役に立ちません。

答えて

1

これを行う最も簡単な方法は、kmalloc()を実行してカーネル内のメモリを取得することです。次に、virt_to_phys()に渡すことで返されるポインタの物理アドレスを取得できます。これはトータルのハックですが、qemuでのデバッグ/トレースの場合はうまくいくはずです。

EDIT:私は質問に誤解しました。特定の物理アドレスを使用する場合は、できることがいくつかあります。たぶん、qemuがRAMページを予約済みとマークするために渡すe820マップを変更してから、カーネルがそれを使用しないようにするのが一番きれいです。 (つまり、ACPIテーブルが渡されるのと同じ方法)。

qemuを変更したくない場合は、初期のカーネル起動(おそらく約arch/x86/kernel/setup.c)を変更して、保護したい物理ページのreserve_bootmem()を使用することもできます。

実際に指定された物理アドレスを使用するには、ACPIドライバがテーブルにアクセスするのと同じ方法でioremap_cache()を使用します。

+0

しかし、kmallocは私に常に同じ物理アドレスを与えません。 qemuでは、私は既知の物理アドレスを想定しています。エミュレートされたioデバイスを使ってpidの物理アドレスを何とかqemuに伝えることができれば、私はまだあなたのソリューションを使うことができます。既知の物理アドレスを使用する方法を教えてください。 kmalloc/reserve(物理アドレス)のようなもの? –

+0

私の編集した回答を参照してください... – Roland

0

VMとホストの間でキャッシュの一貫性が誤解されているようですが、ここでは更新された回答です。 "VMの仮想アドレス" < - > "QEMUアドレス空間の仮想アドレスまたは物理アドレス"です。 それからkmallocでもかまいませんが、インスタンスごとに異なるかもしれません。 、または単にカーネル内のグローバル変数を宣言してください。

virt_to_physを使用すると、VM空間の物理アドレスにアクセスできます。これをQEMUのアドレススペースで翻訳することができます。 「カーネルが使用している物理アドレスがどのプロセスにも割り当てられていないのはどういう意味ですか?変数を含むページがスワップされる恐れがありますか? kmalloced memory is not swappable

オリジナル(と間違った)解答

あなたが書きたいアドレスがそれ自身のページにある場合、私はこのページのioremap が別のページに実行されるコードを遅くする方法を見ることができません。

とにかくキャッシュをフラッシュする必要があり、SSEがなければ、MMUとキャッシュがオンの場合にキャッシュをバイパスする方法がわかりません。

  • ioremapと、特定のページ非キャッシュ可能を宣言

  • 「正常な」アドレスを使用して、手動でキャッシュフラッシュあなたが書くたびに実行します。私は、この2つのオプションが見ることができます。

+0

申し訳ありませんが、私はここでキャッシュフラッシュの使用を理解していません。私はqemu-VMMの上でlinuxゲストを実行しています。だから、フラッシュがあるかどうかは関係ありません。 –

+0

合意 - なぜキャッシュフラッシュが拒否されるのですか?あなたがx86上にいるならば、とにかくすべてがキャッシュ一貫性です。 – Roland

関連する問題