コンピュヌタ システムのシミュレヌタ: おなじみのフルプラットフォヌム シミュレヌタず未知の時蚈回りのシミュレヌタずトレヌス

コンピュヌタ システム シミュレヌタに関する蚘事の埌半では、コンピュヌタ シミュレヌタ、぀たり平均的なナヌザヌが最も頻繁に遭遇するフルプラットフォヌム シミュレヌションずクロックバむに぀いお、簡単な入門圢匏で匕き続き説明したす。 - クロック モデルずトレヌス。開発者サヌクルではより䞀般的です。

コンピュヌタ システムのシミュレヌタ: おなじみのフルプラットフォヌム シミュレヌタず未知の時蚈回りのシミュレヌタずトレヌス

В 最初の郚分 シミュレヌタずは䞀般的に䜕なのか、たたシミュレヌションのレベルに぀いお説明したした。 さお、その知識に基づいお、私はもう少し深く掘り䞋げお、フルプラットフォヌムのシミュレヌション、トレヌスの収集方法、埌でそれらをどう扱うか、そしおクロックバむクロックのマむクロアヌキテクチャ゚ミュレヌションに぀いお話すこずを提案したす。

フルプラットフォヌムシミュレヌタ、たたは「フィヌルドにいるだけでは戊士ではない」

XNUMX ぀の特定のデバむス (ネットワヌク カヌドなど) の動䜜を調査したい堎合、たたはこのデバむスのファヌムりェアたたはドラむバヌを䜜成したい堎合は、そのようなデバむスを個別にシミュレヌトできたす。 ただし、他のむンフラストラクチャから分離しお䜿甚するのはあたり䟿利ではありたせん。 察応するドラむバヌを実行するには、䞭倮プロセッサ、メモリ、デヌタ バスぞのアクセスなどが必芁です。 さらに、ドラむバヌが機胜するにはオペレヌティング システム (OS) ずネットワヌク スタックが必芁です。 さらに、別個のパケット ゞェネレヌタヌず応答サヌバヌが必芁になる堎合がありたす。

フルプラットフォヌム シミュレヌタヌは、完党な゜フトりェア スタックを実行するための環境を䜜成したす。これには、BIOS やブヌトロヌダヌから、OS 自䜓ず、同じネットワヌク スタック、ドラむバヌ、ナヌザヌ レベルのアプリケヌションなどのさたざたなサブシステムに至るたで、すべおが含たれたす。 これを行うために、プロセッサずメモリ、ディスク、入出力デバむス (キヌボヌド、マりス、ディスプレむ)、および同じネットワヌク カヌドなど、ほずんどのコンピュヌタ デバむスの゜フトりェア モデルを実装したす。

以䞋は、Intel の x58 チップセットのブロック図です。 このチップセット䞊のフルプラットフォヌムのコンピュヌタヌ シミュレヌタヌには、ブロック図には詳しく瀺されおいない IOH (入出力ハブ) および ICH (入出力コントロヌラヌ ハブ) 内のデバむスを含む、リストされおいるほずんどのデバむスの実装が必芁です。 。 ただし、実際に芋おみるず、これから実行する゜フトりェアで䜿甚されないデバむスはそれほど倚くありたせん。 このようなデバむスのモデルを䜜成する必芁はありたせん。

コンピュヌタ システムのシミュレヌタ: おなじみのフルプラットフォヌム シミュレヌタず未知の時蚈回りのシミュレヌタずトレヌス

ほずんどの堎合、フルプラットフォヌム シミュレヌタはプロセッサ呜什レベル (ISA、以䞋を参照) で実装されたす。 前の蚘事。 これにより、シミュレヌタ自䜓を比范的迅速か぀安䟡に䜜成できたす。 ISA レベルは、頻繁に倉曎される API/ABI レベルずは異なり、ほが䞀定のたたであるため、優れおいたす。 さらに、呜什レベルでの実装により、いわゆる未倉曎のバむナリ ゜フトりェアを実行できたす。぀たり、実際のハヌドりェアで䜿甚されおいるのずたったく同じように、すでにコンパむルされたコヌドを倉曎せずに実行できたす。 ぀たり、ハヌド ドラむブのコピヌ (「ダンプ」) を䜜成し、それをフル プラットフォヌム シミュレヌタヌのモデルのむメヌゞずしお指定すれば、出来䞊がりです。 – OS およびその他のプログラムは、远加の操䜜を行わずにシミュレヌタにロヌドされたす。

シミュレヌタのパフォヌマンス

コンピュヌタ システムのシミュレヌタ: おなじみのフルプラットフォヌム シミュレヌタず未知の時蚈回りのシミュレヌタずトレヌス

先ほど述べたように、システム党䜓、぀たりすべおのデバむスをシミュレヌトするプロセスはかなり時間がかかりたす。 これらすべおを非垞に詳现なレベル (マむクロアヌキテクチャたたは論理レベルなど) で実装するず、実行が非垞に遅くなりたす。 ただし、呜什レベルは適切な遞択であり、ナヌザヌが快適に操䜜するのに十分な速床で OS ずプログラムを実行できたす。

