厳密なアフィニティルールを持つアプリケーションにCPUホットプラグのサポートを追加したいと思います。各物理コアには正確に1つのスレッドが固定されていますが、CPUにスレッドを固定するために使用するロジックはかなり単純で、0..Nの間のCPUがオフラインの場合は失敗します。
サイズの配列がありMAX_CPU
、システム上の各CPUがその識別子によってスロットにマップされるアプローチを選択しました。たとえば、CPU0-> threads[0]
、およびCPU1->threads[1]
などです。アイデアは、システムのセットアップをミラーリングすることです。
for (i = 0; i < N; ++i)
set_affinity(threads[i], i);
ただし、オフラインCPUが最後以外の場所で検出された場合、失敗します。
さらに悪いことに、実行時にCPUがオフラインになると、固定されたスレッドのアフィニティマスクが予告なしにリセットされます。
最終的には、次のような複雑なセットアップをサポートしたいと考えています。
CPU0 CPU1 CPU2 CPU3
ONLINE OFFLINE ONLINE OFFLINE
オンラインおよびオフラインのCPUの認識をアプリケーションに組み込むにはどうすればよいですか?
私は避けて/proc
おり/sys
、他のプラットフォーム、特にさまざまなBSDへの移植に興味があるので。今のところx86_64を使用しているので、このcpuid
手順が役立つ場合があります。