gem5での疑似命令とは何ですか?

Aug 19 2020

そのため、gem5でいくつかのシミュレーションがどのように実装されているかを確認していました。具体的には、PIMSim(https://github.com/vineodd/PIMSim)。私は彼らがx86アーキテクチャーのためにいくつかの疑似命令を実装したのを見ました。これらの疑似命令は、フルシステムモードでのみ使用されることを確認しました。そのために、彼らは次のファイルを変更しました:

  • include / gem5 / m5ops.h
  • util / m5 / m5op_x86.S
  • src / arch / x86 / isa / decode / two_byte_opcodes.isa
  • src / sim / pseudo_inst.hh(cc)

カスタム疑似命令を実装するためにどのような変更が必要かは理解しましたが、理解できないのは、それらが何であり、どのように使用されるかです。これらのファイルの外に、この関数が呼び出される場所は見つかりません。何か助けはありますか?前もって感謝します!

回答

1 CiroSantilli Aug 19 2020 at 21:39

疑似操作は、ゲストの内部から魔法のシミュレーション操作を行う方法です。このタイプの手法は、より一般的にはゲストインストルメンテーションとして知られています。

これらは、次のいずれかとして使用/実装できます。

  • 実際のISAの未使用のエンコーディングスペースに配置された魔法の命令

    これは常に有効になっていると思います。ただし、ホストCPUが引き継ぎ、不明な命令が表示された場合にクラッシュするKVMを除きます。

  • マジックメモリアドレスへのアクセス。これはPython構成から構成/有効化され、次のものSystem.pyが含まれます。

    m5ops_base = Param.Addr(
        0xffff0000 if buildEnv['TARGET_ISA'] == 'x86' else 0,
        "Base of the 64KiB PA range used for memory-mapped m5ops. Set to 0 "
        "to disable.")
    
  • ARMセミホスティング:最近、いくつかのカスタムセミホスティング操作がm5opsに接続されました。一部のm5opsと、シミュレータを終了するなど、一部の標準化されたセミホスティング操作で実現できることとの間に重複があることは、何の価値もありません。

最も一般的なm5opsのもののいくつかは次のとおりです。

  • m5 exit:シミュレータを終了します
  • m5 checkpoint:チェックポイントを取る
  • m5 dumpstats:ダンプ統計
  • m5 resetstats:統計をゼロにして、次のカウントを再開します m5 dumpstats
  • m5 readfile:ホストfs.py --scriptオプションの内容の値を読み取ります。Linuxのブートチェックポイント後にさまざまなワークロードを実行するのに非常に便利です。

m5opsは、上記の操作を他の方法で実行するタイミングを決定するのが難しい場合が多いため便利です。たとえば、Linuxの起動が終了したときに何かを実行します。たとえば、シミュレータからネイティブにそれを行うには、どのティックが発生するかを事前に知る必要があります。PCが特定のアドレスと一致するかどうかをチェックすることで混乱する可能性がありますが(Linuxpanicチェックなどですでに実行されています)、それは少し難しいです。

クロスコンパイルしてフルシステムゲストに配置し、実行可能なCLIインターフェイスから魔法の命令を公開できるツリー内m5ツールもあります。

ただし、バイナリにハードコーディングするだけで、必要に応じてより正確な結果を得ることができます。たとえば、X86のようにハードコーディングすることができます。

#define LKMC_M5OPS_CHECKPOINT __asm__ __volatile__ (".word 0x040F; .word 0x0043;" : : "D" (0), "S" (0) :)
#define LKMC_M5OPS_DUMPSTATS  __asm__ __volatile__ (".word 0x040F; .word 0x0041;" : : "D" (0), "S" (0) :)

その他のハードコードの例: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/4f82f79be7b0717c12924f4c9b7c4f46f8f18e2f/lkmc/m5ops.hまたは、次のようにメインラインツリーからそれらをよりうまくそして手間をかけて使用することもできます:gem5-20でm5を使用する方法

さらに詳しい情報は次の場所にもあります。 https://cirosantilli.com/linux-kernel-module-cheat/#m5ops