ここで、シミュレヌタのパフォヌマンスに぀いお觊れおおくのが適切でしょう。 通垞、IPS (呜什/秒)、より正確には MIPS (癟䞇 IPS)、぀たり XNUMX 秒間にシミュレヌタによっお実行されるプロセッサ呜什の数で枬定されたす。 同時に、シミュレヌションの速床は、シミュレヌション自䜓が実行されるシステムのパフォヌマンスにも䟝存したす。 したがっお、元のシステムず比范したシミュレヌタヌの「速床の䜎䞋」に぀いお話す方が正確かもしれたせん。

QEMU、VirtualBox、VmWare Workstation など、垂堎で最も䞀般的なフルプラットフォヌム シミュレヌタは、優れたパフォヌマンスを備えおいたす。 シミュレヌタで䜜業が進行しおいるこずにナヌザヌは気付かない堎合もありたす。 これは、プロセッサに実装された特別な仮想化機胜、バむナリ倉換アルゎリズム、その他の興味深い機胜のおかげで実珟したす。 これはすべお別の蚘事のトピックですが、簡単に蚀うず、仮想化は最新のプロセッサのハヌドりェア機胜であり、シミュレヌタが呜什をシミュレヌトするのではなく、呜什を実際のプロセッサに盎接送信しお実行できるようにしたす。シミュレヌタずプロセッサは䌌おいたす。 バむナリ倉換ずは、ゲスト マシン コヌドをホスト コヌドに倉換し、その埌実際のプロセッサ䞊で実行するこずです。 その結果、シミュレヌションは 5  10 倍ずわずかに遅くなるだけで、倚くの堎合、実際のシステムず同じ速床で実行されるこずもありたす。 これには倚くの芁因が圱響したすが。 たずえば、数十個のプロセッサを備えたシステムをシミュレヌトしたい堎合、速床はすぐに数十倍䜎䞋したす。 䞀方、最新バヌゞョンの Simics などのシミュレヌタは、マルチプロセッサ ホスト ハヌドりェアをサポヌトし、シミュレヌトされたコアを実際のプロセッサのコアに効果的に䞊列化したす。

マむクロアヌキテクチャ シミュレヌションの速床に぀いお蚀えば、通垞、シミュレヌションを行わない通垞のコンピュヌタヌでの実行よりも数桁遅く、玄 1000  10000 倍遅くなりたす。 たた、論理芁玠レベルでの実装は数桁遅くなりたす。 したがっお、このレベルでは FPGA が゚ミュレヌタずしお䜿甚され、パフォヌマンスが倧幅に向䞊したす。

以䞋のグラフは、モデルの詳现に察するシミュレヌション速床のおおよその䟝存性を瀺しおいたす。

コンピュヌタ システムのシミュレヌタ: おなじみのフルプラットフォヌム シミュレヌタず未知の時蚈回りのシミュレヌタずトレヌス

ビヌトごずのシミュレヌション

実行速床は䜎いにもかかわらず、マむクロアヌキテクチャ シミュレヌタは非垞に䞀般的です。 各呜什の実行時間を正確にシミュレヌトするには、プロセッサの内郚ブロックのシミュレヌションが必芁です。 ここで誀解が生じる可胜性がありたすが、結局のずころ、単に各呜什の実行時間をプログラムすればよいのではないかず思われるかもしれたせん。 しかし、同じ呜什の実行時間は呌び出しごずに異なる可胜性があるため、このようなシミュレヌタヌは非垞に䞍正確になりたす。

最も単玔な䟋はメモリ アクセス呜什です。 芁求されたメモリの堎所がキャッシュ内にある堎合、実行時間は最小限になりたす。 この情報がキャッシュにない堎合 (「キャッシュミス」)、呜什の実行時間が倧幅に増加したす。 したがっお、正確なシミュレヌションにはキャッシュ モデルが必芁です。 ただし、問題はキャッシュモデルに限定されたせん。 プロセッサは、デヌタがキャッシュにない堎合、メモリからデヌタが取埗されるのをただ埅぀わけではありたせん。 代わりに、メモリからの読み取り結果に䟝存しない呜什を遞択しお、次の呜什の実行を開始したす。 これは、プロセッサのアむドル時間を最小限に抑えるために必芁な、いわゆる「アりトオブオヌダヌ」実行 (OOO、アりトオブオヌダヌ実行) です。 察応するプロセッサ ブロックをモデル化するず、呜什の実行時間を蚈算するずきにこれらすべおを考慮するのに圹立ちたす。 これらの呜什のうち、メモリからの読み出し結果を埅っお実行される呜什の䞭には、条件ゞャンプ動䜜が発生する堎合がありたす。 珟時点で条件の結果が䞍明な堎合、プロセッサは実行を停止せず、「掚枬」を行い、適切な分岐を実行し、遷移点から積極的に呜什を実行し続けたす。 このようなブロックは分岐予枬子ず呌ばれ、マむクロアヌキテクチャ シミュレヌタヌにも実装する必芁がありたす。

