Linuxカーネル用の仮想CPUをコーディングすることを考えています。これは、別のマシンでスレッドまたはプロセスを実行するのがいつ良いかを基本的に決定します。フィードバックやアイデアは大歓迎です。
全体的なワークフローは次のようになります。
- スレッド/プロセスをヒューリスティックにテストします。プロセス/スレッドが非常に軽量である(CPU負荷の高いタスクがない)場合は、物理ローカルCPUを使用し、結果をキャッシュして、同じプロセス/スレッドの次回のルックアップを高速化します。
- プロセス/スレッドが重い(CPUを集中的に使用する)場合は、それを送信して、近くのネットワークのどこかに設定されている別のPCで実行します。
- ネットワーク遅延に応じて、決定が調整されます。たとえば、ネットワークが遅すぎる場合、より多くのタスクがローカルで実行されます。
つまり、高レベルの観点からは、カーネルに仮想CPUがあり、すべてのアプリケーションが実行されている単一のCPUになります。カーネル内から、仮想CPUは、システムスループットを最大化するために、特定のプロセス/スレッドを実行する場所を決定します。
確かに、アプリケーション/プロセス/スレッドがこのために設計されている場合(MPIを使用するなど)、このようなタスクは単純化できますが、私の目標は、ApacheHTTPなどの汎用アプリケーション用に何かを作成することです。たとえばApacheHTTPDはプロセスを実行します。リクエストごと。各プロセスが理想的なCPUで実行されている場合、スループットを最大化するために、ローカルまたはリモートにするとどうなりますか?スレッド/プロセスフォークを使用する他の多くのアプリケーションがあり、獣の性質に応じて仮想CPUが決定する場合があります。
ヒントはありますか?アドバイスしますか?問題?必読のドキュメント?これがうまくいかないことを怒鳴りますか?
私の最も素晴らしいよろしく