7

私が主に働いている Linux では、CPU アイソレーションと呼ばれる手法を使用しています。これは、プロセスをプロセッサに効果的にロックし、プロセッサが他の何かを実行するのを防ぎます。私たちのカーネル担当者は、割り込みを処理するためにいくつかの魔法を使いました。

Windows で私が見つけた最も近いものは、プロセス/スレッドをプロセッサにバインドするように見えるアフィニティの概念です。ただし、プロセッサがそのプロセス/スレッドのみを実行していることを保証するものではありません。つまり、コンテキストの切り替えやその他のジッターが発生する可能性があります。

半決定論的な実行時間のために Windows で CPU を分離する方法はありますか?

4

1 に答える 1

5

ユーザーモードでこれを行う正確な方法はありません。また、Windows はほとんどの場合、アプリがすべてのシステム リソースを占有するのを防ごうとします。ただし、他のプロセスの大部分を別のコア/プロセッサに分離して、コードをほとんど専用のコアで実行できるようにすることができます。

プロセスの列挙については、 MSDNのこちらのコードを参照してください。列挙コードを除いて、OpenProcessへのフラグとして PROCESS_SET_INFORMATION を指定します。NT クレデンシャルとして実行されていないプロセスに対してこれを行うには、管理者権限でコードを実行する必要があります。取得したプロセス ハンドルごとに、SetProcessAffinityMaskを呼び出して、1 つを除くすべてのコアでプロセスを実行するように設定します。次に、他のすべてのプロセス ハンドルから取り出した予約コアで別のプロセスを実行するようにプロセスを設定します。

これは、起動から、コードを実行しようとしているコアへの負荷分散までの他のプロセスを処理しません。

あなたのマイレージは異なる場合があります。これがテスト用またはコード専用のマシン用である場合は、おそらく問題ありません。これが他のすべてのアプリと一緒に実行することを意図した商用アプリの場合、コードを実行したときに他のすべてのアプリやサービスがタンクに入れられて、顧客はひどく失望するでしょう. 慎重に踏みます。

于 2013-03-11T08:48:20.867 に答える