䞋の図はプロセッサの䞻芁ブロックを瀺しおいたす。これを知る必芁はありたせん。マむクロアヌキテクチャ実装の耇雑さを瀺すためにのみ瀺されおいたす。

コンピュヌタ システムのシミュレヌタ: おなじみのフルプラットフォヌム シミュレヌタず未知の時蚈回りのシミュレヌタずトレヌス

実際のプロセッサ内のこれらすべおのブロックの動䜜は特別なクロック信号によっお同期されおおり、モデルでも同じこずが起こりたす。 このようなマむクロアヌキテクチャ シミュレヌタはサむクル アキュレヌトず呌ばれたす。 その䞻な目的は、開発䞭のプロセッサのパフォヌマンスを正確に予枬したり、ベンチマヌクなどの特定のプログラムの実行時間を蚈算したりするこずです。 倀が必芁な倀よりも䜎い堎合は、アルゎリズムずプロセッサ ブロックを倉曎するか、プログラムを最適化する必芁がありたす。

䞊で瀺したように、クロックごずのシミュレヌションは非垞に遅いため、プログラムの実行の実際の速床を調べ、デバむスの将来のパフォヌマンスを評䟡する必芁がある、プログラム動䜜の特定の瞬間を研究する堎合にのみ䜿甚されたす。プロトタむプをシミュレヌション䞭です。

この堎合、関数シミュレヌタヌを䜿甚しお、プログラムの残りの実行時間をシミュレヌトしたす。 この組み合わせは実際にはどのように起こるのでしょうか? たず、関数シミュレヌタヌが起動され、OS ず研究察象のプログラムを実行するために必芁なものがすべおロヌドされたす。 結局のずころ、私たちは OS 自䜓には興味がなく、プログラムの起動やその構成などの初期段階にも興味がありたせん。 ただし、これらの郚分をスキップしお、すぐに途䞭からプログラムの実行に移るこずもできたせん。 したがっお、これらの準備ステップはすべお機胜シミュレヌタヌで実行されたす。 関心のある時点たでプログラムが実行された埌、XNUMX ぀のオプションが可胜になりたす。 モデルをクロックバむサむクル モデルに眮き換えお、実行を続行できたす。 実行可胜コヌド (぀たり、通垞のコンパむルされたプログラム ファむル) を䜿甚するシミュレヌション モヌドは、実行駆動シミュレヌションず呌ばれたす。 これは最も䞀般的なシミュレヌション オプションです。 別のアプロヌチ、トレヌス駆動シミュレヌションも可胜です。

トレヌスベヌスのシミュレヌション

これは XNUMX ぀のステップで構成されたす。 機胜シミュレヌタたたは実際のシステムを䜿甚しお、プログラム動䜜のログが収集され、ファむルに曞き蟌たれたす。 このログをトレヌスず呌びたす。 怜査察象に応じお、トレヌスには実行可胜呜什、メモリ アドレス、ポヌト番号、および割り蟌み情報が含たれる堎合がありたす。

次のステップは、クロックバむクロック シミュレヌタがトレヌスを読み取り、そこに曞き蟌たれたすべおの呜什を実行するずき、トレヌスを「再生」するこずです。 最埌に、プログラムのこの郚分の実行時間ず、このプロセスのさたざたな特性 (キャッシュ内のヒット率など) を取埗したす。

トレヌスを操䜜する際の重芁な特城は決定論です。぀たり、䞊蚘の方法でシミュレヌションを実行するこずで、同じ䞀連のアクションを䜕床も繰り返し再珟したす。 これにより、モデル パラメヌタヌ (キャッシュ、バッファヌ、キュヌ サむズ) を倉曎し、さたざたな内郚アルゎリズムを䜿甚したり、それらを調敎したりするこずで、特定のパラメヌタヌがシステム パフォヌマンスにどのような圱響を䞎えるか、どのオプションが最良の結果をもたらすかを調査するこずが可胜になりたす。 これらすべおは、実際のハヌドりェア プロトタむプを䜜成する前に、プロトタむプ デバむス モデルを䜿甚しお行うこずができたす。

このアプロヌチの耇雑さは、最初にアプリケヌションを実行しおトレヌスを収集する必芁があるこずず、トレヌス ファむルのサむズが巚倧であるこずにありたす。 利点ずしおは、実行によるシミュレヌションには通垞、完党なモデルが必芁であるのに察し、察象のデバむスたたはプラットフォヌムの䞀郚のみをシミュレヌトすれば十分であるずいう事実が含たれたす。

そこで、この蚘事では、フルプラットフォヌム シミュレヌションの機胜を怜蚎し、さたざたなレベルでの実装の速床、クロックごずのシミュレヌション、およびトレヌスに぀いお説明したした。 次の蚘事では、個人的な目的ず倧䌁業での開発の芳点の䞡方で、シミュレヌタヌを䜿甚する䞻なシナリオに぀いお説明したす。

出所 habr.com

コメントを远加したす